1)對Kinect提取出的三種數據進行處理,獲得手勢最大內輪廓麵積特征、指尖點特征。
2)判定最大內輪廓麵積是否大於設定的閾值150個像素點,如果大於設定的閾值,則轉入步驟3);否則轉入步驟4)。
3)判定指尖點特征,如果指尖點數為3,則為手勢OK,當前手勢識別完成,轉入步驟1)循環進行手勢識別;如果指尖點數為0,則為手勢0,當前手勢識別完成,轉入步驟1)循環進行手勢識別;如果指尖點數不為3和0,則該手勢不在識別範圍內,轉入步驟1)循環進行手勢識別。
4)判定指尖點特征,如果指尖點數為0,則為手勢拳頭,當前手勢識別完成,轉入步驟1)循環進行手勢識別;如果指尖點數為1,則轉入步驟5);如果指尖點數為2,則轉入步驟6);如果指尖點數為3,則為手勢3,當前手勢識別完成,轉入步驟1)循環進行手勢識別;如果指尖點數為4,則為手勢4,當前手勢識別完成,轉入步驟1)循環進行手勢識別;如果指尖點數為5,則為手勢5,當前手勢識別完成,轉入步驟1)循環進行手勢識別。
5)檢測手勢的彎曲特征,如果手勢有彎曲特征,則為手勢9,當前手勢識別完成,轉入步驟1)循環進行手勢識別。如果手勢無彎曲特征且指尖點與掌心點的像素點距離大於2.4
倍的相鄰波穀點與掌心點的像素點距離,則為手勢1,當前手勢識別完成,轉入步驟1)循環進行手勢識別;如果手勢無彎曲特征且指尖點與掌心點的像素點距離小於2.4倍的相鄰波穀點與掌心點的像素點距離,則為手勢7,當前手勢識別完成,轉入步驟1)循環進行手勢識別。
6)借助掌心點,判定2個指尖點的夾角以及輪廓曲線中兩指尖點指尖是否有凸起。如果夾角小於60°時,則為手勢2,當前手勢識別完成,轉入步驟1)循環進行手勢識別;如果夾角大於60°且兩指尖點之間有凸起,則為手勢6,當前手勢識別完成,轉入步驟1)循環進行手勢識別;如果夾角大於60°且兩指尖點之間無凸起,則為手勢8,當前手勢識別完成,轉入步驟1)循環進行手勢識別。
由表1可以發現手勢1、7和手勢9相差一個彎曲特征以及手勢9的候選指尖點並不是手勢9真正的指尖點。因此需要判定手勢彎曲特征並求出手勢9的指尖點,其判定以及求取步驟如下:
1)當候選指尖點為1時,將手勢輪廓點用直線連接起來,直線像素為0xff,其餘像素為0x00;
2)在finger.y和(scenter.y+finger.y)*1/2行內從左到右計算相鄰像素點數值的變化次數,變化次數達到8時則手勢有彎曲特征(finger.y為候選指尖點y坐標,scenter.y為掌心點y坐標);
3)在步驟2)設定的行內檢測相鄰像素點數值變化次數為6的行,尋找該行從左到右像素點數值第一次變化的點坐標,計算輪廓點與該點的距離,距離最小的輪廓點即為所求的指尖點。
彎曲特征以及手勢9指尖點的求取過程如圖10所示,所有手勢檢測出來的指尖點如圖11所示。利用CvPutText函數在圖像中輸出手勢識別結果(CvPutText函數不支持漢字,隻能用英文顯示),手勢5識別結果如圖12所示。
4 實驗結果與分析
本實驗使用的計算機處理器為Intel Core i3 CPU M350 @2.27GHz,2.00GB內存,攝像頭為第一代的Kinect XBOX攝像機。利用Microsoft Visual Studio 2010作為係統開發平台,並結合OpenCV和開放自然交互 (Open Natural Interaction,OpenNI)完成了本文算法的實現。
為了檢驗本文算法的準確性和實時性,邀請了6位實驗者在環境光照相對穩定的條件下對12個常見手勢進行實驗。每個手勢總共被實驗了120次,測試結果如表2所示。
從表2可以看出,該算法對手勢2、3、4、5、6、8和手勢“拳頭”的識別結果達到了100%,手勢0、1、7、9、手勢“OK”的識別結果達到了90%以上。12種手勢的平均識別率為97.92%。文獻[11]提出一種基於手指角度特征的手勢識別算法,以指尖點到手掌中心的連線構成手勢骨架,計算手指間角度,以角度的大小和指尖數量進行分類。文獻[15]利用Leap Motion設備基於支持向量機(SVM)算法來識別數字手勢軌跡1~9。盡管文獻[11]和本文的算法是識別靜態手勢,文獻[15]是識別手勢軌跡,但目的都是識別手勢1~9。因此本文將這三種算法對相同手勢的識別結果進行對比,其結果如表3所示。
由表3可知本文算法對手勢1~9的平均識別率98.43%高於文獻[11]的平均識別率96.78%,略低於借助專業設備Leap Motion文獻[15]的平均識別率98.75%。文獻[11]中僅通過判斷手指間的角度大小以及指尖點來識別手勢,定義的手勢7和手勢9利用指尖點特征明顯的手勢來代替日常生活中使用的手勢7和手勢9,減少了識別難度。本文算法則通過增加對最大內輪廓麵積特征以及彎曲特征的識別使得手勢識別更準確,識別率更高。文獻[15]使用隱馬爾可夫(HMM)算法對手勢進行識別,盡管識別率略高於本文算法,但該算法前期需要對大量的樣本進行訓練,對計算機性能要求高。而本文算法則不需要在前期對大量的樣本進行訓練,對於常用的手勢1~9的識別率也能達到98%以上。
5 結語
本文通過Kinect的深度數據和骨骼數據快速定位並縮小手勢所在的區域,減少後續圖像處理的時間,在縮小後的手勢區域中利用YCrCb模型進行膚色分割,得到手勢圖。再利用文中所述算法步驟獲得掌心點以上的輪廓點圖以及輪廓點與掌心點之間的距離曲線。最後利用距離曲線特征、內輪廓特征以及指尖夾角特征來識別出這12種手勢。通過實驗者所做的手勢實驗結果可以發現,在環境光照相對穩定的條件下,該算法能準確識別手勢2、3、4、5、6、8和手勢拳頭。手勢7、手勢1、手勢OK和手勢0的平均識別率也達到了95.66%。結果表明,該算法對手勢的識別率較高,能夠較好地應用於人機交互、麵向機器人的手勢控製等應用中。
由於本實驗是在光照相對穩定以及手勢離Kinect距離不變的條件下進行的,這句話邏輯不通,請修改因此後期將在不同的光照和距離條件下進行實驗,確定不同條件下的閾值,實現算法在不同條件下閾值的自適應。
參考文獻:
[1]ZHU Y,YANG Z,YUAN B. Vision based hand gesture recognition [C]// ICSS 2013: Proceedings of the 2013 International Conference on Service Sciences. Washington, DC: IEEE Computer Society, 2013: 260-265.
[2]MAZUMDAR D,TALUKDAR A K,SARMA K K. Gloved and free hand tracking based hand gesture recognition [C]// ICETACS 2013: Proceedings of the 2013 1st International Conference on Emerging Trends and Applications in Computer Science. Piscataway: IEEE, 2013: 197-202.
[3]YANG L, SHUI Y, YAO L. Static gesture detection based on combination of skin color segmentation and hand shape matching algorithm [J]. Information and Communications, 2013(4): 4-6.(楊磊,隋雲衡,姚立虎.結合膚色分割與手形匹配算法的靜態手勢檢測[J].信息通信,2013(4):4-6.)
[4]CHOUDHOURY A, TALUKDAR A K, SARMA K K. A novel hand segmentation method for multiplehand gesture recognition system under complex background [C]// SPIN 2014: Proceedings of the 2014 International Conference on Signal Processing and Integrated Networks. Piscataway: IEEE, 2014: 136-140.