一起學 AI ! MediaPipe應用教學-單元(四)手掌偵測

一起學 AI ! MediaPipe應用教學-單元(四)手掌偵測

這篇教學會使用 MediaPipe 的手掌偵測模型 ( hands ) 偵測雙手的手掌,再透過 OpenCV 讀取攝影鏡頭影像進行辨識,在手掌與每隻手指標記骨架,最後還會簡單設計隔空觸碰的小遊戲。

快速導覽:

因為程式使用 Jupyter 搭配 Tensorflow 進行開發,所以請先閱讀「使用 Anaconda」和「使用 MediaPipe」,安裝對應的套件,如果不要使用 Juputer,也可參考「使用 Python 虛擬環境」,建立虛擬環境進行實作。

使用 MediaPipe,偵測並繪製手掌骨架 

MediaPipe Hands 利用多個模型協同工作,可以偵測手掌模型,返回手掌與每隻手指精確的 3D 關鍵點,MediaPipe Hand 除了可以偵測清晰的手掌形狀與動作,更可以判斷出被少部分被遮蔽的手指形狀和動作,再清晰的畫面下,針對手掌判斷的精準度可達 95.7%。

Mediapipe 偵測手掌後,會在手掌與手指上產生 21 個具有 x、y、z 座標的節點,透過包含立體深度的節點,就能在 3D 場景中做出多種不同的應用,下圖標示出每個節點的順序和位置 ( 圖片來源 )。

如果同時出現兩隻手,採用交錯偵測 ( 短時間內偵測兩次,一次偵測一隻手 ),最後仍然維持 21 個點的數據,如果只希望偵測一隻手,可設定 max_num_hands=1。

Python 教學 - Mediapipe 手掌偵測 ( hands )

下方的程式碼延伸「讀取並播放影片」文章的範例,搭配 mediapipe 手掌偵測的方法,透過攝影鏡頭獲取影像後,即時標記出手掌骨架和動作。

Python 教學 - Mediapipe  手掌偵測 ( hands )

隔空觸碰的小遊戲 

偵測到手掌後,就可取得 21 個節點的座標位置,下方的程式碼會在攝影機取得畫面時,在畫面上繪製一個正方形區域,當食指末端 ( 第 8 個節點 ) 觸碰到這個區域 ( 座標落在這個區域內 ),就將正方形區域移動到隨機的位置。

參考:rectangle() 畫四邊形隨機整數

Python 教學 - Mediapipe  手掌偵測 ( hands )

參考資料 

本篇文章經原作者(oxxo)授權轉載,原文為「Mediapipe 手掌偵測 ( hands )」刊登於【Steam教育學習網