王 兵,董洪偉,張明敏,潘志庚
(1.江南大學(xué) 物聯(lián)網(wǎng)工程學(xué)院,江蘇 無錫 214122;2.浙江大學(xué) 計算機科學(xué)與技術(shù)學(xué)院,浙江 杭州 310000;3.杭州師范大學(xué) 數(shù)字媒體與人機交互研究中心,浙江 杭州 310000)
手勢作為在人機交互和虛擬現(xiàn)實中的巨大作用,得到了很多學(xué)者的關(guān)注和研究。 Nurettin使用6個自由度的磁運動跟蹤裝置捕獲人手的運動軌跡,并通過8個不同的運動方向來表示運動手勢[1]; Kurakin A 使用了動作圖識別動態(tài)手勢[2]; Hsieh C C使用了Haar特征和支持向量機(support vector machine,SVM)識別動態(tài)手勢[3];陳鵬展等人提出了使用加速傳感器識別動態(tài)手勢[4];沈愛敏等人提出了使用手機加速傳感器的靜態(tài)手勢識別[5];王西穎等人[6]采用了隱馬爾可夫模型模糊神經(jīng)網(wǎng)絡(luò)(hidden Markov model-fuzzy neural network,HMM—FNN)模型識別復(fù)雜的動態(tài)手勢; Premaratne P[7]提出了使用手勢軌跡運動方向變化的角度作為特征,并使用HMM識別動態(tài)手勢。Ren Z等人[8]利用了Kinect研究手勢識別。
指尖檢測目前算法很多,例如文獻[9]在手勢分割的基礎(chǔ)上采用模板匹配的指尖檢測方法實現(xiàn)手勢識別。文獻[10]通過基于曲率的指尖檢測方法。本文在實驗中采用基于像素分類的指尖檢測方法[9,11],不僅能夠得到手指的個數(shù)還能得到指尖的位置。
本文針對手勢分割問題,利用靜態(tài)手勢作為一個動態(tài)手勢的開始點和結(jié)束點;在特征選取上,使用Premaratne P[7]的軌跡的方向變化角度特征來識別動態(tài)手勢,但文獻[7]中直線段和軌跡擬合的方式來計算該角度,具有很大的局限性,本文首先利用Kinect獲取人手的位置,然后利用深度信息分割出人手的區(qū)域;隨后對該區(qū)域應(yīng)用基于像素分類的指尖檢測算法[9,11]得到指尖點的個數(shù)和位置,以左右兩只手的手指個數(shù)作為區(qū)分動態(tài)手勢的開始點和結(jié)束點。最后提取軌跡的方向變化角度作為特征,使用HMM來對動態(tài)手勢分類。
1)使用NITE庫找到手的中心點位置(Xc,Yc)和該點的深度值D。
2)(Xc,Yc)為中心,構(gòu)造2個包圍盒進行手勢分割。第一個包圍盒針對深度方向,深度圖中深度值d在區(qū)域[D-Td,D+Td]范圍內(nèi),其中,Td設(shè)定的閾值;第二個包圍盒針對人手大小。深度圖上點P(X,Y)滿足
Xc-Tx≤X≤Xc+Tx
Yc-Ty≤Y≤Yc+Ty
式中Tx和Ty為需要設(shè)定的閾值。圖1為通過上述方法得到的人手區(qū)域。

圖1 手勢分割圖像

