[Mediapipe] Hands 操作說明(上): Google官方文件
本篇記錄運行 Mediapipe 設定筆記。
Reference: Google 官方MediaPipe說明文件
透過官方文件,可以僅用不到35行code,就部署手勢偵測、手勢繪製的功能,其強大原因是Google已經將model與需要串接的API搭建好。因此可快速地使用,並發展更多應用。
產出
辨識出來的結果如圖,
原始碼為參考官方code,相當輕巧。(含註解35行!)
另外,我也寫了下篇,有實戰的操作應用與demo影片。
一、解決方案API
設定值(Configuration Options):
1. STATIC_IMAGE_MODE
設置為false
(default)適合影片、攝像頭做為input;設置為true
適合一整批靜態資料,如圖片。
2. MAX_NUM_HANDS
可以一次檢測幾個手的最大數量,預設為2
。
3. MIN_DETECTION_CONFIDENCE
model產出的最小信度檢測為成功門檻,也就是threshold。Range為[0.0, 1.0]
,預設為0.5
。
4. MIN_TRACKING_CONFIDENCE
Landmark(手的座標)追蹤model產出的最小信度成功門檻,成功則會在下一張圖像,取用前一圖像,作為手部檢測參考。Range為[0.0, 1.0]
,預設為0.5
。
TRACKING_CONFIDENCE是為了讓手指在移動中,也能透過前一個手的座標進行判斷追縱,例如部分手指已不在畫面中(鏡頭拍不到的位置),但mediapipe的Hands還是會持續辨識。
輸出(Output):
1. MULTI_HAND_LANDMARKS
每一隻手都會有21個Landmark,其座標包含x, y, z
。
x
和y
分別[0.0, 1.0]
通過圖像的寬度和高度進行歸一化。z
為深度,以手腕作原點計算深度,值越小,Landmark就越靠近相機。
2. MULTI_HANDEDNESS
判斷為左手或右手,每隻手資料包含label
和score
。
label
用來表示"Left"
或"Right"
。score
是手的慣性估計概率。
手部資料點介紹
以Hands這個解決方案來說,每隻手會存取21個landmarks(手指關節)。並依據編號順序儲存,且每一個landmarks包含3維度空間資料。
x:該landmarks於畫面x軸座標(水平座標)
y:該landmarks於畫面y軸座標(垂直座標)
z:該landmarks於畫面z軸座標(深度座標)
操作Tips
- 運用GPU提升運算效能。
- 進入Model訓練的資料要盡可能平衡。
(如果為分類model,每個類別資料量不能差距太多) - 思考靜態/動態資料存取。
- 搭配手勢標點繪製,在開發時確認是否正確抓到手勢。
- 盡可能地避開與臉部或其他膚色接近背景進行手勢辨識。
下篇介紹實際運用的範本。感謝收看 ^^