MediaPipe Gesture Recognizer タスクを使用すると、ハンド ジェスチャーをリアルタイムで認識し、認識されたハンド ジェスチャーの結果と、検出された手のランドマークを取得できます。このタスクを使用すると、ユーザーの特定の手のジェスチャーを認識し、そのジェスチャーに対応するアプリの機能を呼び出すことができます。
このタスクは、機械学習(ML)モデルを使用して画像データを処理し、静的データまたは連続ストリームを受け入れます。このタスクは、画像座標の手のランドマーク、世界座標の手のランドマーク、利き手(左手/右手)、複数の手のハンド ジェスチャー カテゴリを出力します。
使ってみる
このタスクの使用を開始するには、ターゲット プラットフォームのいずれかの実装ガイドに沿って操作します。これらのプラットフォーム固有のガイドでは、推奨モデルを使用してこのタスクの基本的な実装について説明し、推奨構成オプションを含むコード例を示します。
- Android - コード例
- Python - コード例
- ウェブ - [コード例](https://github.com/google-ai-edge/mediapipe-samples-web/blob/main/src/tasks/gesture-recognizer.ts - ガイド
タスクの詳細
このセクションでは、このタスクの機能、入力、出力、構成オプションについて説明します。
機能
- 入力画像処理 - 処理には、画像の回転、サイズ変更、正規化、色空間変換が含まれます。
- スコアのしきい値 - 予測スコアに基づいて結果をフィルタします。
- ラベルの許可リストと拒否リスト - モデルで認識されるジェスチャー カテゴリを指定します。
| タスク入力 | タスク出力 |
|---|---|
ジェスチャー認識ツールは、次のいずれかのデータ型の入力を受け付けます。
|
ジェスチャー認識ツールは次の結果を出力します。
|
構成オプション
このタスクには、次の構成オプションがあります。
| オプション名 | 説明 | 値の範囲 | デフォルト値 | |
|---|---|---|---|---|
running_mode |
タスクの実行モードを設定します。モードは 3 つあります。 IMAGE: 単一の画像入力用のモード。 動画: 動画のデコードされたフレームのモード。 LIVE_STREAM: カメラなどの入力データのライブ ストリームのモード。このモードでは、結果を非同期で受け取るリスナーを設定するために、resultListener を呼び出す必要があります。 |
{IMAGE, VIDEO, LIVE_STREAM} |
IMAGE |
|
num_hands |
検出できる手の最大数は GestureRecognizer で確認できます。 |
Any integer > 0 |
1 |
|
min_hand_detection_confidence |
手の検出が手のひら検出モデルで成功とみなされるための最小信頼度スコア。 | 0.0 - 1.0 |
0.5 |
|
min_hand_presence_confidence |
手のランドマーク検出モデルにおける手の存在スコアの最小信頼スコア。ジェスチャー認識ツールの動画モードとライブ配信モードでは、手のランドマーク モデルから得られた手の存在の信頼スコアがこのしきい値を下回ると、手のひら検出モデルがトリガーされます。それ以外の場合は、軽量なハンド トラッキング アルゴリズムを使用して、後続のランドマーク検出のために手の位置を特定します。 | 0.0 - 1.0 |
0.5 |
|
min_tracking_confidence |
ハンド トラッキングが成功とみなされるための最小の信頼スコア。これは、現在のフレームと最後のフレームの手の間の境界ボックス IoU しきい値です。Gesture Recognizer の動画モードとストリームモードでは、トラッキングが失敗すると、Gesture Recognizer が手の検出をトリガーします。それ以外の場合、手の検出はスキップされます。 | 0.0 - 1.0 |
0.5 |
|
canned_gestures_classifier_options |
定型ジェスチャー分類子の動作を構成するためのオプション。定型ジェスチャーは ["None", "Closed_Fist", "Open_Palm", "Pointing_Up", "Thumb_Down", "Thumb_Up", "Victory", "ILoveYou"]です。 |
|
|
|
custom_gestures_classifier_options |
カスタム ジェスチャー分類子の動作を構成するためのオプション。 |
|
|
|
result_callback |
ジェスチャー認識ツールがライブ ストリーム モードの場合に、分類結果を非同期で受け取る結果リスナーを設定します。実行モードが LIVE_STREAM に設定されている場合にのみ使用できます |
ResultListener |
なし | なし |
モデル
ジェスチャー認識ツールは、2 つの事前パッケージ化されたモデル バンドル(手のランドマーク モデル バンドルとジェスチャー分類モデル バンドル)を含むモデル バンドルを使用します。ランドマーク モデルは手と手の形状の存在を検出し、ジェスチャー認識モデルは手の形状に基づいてジェスチャーを認識します。
| モデル名 | 入力シェイプ | 量子化タイプ | モデルカード | バージョン |
|---|---|---|---|---|
| HandGestureClassifier | 192 x 192、224 x 224 | float 16 | 情報 | 最新 |
このタスクでは、Model Maker を使用したモデルバンドルの変更もサポートしています。Model Maker を使用してこのタスクのモデルをカスタマイズする方法について詳しくは、ジェスチャー認識ツールのモデルをカスタマイズするをご覧ください。
手のランドマーク モデル バンドル
手のランドマーク モデルバンドルは、検出された手の領域内の 21 個の手の関節座標のキーポイント位置を検出します。このモデルは、約 3 万枚の現実世界の画像と、さまざまな背景に重ね合わせた複数のレンダリングされた合成ハンドモデルでトレーニングされました。21 個のランドマークの定義は次のとおりです。

手のランドマーク モデル バンドルには、手のひら検出モデルと手のランドマーク検出モデルが含まれています。手のひら検出モデルは、入力画像全体から手の領域を特定し、手のひら検出モデルで定義された切り抜き手の画像から手のランドマークを検出します。
手のひら検出モデルは非常に時間がかかるため、動画モードまたはライブ配信モードでは、ジェスチャー認識ツールは、現在のフレームで検出された手のランドマークによって定義された境界ボックスを使用して、次のフレームの手の領域をローカライズします。これにより、ジェスチャー認識ツールが手のひら検出モデルをトリガーする回数が減ります。手のひら検出モデルは、手のランドマーク モデルが十分な数の手の存在を特定できなくなった場合、またはハンド トラッキングが失敗した場合にのみ、手を再ローカライズするために呼び出されます。
ジェスチャー分類モデル バンドル
ジェスチャー分類モデル バンドルは、次の一般的なハンド ジェスチャーを認識できます。
0 - Unrecognized gesture, label: Unknown
1 - Closed fist, label: Closed_Fist
2 - Open palm, label: Open_Palm
3 - Pointing up, label: Pointing_Up
4 - Thumbs down, label: Thumb_Down
5 - Thumbs up, label: Thumb_Up
6 - Victory, label: Victory
7 - Love, label: ILoveYou
モデルが手を検出してもジェスチャーを認識しない場合、ジェスチャー認識ツールは「なし」の結果を返します。モデルが手を検出しない場合、ジェスチャー認識ツールは空を返します。
ジェスチャー分類モデル バンドルには、ジェスチャー エンベディング モデルとジェスチャー分類モデルが続く 2 ステップのニューラル ネットワーク パイプラインが含まれています。詳しくは、ジェスチャー分類モデルカードをご覧ください。
ジェスチャー エンベディング モデルは画像の特徴を特徴ベクトルにエンコードし、分類モデルは特徴ベクトルを入力として受け取る軽量なジェスチャー分類器です。提供されているジェスチャー分類モデル バンドルには、上記の 7 つの一般的なハンド ジェスチャーを検出する既成のジェスチャー分類器が含まれています。独自のカスタム ジェスチャー分類子をトレーニングすることで、モデル バンドルを拡張して、より多くのジェスチャーを認識できます。詳しくは、次のカスタムモデルのセクションをご覧ください。
ジェスチャー認識ツールは、組み込みジェスチャー分類ツールとカスタム ジェスチャー分類ツールの両方で、同じジェスチャーがカテゴリ内で認識された場合、カスタム ジェスチャーを優先します。1 つのジェスチャー分類子のみがジェスチャーを認識した場合、ジェスチャー認識ツールは認識されたジェスチャーを直接出力します。
タスクのベンチマーク
上記の事前トレーニング済みモデルに基づくパイプライン全体のタスク ベンチマークは次のとおりです。レイテンシの結果は、CPU / GPU を使用した Google Pixel 6 の平均レイテンシです。
| モデル名 | CPU レイテンシ | GPU レイテンシ |
|---|---|---|
| GestureRecognizer | 16.76 ミリ秒 | 20.87 ミリ秒 |
カスタムモデル
このタスクで提供されるモデルの機能を改善または変更する場合は、Model Maker を使用して既存のモデルを変更できます。MediaPipe で使用するカスタムモデルは、モデル バンドル ファイルである .task 形式である必要があります。独自のモデルを構築する前に、Model Maker を使用してこのタスク用に提供されたモデルを変更することを検討してください。
このタスク用にモデルをカスタマイズする方法については、ジェスチャー認識ツールのモデルをカスタマイズするをご覧ください。