Ejemplo n.º 1
0
 def test_fail_prediction_by_invalid_model_type(self):
     with self.assertRaises(InvalidMessage):
         messagebus.handle(
             commands.MakePrediction(
                 image_path=os.path.join(ROOT_DIR, 'tests', 'data',
                                         'sample.jpg'),
                 model_type='invalid',
             ))
Ejemplo n.º 2
0
 def test_raise_error_if_topk_is_negative(self):
     with self.assertRaises(ValueError):
         messagebus.handle(
             commands.MakePrediction(
                 image_path=os.path.join(ROOT_DIR, 'tests', 'data',
                                         'sample.jpg'),
                 model_type='fake',
                 topk=-3,
             ))
Ejemplo n.º 3
0
    def test_raise_error_due_to_wrong_image_format_when_predicting(self):
        fp = tempfile.NamedTemporaryFile()
        fp.write(b'non-image data')

        with self.assertRaises(InvalidImageDataFormat):
            messagebus.handle(
                commands.MakePrediction(
                    image_path=fp.name,
                    model_type='fake',
                ), )
Ejemplo n.º 4
0
def upload_image_file_object(img_file):
    """Read image file data and save to Database if valid.
    Return error if the given file is invalid.
    """

    if img_file:
        try:
            encode = messagebus.handle(
                commands.UploadImage(file_object=img_file))
        except Exception as e:
            kwargs = {'status': 'error', 'message': 'failed to save image'}

            if config.DEBUG:  # pragma: no cover
                logger.error(traceback.format_exc())
            else:  # pragma: no cover
                logger.error(e)

            status_code = 400
        else:
            kwargs = {'status': 'success', 'imgId': encode}
            status_code = 201

    else:  # pragma: no cover
        if config.DEBUG:
            logger.error('Counld not find image')
        kwargs = {'status': 'error', 'message': 'failed to upload image'}

        status_code = 400

    return kwargs, status_code
Ejemplo n.º 5
0
 def test_run_prediction(self):
     pred = messagebus.handle(
         commands.MakePrediction(
             image_path=os.path.join(ROOT_DIR, 'tests', 'data',
                                     'sample.jpg'),
             model_type='fake',
         ))
     self.assertTrue(isinstance(pred, np.ndarray))
Ejemplo n.º 6
0
    def test_get_labels_with_prediction(self):
        result = messagebus.handle(
            commands.MakePrediction(
                image_path=os.path.join(ROOT_DIR, 'tests', 'data',
                                        'sample.jpg'),
                model_type='fake',
                topk=3,
            ))

        self.assertEqual(len(result), 3)
Ejemplo n.º 7
0
    def test_add_label_to_prediction_result(self):
        data = np.random.randint(1, 100,
                                 len(FakeLabelData.labels)).astype(np.float32)
        data /= data.sum()

        result = messagebus.handle(
            commands.LabelPrediction(prediction=data,
                                     model_type='fake',
                                     topk=2))
        self.assertEqual(len(result), 2)
Ejemplo n.º 8
0
def fetch_label_list(model_type):
    try:
        label_list = messagebus.handle(
            commands.FetchLabels(model_type=model_type))
    except InvalidMessage:
        return {'status': 'error', 'message': 'Invalid model type'}, 400

    kwargs = {'status': 'success', 'labelList': label_list}
    response = jsonify(**kwargs)
    response.status_code = 200
    return response
Ejemplo n.º 9
0
def predict_image(model_type):
    """Predict image from a provided file.

    The output format is:
        {
            status: str
            imgId: str
            result: List
        }
    """
    img_file = request.files['file']
    kwargs, status_code = upload_image_file_object(img_file)

    if status_code == 201:
        try:
            model = Image.get_by_encoded_id(kwargs.get('imgId'))
            filepath = os.path.join(config.STATIC_DIR, config.UPLOAD_DIR,
                                    model.filename)

            result = messagebus.handle(
                commands.MakePrediction(
                    image_path=filepath,
                    model_type=model_type,
                    topk=3,
                ))

            # convert float to percentages to display to be readable
            result = list(map(serialize_predict_result, result))
            kwargs['result'] = result

        except Exception as e:
            if config.DEBUG:  # pragma: no cover
                logger.error(traceback.format_exc())
            else:  # pragma: no cover
                logger.error(e)
            kwargs = {
                'status': 'error',
                'message': 'a problem occured during prediction'
            }
            status_code = 500

    response = jsonify(kwargs)
    response.status_code = status_code

    return response
Ejemplo n.º 10
0
 def test_fetch_labels_by_invalid_model_type(self):
     with self.assertRaises(InvalidMessage):
         messagebus.handle(commands.FetchLabels(model_type='invalid'))
Ejemplo n.º 11
0
 def test_fetch_all_label_items(self):
     labels = messagebus.handle(commands.FetchLabels(model_type='fake'))
     self.assertEqual(labels, FakeLabelData.labels)
Ejemplo n.º 12
0
 def test_fetch_target_label(self):
     label = messagebus.handle(
         commands.FetchLabels(model_type='fake', label_id=2))[0]
     self.assertEqual(label, FakeLabelData.labels[2])