康金蘭,晁建剛,林萬洪,熊 穎,楊 進(jìn)
(1.中國航天員科研訓(xùn)練中心,北京100194;2.人因工程重點(diǎn)實(shí)驗室,北京100194)
手勢識別是一種人機(jī)交互技術(shù),以人手部的動作直接控制計算機(jī)的輸入。隨著技術(shù)的發(fā)展,使用攝像頭捕捉手勢的計算機(jī)視覺技術(shù)成為了手勢識別的主流方式[1]。手勢無論是靜態(tài)或動態(tài),首先需通過視頻采集設(shè)備獲取圖像,并通過圖像處理進(jìn)行手的檢測和分割,之后對手勢圖像加以分析,提取圖像特征,再根據(jù)特征將已分離的手勢按照一定的方法識別出來,最后將識別結(jié)果轉(zhuǎn)化為驅(qū)動計算機(jī)運(yùn)行的交互語義[2]。
近年來手勢識別技術(shù)的發(fā)展迅猛,在許多領(lǐng)域有著廣泛的應(yīng)用前景。在我國未來空間站任務(wù)階段將開展長期有人照料的空間科學(xué)實(shí)驗任務(wù),隨著需求的不斷增強(qiáng),飛行任務(wù)越來越繁重,為提高航天員執(zhí)行任務(wù)的效率及成功率,地面訓(xùn)練需要適應(yīng)空間站內(nèi)部空間大、設(shè)備多,操作復(fù)雜等特點(diǎn),考慮艙外設(shè)備的維護(hù)維修、艙內(nèi)設(shè)備組裝等工作,因此將引入基于虛擬現(xiàn)實(shí)的訓(xùn)練系統(tǒng),視覺手勢識別技術(shù)正是其中的關(guān)鍵環(huán)節(jié)之一。
目前國內(nèi)動態(tài)手勢識別以研究手的運(yùn)動軌跡識別為主[3],這在很大程度上難以滿足航天員訓(xùn)練需要。本文針對我國載人航天任務(wù)日益增長的訓(xùn)練需求,以航天員在軌組裝艙內(nèi)某醫(yī)學(xué)防護(hù)鍛煉設(shè)備為研究對象,進(jìn)行視覺手勢識別技術(shù)研究,著力解決在航天員虛擬訓(xùn)練背景下,典型動態(tài)手勢的識別及交互設(shè)計等內(nèi)容。以組裝過程中的抓取、(抓取后的)拖動、釋放為例,分析了航天虛擬組裝訓(xùn)練的典型手勢,研究了基于Kinect的手勢識別方法,建立了航天虛擬組裝訓(xùn)練三維場景,首次設(shè)計并實(shí)現(xiàn)了基于視覺手勢識別的航天虛擬訓(xùn)練系統(tǒng),最后,設(shè)計了仿真實(shí)驗,對手勢識別方法的有效性進(jìn)行了驗證。
本文以當(dāng)前的主流工具——光場攝像機(jī)(Kinect)為視頻采集設(shè)備,OpenNI和Nite為主要視覺識別軟件,OpenCV輔助進(jìn)行識別算法計算,以irrlicht圖形引擎建立虛擬三維交互場景,在VC2010環(huán)境下實(shí)現(xiàn)編碼。研究平臺體系結(jié)構(gòu)如圖1所示。

圖1 系統(tǒng)體系結(jié)構(gòu)圖Fig.1 System architecture
視覺計算平臺負(fù)責(zé)手勢圖像的采集及底層處理,視覺手勢識別系統(tǒng)負(fù)責(zé)運(yùn)動手勢的關(guān)鍵算法實(shí)現(xiàn),交互規(guī)范/規(guī)則負(fù)責(zé)手勢交互語義的定義;場景部分負(fù)責(zé)建立虛擬的三維設(shè)備場景,并根據(jù)動態(tài)手勢驅(qū)動設(shè)備部件組裝;管理界面負(fù)責(zé)頂層界面管理。
建立的視覺手勢人機(jī)交互系統(tǒng)框圖如圖2所示。

