単一の手の位置推定を行う試験的なモデルです。
→Raspberry PiやUnity Barracuda上で動作する軽量なモデルを目指しています
手のXY座標とクラス分類結果(無し、パー、グー)の出力を行います。
左図:PC実行 EfficientNet版 ONNXモデル
右図:Raspberry pi4実行 MobileNet v1版 TensorFlow-Liteモデル
MobileNet v1版はUnity Barracuda上でも動作します。
興味のある方はUnity-Barracuda-SingleHandLocalization-WebGLを確認ください。
- mediapipe 0.8.1 or later ※01_create_dataset.pyを利用する場合のみ
- Tensorflow 2.4.0 or later
- OpenCV 3.4.2 or Later
- onnxruntime 1.5.2 or later ※03_onnx_inference_sample.pyを利用する場合のみ
Webカメラを使ったデモの実行方法は以下です。
TensorFlow Kerasモデル、TensorFlow-Liteモデル、ONNXモデルそれぞれのサンプルがあります。
背景が無地のほうが検出しやすいです。
python 03_tf_keras_inference_sample.py
python 03_tflite_inference_sample.py
python 03_onnx_inference_sample.py
デモ実行時には、以下のオプションが指定可能です。
- --device
カメラデバイス番号の指定 (デフォルト:0) - --width
カメラキャプチャ時の横幅 (デフォルト:960) - --height
カメラキャプチャ時の縦幅 (デフォルト:540) - --model
ロード対象のモデル
03_tf_keras_inference_sample.py:'02_model/EfficientNetB0/SingleHandLocalization_224.hdf5'
03_tflite_inference_sample.py:'02_model/EfficientNetB0/SingleHandLocalization_224.tflite'
03_onnx_inference_sample.py:'02_model/EfficientNetB0/SingleHandLocalization_224.onnx' - --input_shape
モデル入力画像の一辺のサイズ (デフォルト:224)
│ 01_create_dataset.py │ 02_train_model(MobileNetV1).ipynb │ 03_tf_keras_inference_sample.py │ 03_tflite_inference_sample.py │ 03_onnx_inference_sample.py │ ├─01_dataset │ ├─02_model │ ├─EfficientNetB0 │ │ │ SingleHandLocalization_224.hdf5 │ │ │ SingleHandLocalization_224.onnx │ │ └─ SingleHandLocalization_224.tflite │ │ │ └─MobileNetV1 │ │ SingleHandLocalization_1.0_128.hdf5 │ │ SingleHandLocalization_1.0_128.onnx │ └─ SingleHandLocalization_1.0_128.tflite │ └─utils └─cvfpscalc.py
ディレクトリ内容
データセット作成用のスクリプトです。
データセットは01_datasetディレクトリに保存します。
モデル訓練用のスクリプトです。
Google Colaboratory上での実行を想定しています。
推論サンプルです。
01_create_dataset.pyによって作成したデータセットを格納するディレクトリです。
顔出しNGの方のデータがあるため、今回モデル訓練に使用したデータセットは非公開です。
訓練済みのモデルを格納しているディレクトリです。
EfficientNet-B0ベース(入力サイズ224224)とMobileNet v1ベース(128128)のモデルを格納しています。
FPS計測用のモジュールを格納しています。
顔出しNGの方の写真も利用しているため、データセットは非公開です。
今回訓練に使用したデータ総数は以下の通りです。
総数:65405枚
クラスID 0(手無し):7824
クラスID 1(パー):28605
クラスID 2(グー):28976
mediapipeを利用したデータセットを収集するスクリプト(01_create_dataset.py)は公開しています。
- FlattenをGlobal Average Poolingに差し替える
高橋かずひと(https://twitter.com/KzhtTkhs)
Single-Hand-Localization is under Apache v2 License.