手把手手勢辨識 _ Train一個木葉忍者
『Hand by hand build a gesture recognition _ Train your own ninja』
不曉得各位 80 年次的同期,有沒有同樣的經驗,一到學校就開始比拚大家的結印速度,然後念出各種不同的招式,到處火影跑,咬破自己的手指,召喚癩蝦蟆,幻想自己是拷貝忍者卡卡西和木葉最帥黃色閃光。藉由這次的手把手手勢辨識,來讓自己成為一位一流的忍者吧!
訓練手勢 - CNN 🤲
這次以一到五的手勢先來做訓練,有興趣的夥伴可以再嘗試其他 data 囉!
關於 CNN 的細節及歷史,大家可以參考由 Hsiao-En Sun 分享的卷積神經網路 (CNN) 的發展
在開始訓練前,我們需要先做一下資料前處理,首先確定 dataset 的路徑,並使資料皆有 label 及能夠 input 至 model 的 dimension 等,最後再切成train/test。
接著前處理完後,就可以來訓練模型啦!在訓練模型的部分,如果之後有多種不同手勢要訓練,classes 的部分要記得再去做更改。訓練完之後就能將訓練完成的 model 存成 json 及 h5 檔,待會再辨識時會需要用到。
擷取影像 - OpenCV 🧙♀️
這裡我們利用 OpenCV 來擷取我們 webcam 上的影像
蒐集 Data 🤰
一個最簡單的蒐集方式,就是直接從 webcam 上進行蒐集,我們可以存下每一張 webcam 完成的 frame 當作我們的訓練資料,大家在試驗各種不同手勢時也能夠嘗試自己收集看看。
畫面前處理 👨🍳
擷取到影像之後,實際上他是逐一個 frame 在進行更新,首先先框出一個手部的 ROI ,接著我們要將這 ROI 擷取到的每個 frame 前處理成我們訓練的data樣子。
預測及辨識 🕵️♂️
完成上述幾個步驟後,我們就可以開始 predict 我們的手勢了!這邊比較常遇到,就是 input 跟 model 訓練時的 shape 不同,如果遇到可以再注意一下。
新增 Command 👨🏫
在開發能夠新增其他的 command 做更多應用或是立即調參上。
Demo & code 👨💻
完整的程式碼可以到 GitHub 上自行 Fork 哦 :)
https://github.com/WZS666/hand_gesture_prediction
Result from -
CPU : Intel(R) Core(TM) I7–7700 CPU @ 3.6GHz
GPU : NVIDIA GeForce GTX 1080
WEBCAM : logitech C310 HD
Summary ✍️
相信經過這次的 Training ,大家都能成為一個獨當一面的下忍 xD
而手勢辨識還有其他種不同的方式進行辨識,
有興趣的夥伴也能嘗試其他忍者村的忍術,來做一下交流哦 :>
也歡迎大家可以在底下留下你的其他方法或是意見哦 ^^
Dataset 🙋♂️
本次 demo 我是以二值化後的 data 進行 training,這邊我也附上一些取樣自身邊好友的手勢來供大家嘗試使用彩色的影像!
Wylie Sun, NKUST-R105. 2020. Wylie and Yu-han’s hand gesture [dataset]
Reference 🙇♂️
https://www.youtube.com/watch?v=mCcla6k3lXA
https://github.com/BlueDi/Hand-Detection
https://towardsdatascience.com/from-raw-images-to-real-time-predictions-with-deep-learning-ddbbda1be0e4
#Naruto #Gesture recognition #deep learning #OpenCV #AIAcademy
Rest in peace. SW