[Mediapipe] Hands 操作說明(上): Google官方文件

ChunJen Wang
jimmy-wang
Published in
May 24, 2021

本篇記錄運行 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

  • xy分別[0.0, 1.0]通過圖像的寬度和高度進行歸一化。
  • z為深度,以手腕作原點計算深度,值越小,Landmark就越靠近相機。

2. MULTI_HANDEDNESS

判斷為左手或右手,每隻手資料包含labelscore

  • label用來表示 "Left""Right"
  • score是手的慣性估計概率。

手部資料點介紹

以Hands這個解決方案來說,每隻手會存取21個landmarks(手指關節)。並依據編號順序儲存,且每一個landmarks包含3維度空間資料。

x:該landmarks於畫面x軸座標(水平座標)
y:該landmarks於畫面y軸座標(垂直座標)
z:該landmarks於畫面z軸座標(深度座標)

操作Tips

  1. 運用GPU提升運算效能。
  2. 進入Model訓練的資料要盡可能平衡
    (如果為分類model,每個類別資料量不能差距太多)
  3. 思考靜態/動態資料存取
  4. 搭配手勢標點繪製,在開發時確認是否正確抓到手勢。
  5. 盡可能地避開與臉部或其他膚色接近背景進行手勢辨識
Source: Google 官方MediaPipe說明文件

--

--

ChunJen Wang
jimmy-wang

嗨,歡迎你的到來,我目前在銀行擔任DS。過去曾做過銀行大型專案BA,也曾在轉職科技業DE中踢了鐵板,相信每一個人都有自己要走的路,而努力的過程,可以讓我們離心中理想更接近,如果我的文章能帶給你一些啟發與幫助,別忘了幫我在文章底下按下拍手~^^