def post(self):
        """Return predictions from the trained model."""
        global _SESSION

        model, encoder = _load_keras_model()

        bins = json.loads(Path(_MODEL_DIR / 'bins.json').read_text())
        bins_partial = json.loads(
            Path(_MODEL_DIR / 'bins_partial.json').read_text())

        instances = request.get_json(force=True)['instances']

        data = []
        for sample in instances:
            gesture = sample['gesture']
            data_clean = list(clean_data([process_motion_rotation(sample)]))

            if data_clean:

                _, feature_df_total = featurize(data_clean,
                                                col_bins=bins[gesture])

                _, feature_df_partial = featurize(
                    data_clean, col_bins=bins_partial[gesture])

                data.append(np.vstack([feature_df_partial, feature_df_total]))

        input_t: np.ndarray = np.array(data, dtype=np.float64)

        if not np.any(input_t):
            return "Error: Invalid model input.", HTTPStatus.BAD_REQUEST

        tf.keras.backend.set_session(_SESSION)

        scores: np.ndarray = model.predict(input_t,
                                           max_queue_size=20,
                                           use_multiprocessing=True,
                                           workers=4)
        probas: np.ndarray = np.exp(scores)
        probas /= np.sum(probas, axis=1)[:, np.newaxis]

        labels: np.ndarray = np.argmax(scores, axis=1)

        candidates: list = encoder.inverse_transform(labels).tolist()

        response = {
            'payload': [{
                'candidate':
                candidates[i],
                'candidate_score':
                float(sample[labels[i]]),
                'predictions':
                dict(zip(encoder.classes_, sample.tolist())),
            } for i, sample in enumerate(probas)],
            'total':
            len(candidates)
        }

        return response, HTTPStatus.OK
Пример #2
0
    def post(self):
        """Return predictions from the trained model."""
        global _SESSION

        model, encoder = _load_keras_model()

        instances = request.get_json(force=True)['instances']

        data = [
            demo.process_motion_rotation(sample, i)
            for i, sample in enumerate(instances)
        ]
        df = demo.create_dataframe(demo.clean_data(data), False)

        input_t: np.ndarray = np.array(df, dtype=np.float64)

        tf.keras.backend.set_session(_SESSION)

        scores: np.ndarray = model.predict(input_t,
                                           max_queue_size=20,
                                           use_multiprocessing=True,
                                           workers=4)
        probas: np.ndarray = np.exp(scores)
        probas /= np.sum(probas, axis=1)[:, np.newaxis]

        labels: np.ndarray = np.argmax(scores, axis=1)

        candidates: list = encoder.inverse_transform(labels).tolist()

        response = {
            'payload': [{
                'candidate':
                candidates[i],
                'candidate_score':
                float(sample[labels[i]]),
                'predictions':
                dict(zip(encoder.classes_, sample.tolist())),
            } for i, sample in enumerate(probas)],
            'total':
            len(candidates)
        }

        return response, HTTPStatus.OK