圖2 手勢識別人機(jī)交互系統(tǒng)Fig.2 Man-machine interactive system based on gesture recognition
首先,通過Kinect獲取深度圖像的數(shù)據(jù)流,系統(tǒng)根據(jù)手勢的深度位置分割出手勢,得到手勢的二值圖像;其次,根據(jù)指尖特征,分割出指尖并有效跟蹤目標(biāo)和運(yùn)動;再次,根據(jù)手勢特征進(jìn)行分析,生成模型參數(shù),根據(jù)模型參數(shù)對手勢進(jìn)行分類并按需要定義交互語義;最后,系統(tǒng)根據(jù)交互語義去驅(qū)動手勢裝配物體。
準(zhǔn)確、合理地分離手勢與背景是提高識別效率和準(zhǔn)確率的一個重要前提[4]。Kinect除了能夠提供RGB顏色信息外,還能利用紅外線提供深度信息,這就為手勢的檢測提供了極大的便利,因為紅外深度信息與背景的區(qū)分度遠(yuǎn)大于顏色信息與運(yùn)動信息,使得手勢檢測的大部分工作能夠由硬件直接完成[3]。本文在手勢檢測和分割部分充分利用Kinect提供的深度圖像信息進(jìn)行處理,不僅可以解決因使用場合的不同和光照環(huán)境等的變化造成的手勢區(qū)域檢測不準(zhǔn)的問題,而且能夠較好的去除類膚色區(qū)域。
本文假定人手離攝像機(jī)最近,且距離在1 m范圍內(nèi)。利用Openni手部分析模塊很容易跟蹤檢測到手的質(zhì)心,根據(jù)手心坐標(biāo),選取感興趣區(qū)域作為手勢分割的目標(biāo)。通過分析在軌組裝的幾種特定手勢,我們?nèi)∩疃葓D像中原像素點(diǎn)的深度值在手質(zhì)心深度值d±8 cm范圍內(nèi)的點(diǎn)的集合作為分割出來的手勢圖像,并將其進(jìn)行二值化處理,分割前后的圖像如圖3(a)和(b)所示。

圖3 手勢分割Fig.3 Gesture segmentation
想要滿足組裝操作的需求,僅僅一個手的質(zhì)心點(diǎn)顯然不夠,而指尖是手勢識別中最為常用的特征點(diǎn)[5]。目前,指尖檢測算法中,常用的是模板匹配和輪廓曲率分析兩種方法[6]。但模版匹配方法必須遍歷整個手勢圖像而導(dǎo)致實(shí)時效率不高[7],因此本文采用手勢圖像輪廓曲率分析的方法,通過對手輪廓圖像進(jìn)行分析來檢測指尖,進(jìn)而檢測出拇指并實(shí)時跟蹤。
首先將圖像輪廓上的點(diǎn)依次存入數(shù)組中,利用K-curvature算法計算任意一點(diǎn)的近似曲率。如圖4a所示,對圖中的點(diǎn)P1,計算P1和P2之間的向量與P1和P3之間向量的夾角是否在一定范圍內(nèi),從而判斷它是否為指尖。經(jīng)過多次測試驗證,取P2、P3與P1間隔20個像素點(diǎn),且向量夾角角度取0~55度,識別結(jié)果比較理想。向量夾角不在該范圍內(nèi)的認(rèn)為是非指尖,例如圖4(a)中的T1點(diǎn)。圖4(b)是通過該方法識別出來的結(jié)果,橙色圓圈標(biāo)識的是手指尖。

