我想實現一個基於機器學習的較穩定手勢識別,識別6個手勢,分別是伸出0,1,2,3,4,5根手指。我打算只根據手的形狀來識別手勢。用哪種機器學習演算法比較好?應該如何準備測試集,應準備多大的測試集?
如果你只是要識別這6個手勢,要毛機器學習啊。直接model-based tracking就是了。26個自由度,30fps的速度。
Efficient model-based 3D tracking of hand articulations using Kinect
代碼也有:FORTH-ModelBasedTracker/HandTracker
看題主是要做工程還是要做論文,如果做論文,什麼稀疏和流形,怎麼複雜怎麼來,最好一頓新理論加上去直接能把人看暈;如果是要做一個行之有效的實現或者是一個工程,則建議試試那些可能有點過時,但很有用的理論,比方說adaboost或svm或最近鄰等等。其實這個問題是個典型模式識別問題,無非是選擇什麼樣的特徵,選擇怎樣分類器,如果這個兩個問題解決好了,問題就基本解決
笑看樓上樓下一群只懂皮毛,也敢指點江山的逼乎。
項目主頁
DeepHand: Robust Hand Pose Estimation by Completing a Matrix Imputed with Deep Features開源代碼jsupancic/deep_hand_pose跟著這個跑吧,數據集是NYU Hand Pose Dataset
一點人生經驗:搞學術請多讀重要的論文,搞工程請多用谷歌查查樓主可以關注下:流形(manifold)學習——非線性降維方法,對提取不同手勢特徵有幫助;
- 經典的有ISOMAP
分類器:如果一般的分類方法SVM等不好使,可以考慮使用稀疏模型,參見下面文章
- Robust Face Recognition via sparse represention 2009
日本人一篇文章做的是手勢識別. 用的RBF. 我師兄用的複數RBF. 效果不錯. 95%左右. 26種手勢.
其實這個你要選對形狀特徵往下做就好做了,關鍵是手的形狀是有尺度旋轉及仿射變化的,這樣你就要找一個尺度旋轉不變性的特徵,而仿射可以最大限度的人為弱化,訓練集合你可以自己做,也可以找已有的庫,可以用adbost或svm訓練多分類器。
關鍵是選擇什麼特徵。。。分類我覺得SVM、神經網路,甚至最近鄰。
這個問題是不是可以簡單理解為,你要識別012345這幾個數字,而這幾個數字的形狀只不過用手的形狀來代替。
如果以上理解沒錯,那我會直接用google開源的文字識別引擎tesseractor來訓練和識別。剩下的就是如何訓練得到字型檔的問題,由於問題已經圈定在這六個數字里,只要每種手勢拍好各種角度的五張以上手勢圖片,應該很容易就得到比較好的識別率,畢竟就算瞎猜也有1/6的成功率了。
當然圖片的預處理就靠你自己去摸索了,tesseractor里也用到了各種神經演算法,你可以適當優化。不就是個分類問題嗎,很多回答搞複雜了
如果是做工程,我建議HoG + SVM 足以,不過HoG不具有旋轉不變性,所以你的訓練樣本里最好能把手勢的各個方向都給放到訓練樣本里,我當時做的訓練樣本一共是6400張,八個手勢,一個手勢800張。測試樣本我當時是1600張,當然你如果選個尺度不變特徵更好,這樣魯棒性更強。(此外,我覺得如果做工程,我上面說的都不是難點,難點是如何在複雜的背景下去較好的分割出手勢,估計你用普通的單目攝像頭(沒有深度信息),當你手和臉重合時,我還真不知道該怎麼分割出手勢)
渣渣本科生,求輕拍。。。匿了如果只做0-5的手勢識別,有比較簡單的方法,用凸包演算法檢測伸出來的手指個數就ok了
這種手勢其實分為靜態手勢和三維手勢,所謂靜態就是你手掌永遠正對與攝像機前面,手指方向朝上,然後利用採集的手部圖像,提取手部輪廓進行特徵提取(如輪廓、形狀上下文、sift點等等),進行分類或者模板匹配法都可以。如果你要做那種手掌不一定正對攝像機下的情況,方向與角度是有變化的那種手勢識別,此時就涉及到三維手部姿態估計了。這個要難很多,得先進行手掌三維方向的確定,然後在此基礎上對手指狀態進行估計。這個其實可以採用骨架映射法,就是建立一個手部骨架,根據投影結果確定手指的狀態(彎曲或伸展),再根據手指結果進行手勢的判斷。
RGBD來做
不要手勢識別
直接來手勢估計
論文太多,消化不來
祝君好運
BP神經網路演算法應該比較好解決這個問題。看看這篇論文。Real-time Hand Pose Recognition Based on a Neural Network Using Microsoft Kinect
之前做過基於圖像的手勢識別演算法。我們當時只錄了一兩個人的手勢視頻,每個手勢動作重複了5遍。當時用了HMM的方法進行建模。題主如果用一張圖片表示手指的0、1、2、3、4、5這些動作的話叫做posture recognition.可能用不到HMM,我們當時做的是視頻流,不關注手的具體形狀,而關注手在空間中的移動軌跡,這種叫做gesture recognition。由於有時間信息,所以用了HMM。
關鍵看你怎麼採集手勢信息,如果限定使用視頻採集的話參考其他答案。如果不限定用視頻的話我建議你買五條彎曲感測器粘在手上,判斷每個手指彎曲角度即可。準度接近百分百,連機器學習都省了。
基本思路你可以用膚色來分割出手的輪廓,當然對於膚色你要想辦法去光照,網上有個老外的論文比較好也就容易實現,具體叫什麼名字忘記了,然後提取輪廓以後,你可以提取hu矩,放到SVM裡面去訓練,如果你手勢分割的比較好,基本上面用5000個左右的樣本數量就可以得到比較滿意的結果,而且速度非常快可以達到實時。對於SVM的的訓練,你要對數據進行歸一化,不然效果很差,還是你要利用svm來交叉驗證以尋求得到最好的懲罰係數C以及p和gamma
可以試試卷積神經網路呀,就是需要大量的正確數據
Mark,小編答不來。等公司大神閑下來好好講講這個問題
我說一個簡單粗暴的,不需要深度攝像頭,只需要RGB攝像頭即可。
因為要識別的手勢不涉及動態,那麼就按照靜態來識別。
對著攝像頭(或者用手機攝像頭),自己錄製視頻,各種手勢,各種角度,各種光線,各種背景,錄的越多越好。
然後自己對不同的手勢逐幀標註——這個工作量比較大,可以找找有沒有標註工具。
反正我是自己寫了一個標註工具,支持KCF Tracking,所以標註起來還算好,但是工作量也不小。
接著訓練一個分類器,考慮到性能和速度,推薦基於VGG16的SSD,300x300的就可以。
訓練數據的準備是個問題,我是自己寫了工具,將其轉為VOC2007的格式,這樣SSD現有的腳本就可以跑了。
跑出來模型應該就可以用了,因為並沒有做過手勢的訓練,以經驗估計,mAP不會低於0.7,這個足夠使用了。
級聯LBP大法好 幾百個正樣本即可 來個幾千負樣本就穩了什麼?你說不夠高端?SVM大法好 但是感覺SVM沒有級聯分類器準確度高 不知是不是訓練集的問題啥?還不夠高端?那就上神經網路吧(滑稽)普通識別的話,還是推薦級聯LBP分類器,把每個角度的手做一百個正樣本,然後就可以識別了,到50fps都無壓力
影像採集設備收集拍攝畫面,逐幀進行手掌檢測、分割,分割出來的信息通過k-cos等聚類演算法對目標檢測物做特徵提取作為數據。
現在的技術流是無腦回歸森林和CNN,樓上的一些回答顯然是開嘴炮
推薦閱讀:
※機器視覺的相機標定到底是什麼?
※無人機怎樣進行視覺定位?
※本科生,數字圖像處理方向,希望從事視覺檢測工作,本科能否勝任這些工作?
※普通手機攝像頭能獲得深度信息嗎?