圖2 基于像素分類的指尖檢測
根據(jù)設(shè)定的2個閾值R1和R2將手勢分割之后的二值圖像分為5類,分別為:
1)非手指區(qū)域:根據(jù)手勢分割之后的二值圖像直接進行判斷,如圖2(a)中的A點;
2)手指邊緣區(qū)域:如圖2(a)中的B點,在以B為圓心、R1為半徑的圓中,手指區(qū)域所占的比例較小;
3)手指指尖區(qū)域:如圖2(b)中的D點,在以D為圓心、R1為半徑的圓中,手指區(qū)域所占的比例較大,同時在以D為圓心、R2為半徑的圓中,與手指區(qū)域交點僅有2個;
4)手指非指尖區(qū)域:如圖2(a)中的C點,在以C為圓心、R1為半徑的圓中,手指區(qū)域所占的比例較大,同時在以C為圓心、R2為半徑的圓中,與手指區(qū)域交點有4個;
5)手掌區(qū)域:以R1為半徑的圓中,手指區(qū)域占得比例較大,但以R2為半徑的圓中,與手指區(qū)域沒有交點。
在對手勢分割之后的二值圖像進行像素分類之后,根據(jù)手指指尖二值圖像查找指尖輪廓,并進行橢圓擬合,得到指尖位置和指尖個數(shù)。
實驗中,為了提高算法的運行速度,將該算法在計算統(tǒng)一設(shè)備架構(gòu)(compute unified device architecture,CUDA)上實現(xiàn)。由于需要對所有的像素進行分類,本文將每一個像素分類對應(yīng)著一個線程,最終在實驗中每一個線程塊線程個數(shù)M=128,人手部區(qū)域像素個數(shù)設(shè)定為N=160×160,線程塊的個數(shù)為K=(N+M-1)/M。圖3顯示本文指尖檢測的效果。

圖3 指尖檢測效果
與文獻[7]不同,為了能夠識別更多的動態(tài)手勢,本文規(guī)定逆時針的角度為正,順時針的角度為負。通過分析軌跡計算手勢運行軌跡中的角度變化點的位置,然后求出角度的值,實驗中,該角度值的范圍為[-π,π];求出角度后需要對角度進行編碼,便于識別。
2.1.1 運動方向變化角度的計算
運動方向變化角度(change-of-direction angle),即軌跡中存在的轉(zhuǎn)彎處角度。如圖4為本文定義的運動方向變化角度。

圖4 運動方向變化角度的定義
圖4(a)~圖4(c)為其中3種情況下的角度,圖4(a)為逆時針的-π/2,圖4(b)為π,圖4(c)為順時針的π/2。當用戶在Kinect面前繪制完軌跡之后,使用以下步驟來計算軌跡的方向變化角度:
1)針對軌跡的X和Y坐標,分別使用均值濾波來降低噪聲。
(1)
(2)
(3)
(4)

(5)
Anglei=arccos(Ai×Bi)
(6)
式中ε=1×10-6,m=3。
3)對步驟(2)求得的角度進行分析,找出其中的突變點,然后將起始點、突變點和終點依次按順序計算突變點處的角度。
2.1.2 方向變化角度的編碼
求得軌跡的方向變化角度之后,對這些角度進行編碼。具體編碼如表1。

表1 角度編碼
在定義的動態(tài)手勢(英文大寫字母)中,根據(jù)手勢的初始方向?qū)⒋髮懹⑽淖帜阜譃?組,具體如表2。

表2 手勢的初始方向
按照上面4組字母,構(gòu)造4組HMM,分別針對于4種手勢的初始方向。動態(tài)手勢模型(大寫英文字母)的訓(xùn)練使用Baum-Welch算法,對于每一個手勢HMM的狀態(tài)個數(shù)大多設(shè)置為方向變化的個數(shù),設(shè)置A為10,J為8,I為6,Z為3,F(xiàn)為4,其余均為方向變化的個數(shù)。在訓(xùn)練每一個動態(tài)手勢(大寫英文字母)模型之后,對于一個動態(tài)手勢的識別,先計算初始方向,再計算該方向下的每一個模型的概率,概率最大對應(yīng)的模型為得到的結(jié)果。
采用靜態(tài)手勢判斷一個動態(tài)手勢的開始和結(jié)束。當左右手的手指個數(shù)均為5時,認為已定位好手在界面上的位置;當左手手指個數(shù)為0,右手手指個數(shù)為5時,規(guī)定清除屏幕上的軌跡;當左手手指個數(shù)為0,右手手指個數(shù)為1的時候,手的運動軌跡作為動態(tài)手勢;當左手手指個數(shù)為5,右手手指個數(shù)為0的時候,對該軌跡提取拐角,并計算識別軌跡的語義,具體見表3。

