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
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