手勢辨識工作指南

手做出豎起大拇指的動作,模型將其識別為豎起大拇指手勢,並給予 63% 的信心評分

MediaPipe 手勢辨識器工作可讓您即時辨識手勢,並提供辨識結果和偵測到的手部地標。您可以使用這個工作,辨識使用者做出的特定手勢,並叫用與這些手勢相對應的應用程式功能。

這項工作會使用機器學習 (ML) 模型處理圖像資料,並接受靜態資料或持續串流。這項任務會輸出圖像座標中的手標記、世界座標中的手標記、慣用手 (左手/右手),以及多隻手的手勢類別。

試試看吧!

開始使用

請按照下列目標平台的導入指南操作,開始使用此工作。這些平台專屬指南會逐步引導您使用建議的模型實作此項工作的基本設定,並提供含有建議設定選項的程式碼範例:

任務詳細資料

本節說明此工作的功能、輸入內容、輸出內容和設定選項。

功能

  • 輸入圖像處理:處理作業包括圖像旋轉、大小調整、標準化和色彩空間轉換。
  • 分數門檻:根據預測分數篩選結果。
  • 標籤許可清單和拒絕清單:指定模型可辨識的手勢類別。
工作輸入內容 任務輸出
手勢辨識器接受下列任一資料類型的輸入:
  • 靜態圖片
  • 已解碼的影片影格
  • 直播視訊畫面
手勢辨識器會輸出以下結果:
  • 手勢類別
  • 偵測到的手部慣用手
  • 圖片座標中偵測到的手部地標
  • 以世界座標表示的偵測到的手部地標

設定選項

此工作提供下列設定選項:

選項名稱 說明 值範圍 預設值
running_mode 設定工作執行模式。共有三種模式:

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 手部追蹤系統判定為成功的最低可信度分數。這是目前影格和上一個影格中手的定界框交併比閾值。在手勢辨識器的「影片」模式和「串流」模式中,如果追蹤失敗,手勢辨識器會觸發手部偵測。否則系統會略過手勢偵測。 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,則會傳回所有可用的結果。
  • 類別許可清單:類別名稱的許可清單。如果不為空白,則系統會篩除類別不在這個集合中的分類結果。與拒絕清單互斥。
  • 類別拒絕清單:類別名稱的拒絕清單。如果不為空白,系統會篩除類別屬於此集合的分類結果。與許可清單互斥。
    • 顯示名稱語言代碼:any string
    • 搜尋結果上限:any integer
    • 分數門檻:0.0-1.0
    • 類別許可清單:vector of strings
    • 類別拒絕清單:vector of strings
    • 顯示名稱語言代碼:"en"
    • 搜尋結果上限:-1
    • 分數門檻:0
    • 類別許可清單:空白
    • 類別拒絕清單:空白
    custom_gestures_classifier_options 設定自訂手勢分類器行為的選項。
  • 顯示名稱語言代碼:透過 TFLite 模型中繼資料 (如有) 指定的顯示名稱所使用的語言代碼。
  • 結果數上限:要傳回的分類結果數量上限。如果小於 0,則會傳回所有可用的結果。
  • 分數門檻:低於這個分數的結果會遭到拒絕。如果設為 0,則會傳回所有可用的結果。
  • 類別許可清單:類別名稱的許可清單。如果不為空白,則系統會篩除類別不在這個集合中的分類結果。與拒絕清單互斥。
  • 類別拒絕清單:類別名稱的拒絕清單。如果不為空白,系統會篩除類別屬於此集合的分類結果。與許可清單互斥。
    • 顯示名稱語言代碼:any string
    • 搜尋結果上限:any integer
    • 分數門檻:0.0-1.0
    • 類別許可清單:vector of strings
    • 類別拒絕清單:vector of strings
    • 顯示名稱語言代碼:"en"
    • 搜尋結果上限:-1
    • 分數門檻:0
    • 類別許可清單:空白
    • 類別拒絕清單:空白
    result_callback 在手勢辨識器處於即時串流模式時,將結果事件監聽器設為以非同步方式接收分類結果。只有在執行模式設為 LIVE_STREAM 時,才能使用 ResultListener 不適用 不適用

    模型

    手勢辨識器會使用模型套件,其中包含兩個預先封裝的模型套件:手勢地標模型套件和手勢分類模型套件。地標模型會偵測手的存在和手部幾何形狀,而手勢辨識模型則會根據手部幾何形狀辨識手勢。

    模型名稱 輸入形狀 量化類型 模型資訊卡 版本
    HandGestureClassifier 192 x 192、224 x 224 float 16 info 最新

    這項工作也支援使用 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」結果。如果模型未偵測到手,手勢辨識器會傳回空白。

    手勢分類模型套件包含兩個步驟神經網路管道,其中包含手勢嵌入模型和手勢分類模型。詳情請參閱「手勢分類模型」資訊卡。

    手勢嵌入模型會將圖片特徵編碼為特徵向量,而分類模型則是輕量手勢分類器,會將特徵向量做為輸入內容。所提供的手勢分類模型套件包含預先設定的手勢分類器,可偵測上述 7 種常見的手勢。您可以訓練自訂手勢分類器,擴充模型套件,以便辨識更多手勢。詳情請參閱下方的「自訂模型」一節。

    如果手勢辨識器同時使用預先錄製的手勢分類器和自訂手勢分類器,且兩者在各自的類別中都辨識出相同的手勢,則系統會優先採用自訂手勢。如果只有一個手勢分類器可辨識手勢,Gesture Recognizer 會直接輸出已辨識的手勢。

    工作基準

    以下是根據上述預先訓練模型,針對整個管道的工作基準。延遲結果是 Pixel 6 使用 CPU / GPU 的平均延遲時間。

    模型名稱 CPU 延遲時間 GPU 延遲時間
    GestureRecognizer 16.76 毫秒 20.87 毫秒

    自訂模型

    如果您想改善或變更此工作中提供的模型功能,可以使用 Model Maker 修改現有模型。與 MediaPipe 搭配使用的自訂模型必須採用 .task 格式,也就是模型套件檔案。建議您先使用 Model Maker 修改此工作所提供的模型,再自行建構模型。

    如要進一步瞭解如何為這項工作自訂模型,請參閱「為手勢辨識器自訂模型」。