圖4 指尖檢測Fig.4 Fingertips Detection
根據(jù)在所有相鄰指尖點(diǎn)的距離中,拇指和食指指尖距離最遠(yuǎn)的特點(diǎn),很容易檢測到拇指,如圖4b所示。
由于手在運(yùn)動過程中會有一些變化,Kinect攝像頭也會產(chǎn)生噪聲,使得對指尖的三維位置不能穩(wěn)定地跟蹤。通過Kalman濾波,用前幀指尖位置預(yù)測下幀指尖位置,根據(jù)預(yù)測位置將指尖區(qū)域設(shè)置為圖像的感興趣區(qū)域(ROI,Region ofinterest),有效提高分割速度[8]。跟蹤過程為:
1)利用Kalman濾波器預(yù)測當(dāng)前幀的指尖位置,設(shè)置ROI區(qū)域是以預(yù)測指尖點(diǎn)為中心,大小為80×80的窗口。
2)目標(biāo)匹配。在連續(xù)兩幀中,指尖運(yùn)動假定為勻速,則Kalman濾波器的狀態(tài)向量如式(1)。

式中X(t),Y(t),Z(t)是指尖在三維中的坐標(biāo)位置,Vx(t),Vy(t),Vz(t)指在每一幀中指尖點(diǎn)的速度,則狀態(tài)方程和觀測方程分別為:

其中,wt是過程噪聲,具有高斯分布;vt是測量誤差,F(xiàn)為狀態(tài)轉(zhuǎn)化矩陣,H為觀測矩陣。

由此,通過指尖在t幀之前的位置來預(yù)測它在t幀時刻的位置。但Kinect本身存在局限性,有時會出現(xiàn)很大誤差,導(dǎo)致指尖出現(xiàn)抖動。為防止預(yù)測與指尖的實(shí)際位置相差太大,利用手質(zhì)心點(diǎn)與指尖深度相差不大的先驗知識,可設(shè)定指尖深度在手質(zhì)心點(diǎn)深度±8 cm范圍內(nèi)。
3)更新Kalman濾波狀態(tài),用匹配好的指尖位置作為下一幀的預(yù)測值來更新Kalman濾波狀態(tài),達(dá)到穩(wěn)定跟蹤指尖的目的。
手勢的表觀特征[5]包括手指數(shù)、手指的指尖點(diǎn)、指根點(diǎn)以及指間的夾角等具有標(biāo)志性的信息。通過指尖檢測得到多個指尖,利用指尖個數(shù)狀態(tài)、指尖向量和手指相對運(yùn)動軌跡來劃分手勢類型,并根據(jù)不同場景中的具體應(yīng)用進(jìn)行交互語義的描述。虛擬組裝過程中的物體操作主要包括對物體的抓取、移動、釋放等操作,具體定義如下:
1)抓取(Grasp)。當(dāng)手的拇指指尖點(diǎn)與食指指尖點(diǎn)接觸(距離小于5個像素點(diǎn)),且接觸點(diǎn)在物體的包圍盒內(nèi)時,定義為抓取操作。
2)移動(Move)。當(dāng)物體處于抓取狀態(tài),且手質(zhì)心位置發(fā)生變化時,定義此手勢為抓取移動狀態(tài),抓取到的物體隨手的移動而移動。
3)釋放(Free)。當(dāng)手拇指指尖與食指指尖不接觸時(距離大于5個像素點(diǎn)),定義為釋放動作,物體被放開。
利用本文描述的指尖檢測與跟蹤方法,首先從手勢特征圖像中識別出指尖,并判斷出拇指和食指,之后進(jìn)行穩(wěn)定地跟蹤,然后根據(jù)兩手指的位置關(guān)系以及是否接觸到操作的部件來識別當(dāng)前手勢的含義。
采用本文描述的手勢檢測及識別方法,進(jìn)行在軌組裝設(shè)備虛擬操作訓(xùn)練實(shí)驗。首先將三維虛擬設(shè)備各部件放置在固定位置上,虛擬手模型隨識別的手的質(zhì)心位置變化,當(dāng)手移動到虛擬部件的包圍盒內(nèi)時,該虛擬部件變色,以表明手接觸到該部件;當(dāng)進(jìn)行抓取操作時,輸出聲音表明識別到抓取操作;當(dāng)手處于抓取操作狀態(tài)并移動時,虛擬部件跟隨移動;程序中通過在相應(yīng)的位置上顯示已抓取部件的線框圖,并以閃爍的綠色提醒訓(xùn)練對象將該部件移動到該位置進(jìn)行組裝,移動到正確組裝位置后,該部件線框圖變成紅色,表示位置正確可以釋放,釋放后即完成了這一步的正確組裝。仿真結(jié)果如圖5所示。

