顧 德,李 吉
江南大學(xué) 輕工過程先進(jìn)控制教育部重點實驗室,江蘇 無錫 214062
使用手勢進(jìn)行交流是人機交互(HCI)研究方面的一個流行領(lǐng)域,一些研究者提出使用手部運動軌跡[1-3]或者數(shù)據(jù)手套與媒體播放器進(jìn)行交互操作?;谝曈X的手勢識別系統(tǒng)也在文獻(xiàn)[4-5]被提出,并且多數(shù)研究方法需要使用者佩戴額外設(shè)備[6-10]?;跀?shù)據(jù)手套的方法雖然可以獲得較精確的手部或手指數(shù)據(jù),但是使用者必須借助額外設(shè)備,這一顯著缺點使得該類方法在將來必然要被淘汰。而基于視覺進(jìn)行手勢識別的方法易受光照變化及復(fù)雜背景影響,一直是一個未能落實的難點。為了解決這些問題,選擇基于深度信息的檢測方法,結(jié)構(gòu)光技術(shù)采集的深度數(shù)據(jù)魯棒性好,精度高,并且可以實現(xiàn)實時檢測,是一個很有前景的研究方向。
近來,隨著傳感器技術(shù)的發(fā)展,基于深度信息的識別技術(shù)受到越來越多人的關(guān)注。TOF(飛行時間法)攝像機[11],結(jié)構(gòu)光技術(shù)因為昂貴價格,使得該類深度技術(shù)一直未能被廣泛利用,直到微軟公司推出Kinect攝像機。Kinect使得在黑暗環(huán)境和復(fù)雜背景環(huán)境下進(jìn)行廉價且穩(wěn)定的手勢識別成為可能,這些基于深度信息的傳感器技術(shù)提供了相對穩(wěn)定的深度信息。一些研究人員使用深度數(shù)據(jù)進(jìn)行手勢軌跡的跟蹤研究,但是沒有多少研究者使用其提供手指跟蹤層次的人機交互方案。
Bergh等人[12]使用TOF攝像機增強識別,他們的系統(tǒng)可以識別6種手勢?;赗GB信息的識別精度為99.54%,基于深度信息的識別精度為99.07%,整合后的識別精度為99.54%。Yang等人[1]使用Kinect提供的深度信息產(chǎn)生一個手部運動軌跡識別系統(tǒng),并應(yīng)用在一個媒體播放程序中。手掌軌跡由一個3D特征向量進(jìn)行檢測,手勢采用隱馬爾科夫模型進(jìn)行識別。該系統(tǒng)論證了采用近紅外攝像頭進(jìn)行非接觸式手勢識別的可行性,但是該系統(tǒng)不能偵測指尖數(shù)據(jù)。這使得它僅能用于跟蹤揮手、向上伸、向下伸、前推、后拉等基本的手掌運動軌跡。Tuntakurn等人[13]使用Kinect自帶的人體骨骼識別技術(shù)進(jìn)行粗略的手掌位置判定,而后識別指尖并將手勢應(yīng)用于一個醫(yī)療軟件。這樣使得當(dāng)攝像頭不能完整識別一個人的上體骨骼時該算法便不能正常工作。
本文使用Kinect for Windows獲取使用者的手勢,將手勢和預(yù)先定義的手勢庫進(jìn)行比較,并呈現(xiàn)相應(yīng)的匹配結(jié)果。這個系統(tǒng)顯示了僅使用人手作為輸入介質(zhì)進(jìn)行人機交互的前景。本方案使用C#在Microsoft Visual Studio 2010下開發(fā)完成,用單手進(jìn)行手勢信息的輸入。采用近紅外攝像頭獲取深度信息,因此光照條件、使用者的膚色和衣著,以及環(huán)境背景對于本系統(tǒng)幾乎不產(chǎn)生任何影響。若將本系統(tǒng)整合到其他各種應(yīng)用程序中,它的識別精度和魯棒性必然可以在日常生活中大有作為。
設(shè)備輸出的深度圖像分辨率為640像素×480像素,320像素×240像素,80像素×60像素3檔,這里采用640像素×480像素分辨率。首先將Kinect放置于水平桌面,使用者的手離近紅外攝像頭距離約0.8 m,這樣設(shè)備可以提供一個大小恰當(dāng)?shù)氖植可疃葓D像,也不會對手的運動空間有所約束。在整個系統(tǒng)運行前,需要用戶正對攝像頭張開五指提示設(shè)備開始手勢檢測,同時也獲取了手掌的尺寸S(見2.2節(jié))。
本文的算法假設(shè)使用者的手掌與攝像頭的投射平面所成角度在正負(fù)30°內(nèi),在實踐中,此約束很少會影響操作,因為使用者的手掌直接面向傳感器操作是很正常的。
本文設(shè)計的系統(tǒng)包括3個主要組成部分:手部分割、特征提取、手勢識別。
第一步需要把手部圖像從背景中分離出來,假定使用者用于做手勢的手離攝像頭最近,為了去除手腕和部分手臂的深度圖像,需要對整個圖像進(jìn)行閾值分割。首先使用深度值z=z0+σz分段前景背景,其中z0是探測到的所有像素點中離攝像頭最近的那一點的深度值,σz是一個和手掌尺寸S有關(guān)的閾值。
一個像素點的上、下、左、右4個相鄰點都存在時該點為內(nèi)點,反之為輪廓點。為了避免之后計算輪廓和掌心時反復(fù)檢查矩陣,使用兩個無關(guān)的數(shù)組分別存儲輪廓點和內(nèi)點。從左至右,從上到下,遍歷獲得的所有像素點的深度數(shù)據(jù),直到獲取第一個可用的像素點數(shù)據(jù)。以該點為初始點,區(qū)分出手掌的內(nèi)點和輪廓點,獲得輪廓數(shù)組。每當(dāng)一個點添加到存儲輪廓點的數(shù)組時便被標(biāo)記為已訪問,當(dāng)完成了一個手的輪廓后,程序?qū)⑼ㄟ^剩下的輪廓點去尋找另一個手。使用的輪廓排序算法流程圖如圖1所示。
圖1 輪廓排序算法流程圖
獲取手部輪廓后,先尋找手掌的中心點。本文定義手掌的最大內(nèi)切圓的圓心為手掌中心,相比于選取整個手掌輪廓的形心,這樣獲取的手掌中心坐標(biāo)較為穩(wěn)定。因為它避免了手指伸展或閉合對掌心坐標(biāo)的影響。掌心滿足如下公式:
其中,Pb為輪廓點坐標(biāo),Pi為內(nèi)點坐標(biāo),min{d(Pi,Pb)}為每一個內(nèi)點與所有輪廓點之間距離的最小值,取其最大值的內(nèi)點坐標(biāo)為掌心坐標(biāo)。手掌尺寸S定義為手掌中心點與距離最近的輪廓點之間的距離:
圖2中紅點為檢測到的指尖,黃點為非指尖點,綠點為指蹼,藍(lán)點為用于計算指尖的一對輪廓點。首先,沿著手部輪廓,對每一個輪廓上的P(i)點,尋找對應(yīng)的P(i-k)點和P(i+k)點。獲取P(i-k)和P(i+k)之間的中點,并計算該中點與P(i)之間的距離。若距離大于一個閾值δ,則認(rèn)為P(i)是一個潛在指尖點。在潛在指尖點中,需要舍去檢測出的指蹼,以便獲得真正的指尖點。例如,對于P(i)點首先計算P(i)點與掌心之間的距離,再計算P(i-k)和P(i)的中點與掌心之間的距離。如果前者大于后者,P(i)即為指尖,否則為指蹼。
圖2 指尖算法示意圖
圖3 指尖標(biāo)定示意圖
圖4 手勢識別示意圖
此外,通過P(i)點做P(i-k)和P(i+k)之間中點的垂線可以獲得代表手指朝向的矢量。當(dāng)P(i)點離掌心的距離大于閾值γ時,認(rèn)為手指為伸展?fàn)顟B(tài),否則為彎曲狀態(tài)。γ為一個與手掌尺寸S成比例的標(biāo)量。
本文采用指尖點的三維坐標(biāo)進(jìn)行手指標(biāo)定。首先使用者需要正對攝像頭張開5指,當(dāng)探測到5個指尖時系統(tǒng)開始手指標(biāo)定(如圖3)。
(1)第一步先確定大拇指。一般而言,此刻5個手指中離攝像頭最近的為大拇指;也對系統(tǒng)進(jìn)行人手外形訓(xùn)練輔助探測大拇指。本文同時采用以上兩種方法檢測大拇指以提高標(biāo)定正確率。
(2)在彼此相鄰的手指中,拇指和食指之間的距離最大。由此可以標(biāo)定食指。
(3)在所有手指中,離大拇指最遠(yuǎn)的是小指。
(4)因為已經(jīng)獲取了食指坐標(biāo),離食指最近的為中指。
(5)剩下的便是無名指。
手指標(biāo)定算法在輸入數(shù)據(jù)改變時會持續(xù)更新標(biāo)定結(jié)果,如果在后一幀圖像中依舊可以檢測到相同目標(biāo),已標(biāo)定的手指將不進(jìn)行更新。
手指標(biāo)定后便可以進(jìn)行手勢識別,本文定義了3個分類器處理手勢數(shù)據(jù)。首先計算偵測到的手指數(shù)目,并確定其是伸展?fàn)顟B(tài)或者彎曲狀態(tài)。如果偵測不到某根手指,默認(rèn)該手指為閉合狀態(tài),之后將信息發(fā)送給對應(yīng)該手指數(shù)目的第二層分類器。如果在第二層分類器中僅有唯一的手勢匹配該手指數(shù)目,就將該手勢作為識別結(jié)果,否則繼續(xù)進(jìn)行手指矢量匹配。矢量a和矢量b之間的夾角α由公式3定義:
手指矢量匹配對每一對伸展開的手指之間的夾角進(jìn)行測量,然后映射到相應(yīng)手勢,從而判別使用者輸入的是何種手勢。
比如對“I love you”手勢的識別(如圖4),系統(tǒng)首先探測到手指數(shù)目為3,且拇指、食指和小指均為伸展?fàn)顟B(tài),之后對拇指、食指及小指之間的矢量夾角進(jìn)行測量;夾角在定義的閾值區(qū)間內(nèi)便識別出該手勢,其他手勢同理可得。
為了考慮光照環(huán)境變化對本方案的影響,由5個手掌不同大小的人分別進(jìn)行多次測試。使用Kinect Studio采集視頻流并對指尖識別結(jié)果進(jìn)行驗證。圖5為使用編寫的程序進(jìn)行實時指尖追蹤寫出字母“a”。
文獻(xiàn)[14]對手部圖像使用圓形過濾去除手掌部分獲得手指圖像,再取其中深度值最小的點為指尖。在檢測到掌心的情況下,指尖檢測正確率約為90%。文獻(xiàn)[15]采用基于形狀特征的方法進(jìn)行手指檢測,正確率約為89%。表1為在實驗室內(nèi)進(jìn)行日光燈環(huán)境、復(fù)雜背景環(huán)境及陰暗環(huán)境下應(yīng)用本文算法的指尖檢測識別率,約為95%,比文獻(xiàn)[14]的90%和文獻(xiàn)[15]的89%都高。
表1 不同光照環(huán)境下指尖識別率
選用了11個手勢來測試本文算法的可行性,每個手勢由5個手掌不同大小的人分別進(jìn)行多次測試。手勢庫及不同光照環(huán)境下的識別率分別為圖6和表2所示,實驗結(jié)果表明本文的指尖探測和手勢識別在不同的光照環(huán)境下具有較好的魯棒性。
圖6 手勢識別示意圖
表2 不同光照環(huán)境下手勢識別率
本文提出了一個基于使用近紅外設(shè)備獲取的深度圖進(jìn)行手勢識別的方案。首先利用近紅外攝像頭獲取可靠的深度信息,數(shù)值歸一化后使用深度數(shù)據(jù)分割手部前景。再使用K-curvature算法取得指尖坐標(biāo),同時計算獲得手指朝向,掌心坐標(biāo)等手部特征值。之后采用指尖標(biāo)定算法標(biāo)定手指,并設(shè)計了3個分類器處理手勢數(shù)據(jù)以判定正確的手勢結(jié)果。實驗結(jié)果表明本文方案穩(wěn)定且高效,基本不受背景光照條件變化的影響。該方案采用C#編寫,使用一臺CPU為Core-i3 3.30 GHz的臺式機進(jìn)行測試。測試的深度數(shù)據(jù)來自微軟生產(chǎn)的Kinect for Windows,分辨率為640×480。今后的工作是通過改善算法去識別非正面手勢,來增強識別算法的穩(wěn)定性。
[1]Yang C,Jang Y,Beh J,et al.Gesture recognition using depth-based hand tracking for contactless controller application[C]//Proceedings of IEEE International Conference on Consumer Electronics(ICCE).[S.l.]:IEEE,2012:297-298.
[2]Silanon K,Suvonvorn N.Hand motion analysis for Thai alphabet recognition using HMM[J].International Journal of Information and Electronics Engineering,2011(1):65-71.[3]Holte M B,Moeslund T B,F(xiàn)ihl P.View-invariant gesture recognition using 3D optical flow and harmonic motion context[J].ComputerVision and ImageUnderstanding,2010,114(12):1353-1361.
[4]Chu S,Tanaka J.Hand gesture for taking self portrait[M]//Human-Computer Interaction Techniques and Environments.Berlin Heidelberg:Springer,2011:238-247.
[5]Wachs J P,K?lsch M,Stern H,et al.Vision-based handgesture applications[J].Communications of the ACM,2011,54(2):60-71.
[6]Harrison C,Benko H,Wilson A D.OmniTouch:wearable multitouch interaction everywhere[C]//Proceedings of the 24th Annual ACM Symposium on User Interface Software and Technology.[S.l.]:ACM,2011:441-450.
[7]Kenn H,Megen F V,Sugar R.A glove-based gesture interface for wearable computing applictions[C]//Proceedings of the 4th International Forum on Applied Wearable Computing(IFAWC),2007:1-10.
[8]Vicente A P,F(xiàn)aisal A A.Calibration of kinematic body sensor networks:Kinect-based gauging of data gloves“in the wild”[C]//Proceedings of IEEE International Conference on Body Sensor Networks(BSN).[S.l.]:IEEE,2013:1-6.
[9]Reddy K,Samraj A,Rajavel M,et al.Suitability analysis of gestures for emergency response communication by patients,elderly and disabled while using data gloves[C]//Proceedings of the 1st WSEAS International Conference on Information Technology and ComputerNetworks(ITCN’12),2012.
[10]Kumar P,Rautaray S S,Agrawal A.Hand data glove:A new generation real-time mouseforHuman-Computer Interaction[C]//Proceedings of the 1st International Conference on Recent Advances in Information Technology(RAIT).[S.l.]:IEEE,2012:750-755.
[11]Cui Y,Schuon S,Chan D,et al.3D shape scanning with a time-of-flight camera[C]//Proceedings of IEEE Conference on Computer Vision and Pattern Recognition(CVPR).[S.l.]:IEEE,2010:1173-1180.
[12]Van den Bergh M,Van Gool L.Combining RGB and ToF cameras for real-time 3D hand gesture interaction[C]//Proceedingsof IEEE Workshopon Applicationsof Computer Vision(WACV).[S.l.]:IEEE,2011:66-72.
[13]Tuntakurn A,Thongvigitmanee S S,Sa-Ing V,et al.Natural interactive 3D medical image viewer based on finger and arm gestures[C]//Proceedingsofthe 6th Biomedical Engineering International Conference(BMEiCON).[S.l.]:IEEE,2013:1-5.
[14]Raheja J L,Chaudhary A,Singal K.Tracking of fingertips and centers of palm using kinect[C]//Proceedings of the 3rd International Conference on Computational Intelligence,Modelling and Simulation(CIMSiM).[S.l.]:IEEE,2011:248-252.
[15]Song P,Yu H,Winkler S.Vision-based 3D finger interactions for mixed reality games with physics simulation[C]//Proceedings of the 7th ACM SIGGRAPH International Conference on Virtual-Reality Continuum and its Applications in Industry.[S.l.]:ACM,2008.