Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/Kazuhito00/hand-gesture-recognition-using-mediapipe
MediaPipe(Python版)を用いて手の姿勢推定を行い、検出したキーポイントを用いて、簡易なMLPでハンドサインとフィンガージェスチャーを認識するサンプルプログラムです。(Estimate hand pose using MediaPipe(Python version). This is a sample program that recognizes hand signs and finger gestures with a simple MLP using the detected key points.)
https://github.com/Kazuhito00/hand-gesture-recognition-using-mediapipe
gesture gesture-recognition hand-pose-estimation hands mediapipe python
Last synced: 3 months ago
JSON representation
MediaPipe(Python版)を用いて手の姿勢推定を行い、検出したキーポイントを用いて、簡易なMLPでハンドサインとフィンガージェスチャーを認識するサンプルプログラムです。(Estimate hand pose using MediaPipe(Python version). This is a sample program that recognizes hand signs and finger gestures with a simple MLP using the detected key points.)
- Host: GitHub
- URL: https://github.com/Kazuhito00/hand-gesture-recognition-using-mediapipe
- Owner: Kazuhito00
- License: apache-2.0
- Created: 2020-12-15T13:26:23.000Z (almost 4 years ago)
- Default Branch: main
- Last Pushed: 2023-04-05T00:51:50.000Z (over 1 year ago)
- Last Synced: 2024-02-17T05:33:55.521Z (9 months ago)
- Topics: gesture, gesture-recognition, hand-pose-estimation, hands, mediapipe, python
- Language: Jupyter Notebook
- Homepage:
- Size: 1.04 MB
- Stars: 458
- Watchers: 10
- Forks: 364
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
- Citation: CITATION.cff
Awesome Lists containing this project
- awesome-mediapipe - Recognizes hand signs and finger gestures using Python mediapipe
README
[Japanese/[English](https://github.com/Kazuhito00/hand-gesture-recognition-using-mediapipe/blob/main/README_EN.md)]
> **Note**
>
キーポイント分類について、モデルを集めたリポジトリを作成しました。
>
→ [Kazuhito00/hand-keypoint-classification-model-zoo](https://github.com/Kazuhito00/hand-keypoint-classification-model-zoo)# hand-gesture-recognition-using-mediapipe
MediaPipe(Python版)を用いて手の姿勢推定を行い、検出したキーポイントを用いて、
簡易なMLPでハンドサインとフィンガージェスチャーを認識するサンプルプログラムです。
![mqlrf-s6x16](https://user-images.githubusercontent.com/37477845/102222442-c452cd00-3f26-11eb-93ec-c387c98231be.gif)本リポジトリは以下の内容を含みます。
* サンプルプログラム
* ハンドサイン認識モデル(TFLite)
* フィンガージェスチャー認識モデル(TFLite)
* ハンドサイン認識用学習データ、および、学習用ノートブック
* フィンガージェスチャー認識用学習データ、および、学習用ノートブック# Requirements
* mediapipe 0.8.4
* OpenCV 4.6.0.66 or Later
* Tensorflow 2.9.0 or Later
* protobuf <3.20,>=3.9.2
* scikit-learn 1.0.2 or Later (学習時に混同行列を表示したい場合のみ)
* matplotlib 3.5.1 or Later (学習時に混同行列を表示したい場合のみ)# Demo
Webカメラを使ったデモの実行方法は以下です。
```bash
python app.py
```DockerとWebカメラを使ったデモの実行方法は以下です。
```bash
docker build -t hand_gesture .xhost +local: && \
docker run --rm -it \
--device /dev/video0:/dev/video0 \
-v `pwd`:/home/user/workdir \
-v /tmp/.X11-unix/:/tmp/.X11-unix:rw \
-e DISPLAY=$DISPLAY \
hand_gesture:latestpython app.py
```デモ実行時には、以下のオプションが指定可能です。
* --device
カメラデバイス番号の指定 (デフォルト:0)
* --width
カメラキャプチャ時の横幅 (デフォルト:960)
* --height
カメラキャプチャ時の縦幅 (デフォルト:540)
* --use_static_image_mode
MediaPipeの推論にstatic_image_modeを利用するか否か (デフォルト:未指定)
* --min_detection_confidence
検出信頼値の閾値 (デフォルト:0.5)
* --min_tracking_confidence
トラッキング信頼値の閾値 (デフォルト:0.5)# Directory
│ app.py
│ keypoint_classification.ipynb
│ point_history_classification.ipynb
│
├─model
│ ├─keypoint_classifier
│ │ │ keypoint.csv
│ │ │ keypoint_classifier.hdf5
│ │ │ keypoint_classifier.py
│ │ │ keypoint_classifier.tflite
│ │ └─ keypoint_classifier_label.csv
│ │
│ └─point_history_classifier
│ │ point_history.csv
│ │ point_history_classifier.hdf5
│ │ point_history_classifier.py
│ │ point_history_classifier.tflite
│ └─ point_history_classifier_label.csv
│
└─utils
└─cvfpscalc.py
### app.py
推論用のサンプルプログラムです。
また、ハンドサイン認識用の学習データ(キーポイント)、
フィンガージェスチャー認識用の学習データ(人差指の座標履歴)を収集することもできます。### keypoint_classification.ipynb
ハンドサイン認識用のモデル訓練用スクリプトです。### point_history_classification.ipynb
フィンガージェスチャー認識用のモデル訓練用スクリプトです。### model/keypoint_classifier
ハンドサイン認識に関わるファイルを格納するディレクトリです。
以下のファイルが格納されます。
* 学習用データ(keypoint.csv)
* 学習済モデル(keypoint_classifier.tflite)
* ラベルデータ(keypoint_classifier_label.csv)
* 推論用クラス(keypoint_classifier.py)### model/point_history_classifier
フィンガージェスチャー認識に関わるファイルを格納するディレクトリです。
以下のファイルが格納されます。
* 学習用データ(point_history.csv)
* 学習済モデル(point_history_classifier.tflite)
* ラベルデータ(point_history_classifier_label.csv)
* 推論用クラス(point_history_classifier.py)### utils/cvfpscalc.py
FPS計測用のモジュールです。# Training
ハンドサイン認識、フィンガージェスチャー認識は、
学習データの追加、変更、モデルの再トレーニングが出来ます。### ハンドサイン認識トレーニング方法
#### 1.学習データ収集
「k」を押すと、キーポイントの保存するモードになります(「MODE:Logging Key Point」と表示される)
「0」~「9」を押すと「model/keypoint_classifier/keypoint.csv」に以下のようにキーポイントが追記されます。
1列目:押下した数字(クラスIDとして使用)、2列目以降:キーポイント座標
キーポイント座標は以下の前処理を④まで実施したものを保存します。
初期状態では、パー(クラスID:0)、グー(クラスID:1)、指差し(クラスID:2)の3種類の学習データが入っています。
必要に応じて3以降を追加したり、csvの既存データを削除して、学習データを用意してください。
#### 2.モデル訓練
「[keypoint_classification.ipynb](keypoint_classification.ipynb)」をJupyter Notebookで開いて上から順に実行してください。
学習データのクラス数を変更する場合は「NUM_CLASSES = 3」の値を変更し、
「model/keypoint_classifier/keypoint_classifier_label.csv」のラベルを適宜修正してください。#### X.モデル構造
「[keypoint_classification.ipynb](keypoint_classification.ipynb)」で用意しているモデルのイメージは以下です。### フィンガージェスチャー認識トレーニング方法
#### 1.学習データ収集
「h」を押すと、指先座標の履歴を保存するモードになります(「MODE:Logging Point History」と表示される)
「0」~「9」を押すと「model/point_history_classifier/point_history.csv」に以下のようにキーポイントが追記されます。
1列目:押下した数字(クラスIDとして使用)、2列目以降:座標履歴
キーポイント座標は以下の前処理を④まで実施したものを保存します。
初期状態では、静止(クラスID:0)、時計回り(クラスID:1)、反時計回り(クラスID:2)、移動(クラスID:4)の
4種類の学習データが入っています。
必要に応じて5以降を追加したり、csvの既存データを削除して、学習データを用意してください。
#### 2.モデル訓練
「[point_history_classification.ipynb](point_history_classification.ipynb)」をJupyter Notebookで開いて上から順に実行してください。
学習データのクラス数を変更する場合は「NUM_CLASSES = 4」の値を変更し、
「model/point_history_classifier/point_history_classifier_label.csv」のラベルを適宜修正してください。#### X.モデル構造
「[point_history_classification.ipynb](point_history_classification.ipynb)」で用意しているモデルのイメージは以下です。
「LSTM」を用いたモデルは以下です。
使用する際には「use_lstm = False」を「True」に変更してください(要tf-nightly(2020/12/16時点))
# Application example
以下に応用事例を紹介します。
* [Control DJI Tello drone with Hand gestures](https://towardsdatascience.com/control-dji-tello-drone-with-hand-gestures-b76bd1d4644f)
* [Classifying American Sign Language Alphabets on the OAK-D](https://www.cortic.ca/post/classifying-american-sign-language-alphabets-on-the-oak-d)# Reference
* [MediaPipe](https://mediapipe.dev/)
* [Kazuhito00/mediapipe-python-sample](https://github.com/Kazuhito00/mediapipe-python-sample)# Author
高橋かずひと(https://twitter.com/KzhtTkhs)# License
hand-gesture-recognition-using-mediapipe is under [Apache v2 license](LICENSE).