圖5 組裝實(shí)驗演示圖Fig.5 Sketch map of assembly experiment

圖6 識別出的手勢圖像Fig.6 Gesture image recognized
圖6 (a)和(b)是采用本文描述的手勢識別方法識別出來的兩種特定操作手勢。實(shí)驗過程中選取5個人在不同的光照條件和復(fù)雜背景下進(jìn)行在軌組裝操作訓(xùn)練,組裝過程中每個特定動作重復(fù)10遍,得到的實(shí)驗結(jié)果如表1所示。從表中的數(shù)據(jù)可以看出,采用本文的方法進(jìn)行特定手勢識別,識別效率較高,且具有較強(qiáng)的魯棒性,可以達(dá)到組裝訓(xùn)練的目的。

表1 組裝手勢識別率Table 1 Recognition rate of assembly gestures
說明:本文將實(shí)際組裝操作過程中的手勢簡化為特定的三種手勢,用于組裝操作流程上的訓(xùn)練;文本描述的手勢識別方法適用于基于這三種特定手勢的虛擬組裝訓(xùn)練,但對于實(shí)際操作中可能涉及到的旋擰、插拔等復(fù)雜操作不太適用,針對一些復(fù)雜組裝手勢的識別將在后續(xù)的工作中繼續(xù)研究。
本文在分析未來空間站階段航天員地面模擬訓(xùn)練需求的基礎(chǔ)上,研究了基于Kinect的視覺手勢識別技術(shù)在載人航天失重防護(hù)設(shè)備組裝訓(xùn)練上的應(yīng)用。首先利用OpenNI和Nite檢測到動態(tài)手勢,再利用Kinect深度信息有效地分割手勢,并采用手勢圖像輪廓曲率分析方法識別出手指尖,結(jié)合Kalman濾波進(jìn)行穩(wěn)定跟蹤。根據(jù)識別的拇指與食指的位置關(guān)系以及手勢的定義識別出組裝的特定手勢。實(shí)驗結(jié)果表明,本文描述的方法對組裝訓(xùn)練的特定手勢有較高的識別率,在不同光照和復(fù)雜背景下魯棒性強(qiáng);該方法可應(yīng)用于載人航天在軌設(shè)備虛擬組裝訓(xùn)練中。
[1]鄧瑞,周玲玲,應(yīng)忍冬.基于Kinect深度信息的手勢提取與識別研究[J].計算機(jī)應(yīng)用研究,2013,30(4):1263-1265.
[2]任潔.基于立體視覺的手勢跟蹤識別及人機(jī)交互應(yīng)用[D].南京:南京大學(xué),2013.
[3]陶麗君,李翠華等.基于Kinect傳感器深度信息的動態(tài)手勢識別[J].廈門大學(xué)學(xué)報,2013,52(4):493-497.
[4]王艷,張奇志.基于Kinect深度信息的手勢識別[J].北京科技大學(xué)學(xué)報,2013,28(1):22-26.
[5]陳艷艷,陳正鳴,周小芹.基于Kinect的手勢識別及在虛擬裝配技術(shù)中的應(yīng)用[J].電子設(shè)計工程,2013,21(10):4-7.
[6]Shuai Yang,PrashanPremaratne,Peter Vial.Hand Gesture Recognition[C]//Proceedings of 2013 5th IEEE International Conference on Broadband Network&Multimedia Technology.Guilin,China:IEEE,2013:23-27.
[7]Li Y.Hand gesture recognition on using Kinect[C]//Software Engineering and Service Science(ICSESS),2012 IEEE 3rd International Conference on.Beijing,China:IEEE,2012:196-199.
[8]Jagdish L Raheja,Ankit Chaudhary,KunalSingal.Tracking of Fingertips and Centers of Palm using Kinect[C]//Proceeding on Third International Conference on Computational Intelligence,Modelling& Simulation.2011:248-252.