表3 左右手手指個數(shù)的含義
采用了英文大寫字母中的16個字母,當手在空中運動時通過 Kinect獲取深度圖數(shù)據(jù),然后,通過NITE得到手的中心位置并通過深度信息得到手區(qū)域,圖1為本文得到的人手區(qū)域分割之后的效果圖;然后,通過CUDA計算左手和右手的手指個數(shù)和位置,表4為針對右手指尖個數(shù),分別為1,2,3,4,5時,每一種均采集500幀統(tǒng)計指尖檢測的耗時和誤檢個數(shù),當采集這500幀時,令右手較大幅度的運動。從表4中可以看出:該算法耗時較小,準確性較高,可以保證系統(tǒng)的實時性和魯棒性;得到指尖個數(shù)后按照表3確定該靜態(tài)手勢的含義;當確定當前狀態(tài)屬于繪制的動態(tài)手勢(大寫英文字母)時,記錄該動態(tài)手勢的軌跡,然后去噪,提取特征,圖5為對字母A,E,F(xiàn)和H求得的角度,圖6為計算方向變化的位置,從圖5和圖6可以看出:每一個字母的方向變化個數(shù)和角度變換圖的極值點個數(shù)一一對應(yīng)。實驗中,針對每一個字母,采集了100個測試樣本,對每一個動態(tài)手勢進行測試。統(tǒng)計實驗結(jié)果,如表5~表8所示。

圖5 字母的方向變化角度特征

圖6 字母的點序列在每點處的角度變化

表4 指尖檢測耗時和誤檢情況

表5 A M N P R識別結(jié)果

表6 H K W X識別結(jié)果

表7 E F G識別結(jié)果

表8 Z J T I識別結(jié)果
針對動態(tài)手勢的軌跡,提取拐角并對角度編碼,取得了不錯的效果,能夠識別16種大寫英文字母。但算法也面臨著如何計算曲線角度的問題,例如字母C,O等,正在考慮將運動軌跡的方向變化角度和運動方向結(jié)合來識別更多的動態(tài)手勢。
[1] Kiliboz N C,Güdükbay U.A hand gesture recognition technique for human-computer interaction[J].Journal of Visual Communication & Image Representation,2015,28:97-104.
[2] Kurakin A,Zhang Z,Liu Z.A real time system for dynamic hand gesture recognition with a depth sensor [C]∥2012 Proceedings of the 20th European Signal Processing Conference(EUSIPCO),IEEE,2012:1975-1979.
[3] Hsieh C C,Liou D H.Novel Haar features for real-time hand gesture recognition using SVM[J].Journal of Real-Time Image Processing,2015,10(2):357-370.
[4] 陳鵬展,羅 漫,李 杰.基于加速度傳感器的連續(xù)動態(tài)手勢識別[J].傳感器與微系統(tǒng),2016,35(1):39-42.
[5] 沈愛敏,張正道.基于手機加速度傳感器的靜態(tài)手勢身份認證方法[J].傳感器與微系統(tǒng),2015,34(6):39-42.
[6] 王西穎,戴國忠,張習(xí)文,等.基于 HMM—FNN 模型的復(fù)雜動態(tài)手勢識別[J].軟件學(xué)報,2008,19(9):2302-2312.
[7] Premaratne P,Yang S,Vial P,et al.Dynamic hand gesture recognition using centroid tracking[C]∥International Conference on Intelligent Computing,Springer International Publishing,2015:623-629.
[8] Ren Z,Meng J,Yuan J,et al.Robust hand gesture recognition with kinect sensor[C]∥Proceedings of the 19th ACM Inter-national Conference on Multimedia,ACM,2011:759-760.
[9] 晏 浩,張明敏,童 晶,等.基于 Kinect 的實時穩(wěn)定的三維多手指跟蹤算法[J].計算機輔助設(shè)計與圖形學(xué)學(xué)報,2013,25(12):1801-1809.
[10] 李博男,林 凡.基于曲率的指尖檢測方法[J].南京航空航天大學(xué)學(xué)報,2012,44(4):587-591.
[11] Letessier J,Bérard F.Visual tracking of bare fingers for inter-active surfaces[C]∥Proceedings of the 17th Annual ACM Symposium on User Interface Software and Technology,ACM,2004:119-122.
[12] Vezhnevets V,Sazonov V,Andreeva A.A survey on pixel-based skin color detection techiques[C]∥Proceedings of Graphicon,2003:85-92.