ジェスチャー認識タスクガイド

親指を立てている手。モデルによって親指を立てているジェスチャーとして識別され、信頼度が 63% です。

MediaPipe Gesture Recognizer タスクを使用すると、手ジェスチャーをリアルタイムで認識し、検出された手のランドマークとともに認識された手ジェスチャーの結果を提供できます。このタスクを使用すると、ユーザーの特定の手のジェスチャーを認識し、それらのジェスチャーに対応するアプリケーション機能を呼び出すことができます。

このタスクは、機械学習(ML)モデルを使用して画像データを処理し、静的データまたは連続ストリームを受け入れます。このタスクは、画像座標の手のランドマーク、世界座標の手のランドマーク、利き手(左手/右手)、複数の手の手のジェスチャー カテゴリを出力します。

試してみる

使ってみる

このタスクを使用するには、対象プラットフォーム向けの次のいずれかの実装ガイドに沿って操作します。これらのプラットフォーム固有のガイドでは、推奨モデルを使用してこのタスクの基本的な実装について説明します。また、推奨構成オプションを含むコードサンプルも提供します。

タスクの詳細

このセクションでは、このタスクの機能、入力、出力、構成オプションについて説明します。

機能

  • 入力画像の処理 - 処理には、画像の回転、サイズ変更、正規化、色空間変換が含まれます。
  • スコアしきい値 - 予測スコアに基づいて結果をフィルタします。
  • ラベルの許可リストと拒否リスト - モデルで認識されるジェスチャーのカテゴリを指定します。
タスク入力 タスクの出力
ジェスチャー認識ツールは、次のいずれかのデータ型の入力を受け入れます。
  • 静止画像
  • デコードされた動画フレーム
  • ライブ動画フィード
ジェスチャー認識ツールは次の結果を出力します。
  • ハンド ジェスチャーのカテゴリ
  • 検出された手の利き手
  • 検出された手のランドマーク(画像座標)
  • 検出された手のランドマーク(ワールド座標)

構成オプション

このタスクには、次の構成オプションがあります。

オプション名 説明 値の範囲 デフォルト値
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 しきい値です。ジェスチャー認識機能の動画モードとストリーミング モードでは、トラッキングに失敗すると、ジェスチャー認識機能が手の検出をトリガーします。そうでない場合、手の検出はスキップされます。 0.0 - 1.0 0.5
canned_gestures_classifier_options 定型ジェスチャー分類システムの動作を構成するためのオプション。定型ジェスチャーは ["None", "Closed_Fist", "Open_Palm", "Pointing_Up", "Thumb_Down", "Thumb_Up", "Victory", "ILoveYou"]
です。
  • 表示名の言語 / 地域: TFLite モデル メタデータで指定された表示名に使用する言語 / 地域(存在する場合)。
  • 最大結果数: 返されるスコア上位の分類結果の最大数。0 未満の場合は、利用可能なすべての結果が返されます。
  • スコアしきい値: スコアがこの値を下回ると、結果は拒否されます。0 に設定すると、利用可能なすべての結果が返されます。
  • カテゴリ許可リスト: カテゴリ名の許可リスト。空でない場合、このセットにないカテゴリの分類結果は除外されます。denylist とは相互に排他的です。
  • カテゴリ拒否リスト: カテゴリ名の拒否リスト。空でない場合、このセットに含まれるカテゴリを持つ分類結果は除外されます。許可リストとは相互に排他的です。
    • 表示名の言語 / 地域: any string
    • 最大結果数: any integer
    • スコアしきい値: 0.0-1.0
    • カテゴリ許可リスト: vector of strings
    • カテゴリ拒否リスト: vector of strings
    • 表示名の言語 / 地域: "en"
    • 最大結果数: -1
    • スコアしきい値: 0
    • カテゴリの許可リスト: 空
    • カテゴリの拒否リスト: 空
    custom_gestures_classifier_options カスタム ジェスチャー分類システムの動作を構成するためのオプション。
  • 表示名の言語 / 地域: TFLite モデル メタデータで指定された表示名に使用する言語 / 地域(存在する場合)。
  • 最大結果数: 返されるスコア上位の分類結果の最大数。0 未満の場合は、利用可能なすべての結果が返されます。
  • スコアしきい値: スコアがこの値を下回ると、結果は拒否されます。0 に設定すると、利用可能なすべての結果が返されます。
  • カテゴリ許可リスト: カテゴリ名の許可リスト。空でない場合、このセットにないカテゴリの分類結果は除外されます。denylist とは相互に排他的です。
  • カテゴリ拒否リスト: カテゴリ名の拒否リスト。空でない場合、このセットに含まれるカテゴリを持つ分類結果は除外されます。許可リストとは相互に排他的です。
    • 表示名の言語 / 地域: any string
    • 最大結果数: any integer
    • スコアしきい値: 0.0-1.0
    • カテゴリ許可リスト: vector of strings
    • カテゴリ拒否リスト: vector of strings
    • 表示名の言語 / 地域: "en"
    • 最大結果数: -1
    • スコアしきい値: 0
    • カテゴリの許可リスト: 空
    • カテゴリの拒否リスト: 空
    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
    

    モデルが手を検出してもジェスチャーを認識しなかった場合、ジェスチャー認識ツールは「None」の結果を返します。モデルが手を検出しない場合は、ジェスチャー認識ツールは空を返します。

    ジェスチャー分類モデル バンドルには、ジェスチャー エンベディング モデルとジェスチャー分類モデルの 2 段階のニューラル ネットワーク パイプラインが含まれています。詳しくは、ジェスチャー分類モデルカードをご覧ください。

    ジェスチャー エンベディング モデルは画像特徴を特徴ベクトルにエンコードします。分類モデルは、特徴ベクトルを入力として受け取る軽量のジェスチャー分類器です。提供されているジェスチャー分類モデル バンドルには、上記の 7 つの一般的な手のジェスチャーを検出する、定型ジェスチャー分類ツールが含まれています。独自のカスタム ジェスチャー分類子をトレーニングすることで、モデル バンドルを拡張して、より多くのジェスチャーを認識できます。詳細については、次のカスタムモデルのセクションをご覧ください。

    定型ジェスチャー分類子とカスタム ジェスチャー分類子の両方を使用するジェスチャー認識ツールでは、両方の分類子が同じカテゴリのジェスチャーを認識した場合、カスタム ジェスチャーが優先されます。1 つのジェスチャー分類器のみがジェスチャーを認識した場合、ジェスチャー認識ツールは認識されたジェスチャーを直接出力します。

    タスクのベンチマーク

    上記の事前トレーニング済みモデルに基づくパイプライン全体のタスク ベンチマークは次のとおりです。レイテンシの結果は、CPU / GPU を使用した Google Pixel 6 の平均レイテンシです。

    モデル名 CPU レイテンシ GPU レイテンシ
    GestureRecognizer 16.76 ミリ秒 20.87 ミリ秒

    カスタムモデル

    このタスクで提供されているモデルの機能を改善または変更する場合は、Model Maker を使用して既存のモデルを変更できます。MediaPipe で使用するカスタムモデルは、モデル バンドル ファイルである .task 形式である必要があります。独自のモデルを構築する前に、Model Maker を使用してこのタスク用に提供されているモデルを変更することを検討してください。

    このタスク用にモデルをカスタマイズする方法については、ジェスチャー認識ツールのモデルをカスタマイズするをご覧ください。