From 3f66183a0d7b9039ac503277a6c70e46f61158ff Mon Sep 17 00:00:00 2001 From: Nikita Kiselov Date: Wed, 3 Feb 2021 10:40:03 +0200 Subject: [PATCH] Adding model and dataset to the LFS --- .gitattributes | 2 + .gitignore | 2 + model/keypoint_classifier/keypoint.csv | 3 ++ .../keypoint_classifier.hdf5 | Bin 0 -> 22264 bytes .../keypoint_classifier.py | 36 ++++++++++++++ .../keypoint_classifier.tflite | Bin 0 -> 6352 bytes .../keypoint_classifier_label.csv | 4 ++ .../point_history.csv | 3 ++ .../point_history_classifier.hdf5 | Bin 0 -> 45544 bytes .../point_history_classifier.py | 44 ++++++++++++++++++ .../point_history_classifier.tflite | Bin 0 -> 6144 bytes .../point_history_classifier_label.csv | 4 ++ 12 files changed, 98 insertions(+) create mode 100644 .gitattributes create mode 100644 model/keypoint_classifier/keypoint.csv create mode 100644 model/keypoint_classifier/keypoint_classifier.hdf5 create mode 100644 model/keypoint_classifier/keypoint_classifier.py create mode 100644 model/keypoint_classifier/keypoint_classifier.tflite create mode 100644 model/keypoint_classifier/keypoint_classifier_label.csv create mode 100644 model/point_history_classifier/point_history.csv create mode 100644 model/point_history_classifier/point_history_classifier.hdf5 create mode 100644 model/point_history_classifier/point_history_classifier.py create mode 100644 model/point_history_classifier/point_history_classifier.tflite create mode 100644 model/point_history_classifier/point_history_classifier_label.csv diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..5356cf5 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,2 @@ +keypoint.csv filter=lfs diff=lfs merge=lfs -text +point_history.csv filter=lfs diff=lfs merge=lfs -text diff --git a/.gitignore b/.gitignore index 7f6b817..36055d2 100644 --- a/.gitignore +++ b/.gitignore @@ -129,3 +129,5 @@ dmypy.json .pyre/ .DS_Store + +.idea/ diff --git a/model/keypoint_classifier/keypoint.csv b/model/keypoint_classifier/keypoint.csv new file mode 100644 index 0000000..ffa81b1 --- /dev/null +++ b/model/keypoint_classifier/keypoint.csv @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b26bd6a7cf83b5658ff19d998844a0208432ffbcf3f91acd1bbd4cd73ab54059 +size 3647517 diff --git a/model/keypoint_classifier/keypoint_classifier.hdf5 b/model/keypoint_classifier/keypoint_classifier.hdf5 new file mode 100644 index 0000000000000000000000000000000000000000..7e022acd33e063e5748df499514b6ba3f37518d1 GIT binary patch literal 22264 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 Wz=z^TsPui~Ull*f-&6iw@$-Kt7ov;+ literal 0 HcmV?d00001 diff --git a/model/keypoint_classifier/keypoint_classifier.py b/model/keypoint_classifier/keypoint_classifier.py new file mode 100644 index 0000000..3d05541 --- /dev/null +++ b/model/keypoint_classifier/keypoint_classifier.py @@ -0,0 +1,36 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +import numpy as np +import tensorflow as tf + + +class KeyPointClassifier(object): + def __init__( + self, + model_path='model/keypoint_classifier/keypoint_classifier.tflite', + num_threads=1, + ): + self.interpreter = tf.lite.Interpreter(model_path=model_path, + num_threads=num_threads) + + self.interpreter.allocate_tensors() + self.input_details = self.interpreter.get_input_details() + self.output_details = self.interpreter.get_output_details() + + def __call__( + self, + landmark_list, + ): + input_details_tensor_index = self.input_details[0]['index'] + self.interpreter.set_tensor( + input_details_tensor_index, + np.array([landmark_list], dtype=np.float32)) + self.interpreter.invoke() + + output_details_tensor_index = self.output_details[0]['index'] + + result = self.interpreter.get_tensor(output_details_tensor_index) + + result_index = np.argmax(np.squeeze(result)) + + return result_index diff --git a/model/keypoint_classifier/keypoint_classifier.tflite b/model/keypoint_classifier/keypoint_classifier.tflite new file mode 100644 index 0000000000000000000000000000000000000000..d5adccbbc5054b29feef9ef4c5ff8f1e51114c73 GIT binary patch literal 6352 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 Vw1tgqNm5_8f8O8SckCNF*Hv?9-JOlYx9e? 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 literal 0 HcmV?d00001 diff --git a/model/point_history_classifier/point_history_classifier_label.csv b/model/point_history_classifier/point_history_classifier_label.csv new file mode 100644 index 0000000..411a298 --- /dev/null +++ b/model/point_history_classifier/point_history_classifier_label.csv @@ -0,0 +1,4 @@ +Stop +Clockwise +Counter Clockwise +Move