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

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

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

試してみる

使ってみる

このタスクの使用を開始するには、ターゲット プラットフォームの実装ガイドのいずれかに沿って操作します。以下のプラットフォーム固有のガイドでは、推奨モデルを使用してこのタスクの基本的な実装方法と、推奨される構成オプションを含むコードサンプルについて説明します。

タスクの詳細

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

機能

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

構成オプション

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

オプション名 説明 値の範囲 デフォルト値
running_mode タスクの実行モードを設定します。モードは 3 つあります。

IMAGE: 単一の画像入力のモード。

VIDEO: 動画のデコードされたフレームのモード。

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 Model Metadata で指定された表示名に使用するロケール(存在する場合)。
  • 最大結果数: スコアが最上位の分類結果の最大数。0 未満の場合、利用可能なすべての結果が返されます。
  • スコアしきい値: スコアが下回ると、結果が拒否されます。0 に設定すると、利用可能なすべての結果が返されます。
  • カテゴリの許可リスト: カテゴリ名の許可リスト。空でない場合は、このセットにカテゴリが含まれていない分類結果は除外されます。拒否リストとは相互に排他的です。
  • カテゴリ拒否リスト: カテゴリ名の拒否リスト。空でない場合は、カテゴリがこのセットに含まれる分類結果は除外されます。許可リストとは相互に排他的です。
    • 表示名のロケール: any string
    • 最大結果数: any integer
    • スコアしきい値: 0.0-1.0
    • カテゴリの許可リスト: vector of strings
    • カテゴリ拒否リスト: vector of strings
    • 表示名のロケール: "en"
    • 最大結果数: -1
    • スコアしきい値: 0
    • カテゴリの許可リスト: 空
    • カテゴリ拒否リスト: 空
    custom_gestures_classifier_options カスタム ジェスチャー分類器の動作を設定するオプション。
  • 表示名のロケール: TFLite Model Metadata で指定された表示名に使用するロケール(存在する場合)。
  • 最大結果数: スコアが最上位の分類結果の最大数。0 未満の場合、利用可能なすべての結果が返されます。
  • スコアしきい値: スコアが下回ると、結果が拒否されます。0 に設定すると、利用可能なすべての結果が返されます。
  • カテゴリの許可リスト: カテゴリ名の許可リスト。空でない場合は、このセットにカテゴリが含まれていない分類結果は除外されます。拒否リストとは相互に排他的です。
  • カテゴリ拒否リスト: カテゴリ名の拒否リスト。空でない場合は、カテゴリがこのセットに含まれる分類結果は除外されます。許可リストとは相互に排他的です。
    • 表示名のロケール: 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 浮動小数点数 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 を使用して、このタスク用に提供されたモデルを変更することを検討してください。

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