李國城
(廣州新華學院,廣東 廣州510520)
隨著計算機視覺技術(shù)的發(fā)展,基于視覺的人機交互智能化不斷提高,利用人的手勢動作、語音等,與計算機環(huán)境建立一種類似人與人的人機交互模式[1],相比通過傳統(tǒng)的鼠標、鍵盤等設備交流,可以減少硬件對人機交互的束縛和局限性,提高信息交流的簡便性、自然性。近年來,眾多科研研究機構(gòu)對基于視覺的非接觸式手勢感知技術(shù)進行了深入研究,在體感娛樂游戲等領(lǐng)域有了新型的操控模式[2]。
目前新型的手勢識別人機交互技術(shù)有基于計算機視覺和基于數(shù)據(jù)手套兩種方式。手套內(nèi)嵌微處理器及加速度傳感器、彎曲傳感器設計基于數(shù)據(jù)手套的識別系統(tǒng),通過提取手掌輪廓區(qū)域的特征、手的傾斜度、手掌的運動軌跡等進行分析識別,識別精度較高,但需要佩戴特殊手套,使用有一定的局限性[3]?;谟嬎銠C視覺的方法是使用攝像頭獲取識別對象的RGB彩色圖像和深度圖像,對深度圖像數(shù)據(jù)進行手勢分割、定位、特征提取處理,達到對動態(tài)手勢的正確識別[4]。本文選用微軟公司的Kinect傳感器作為攝像頭獲取動態(tài)手勢的彩色圖像和深度圖像數(shù)據(jù),再利用基于OpenCV視覺庫的手勢識別算法,并融入濾波算法,對手勢進行提取和定義,達到最優(yōu)解,降低了背景、光照等因素的干擾,有效提高了對動態(tài)手勢識別的魯棒性、實時性。
Kinect是微軟公司推出的一款XBOX體感輸入設備,通過特定的攝像頭與傳感器實現(xiàn)了人機自然交互。如圖1所示,Kinect硬件主要由一組多陣列麥克風組成,能進行語音輸入,增強人機交互效果。中間彩色輸入攝像頭,能夠以每秒30幀的速率捕獲分辨率為640×480的彩色圖像。兩端的深度傳感器為紅外投影機和紅外攝像頭,對環(huán)境有較高的魯棒性,用來獲取用戶位置和手勢動作信息,經(jīng)過內(nèi)部芯片處理之后得到320×240像素的深度圖像。同時微軟公司與OpenNI推出的Kinect for Windows SDK開發(fā)工具包,使得Kinect通過插值處理,向上層軟件實時提供相差無幾像素的彩色數(shù)據(jù)流和深度數(shù)據(jù)流[5]。
在OpenNI中,包含了一套骨骼算法庫,通過調(diào)用UserGenerator.GetUserPixels(0,sceneMD),DepthGenerator.GetMetaData(depthMD)兩個函數(shù),獲取深度圖像并建立人體骨骼圖,深度數(shù)據(jù)以矩陣形式存儲在SceneMetaData類型中。通過關(guān)節(jié)點的空間向量算法計算手勢運動角度,調(diào)用SetCursorPos()函數(shù)將手勢所在的位置映射到計算機屏幕上,驅(qū)動鍵盤或者鼠標,從而實現(xiàn)人機的交互[6]。
Kinect利用自身傳感器獲取人體的深度圖像,并實時描繪出由多個關(guān)節(jié)點組成的三維坐標骨骼圖[7],如圖2所示。
圖1 Kinect傳感器硬件外觀
圖2 骨骼節(jié)點圖
選擇空間向量法計算動態(tài)手勢的特征,得出節(jié)點的運動和相對角度變化勢,進而判定人體手勢動作,并定義這些動作,從而對應用程序進行暫停、翻頁等操作。
由Kinect獲得的深度信息可知,經(jīng)過坐標變換得到的三維深度數(shù)據(jù),與距離之間存在對應關(guān)系,因此Kinect設備獲取的深度三維數(shù)據(jù)坐標要轉(zhuǎn)換為和人體坐標保持一致。圖3所示為Kinect的空間坐標系,z軸正方向為Kinect設備所在原點指向的正前方,x軸、y軸為人體空間坐標系[8]。
本文判定手勢特征是基于空間向量的漸進算法,根據(jù)空間向量的方向性與可平移的特性,可知向量可以表示為坐標系中任意兩個不重復坐標點,轉(zhuǎn)化公式如下:
由此可將人體關(guān)節(jié)角度計算轉(zhuǎn)化為空間向量夾角的計算,即求手、肘關(guān)節(jié)及肩膀三個節(jié)點組成的空間平面XOZ夾角。圖4是左手在Kinect空間坐標系中的向量表示,經(jīng)過空間向量可平移特性,將原有的坐標系轉(zhuǎn)換成以O為中心原點的坐標系,其中基準點C點作為坐標系原點,方便計算得到預處理之后的手勢特征向量。
通過空間向量CA和CB的夾角計算可以得出肘關(guān)節(jié)角度大小,在Δt時間內(nèi),連續(xù)記錄若干組α夾角,判斷夾角變化大小,從而達到動態(tài)手勢的正確識別。
本文是選用Kinect傳感器,并利用開源的OpenNI開發(fā)工具獲取深度圖像信息,通過空間向量算法獲取骨骼節(jié)點來定位人體手勢[9]。由于受環(huán)境光照、背景的多樣性等影響,采集到的深度圖像會產(chǎn)生擾動,因此,為提高深度圖像的準確性和魯棒性,提出一種基于動態(tài)規(guī)劃的思想,在獲取深度圖像數(shù)據(jù)之后加入限幅濾波算法,得到識別手勢的最優(yōu)解[10]。圖5、圖6分別為深度圖像采集并進行節(jié)點識別流程圖和加入濾波算法流程圖。
圖3 Kinect空間坐標系示意圖
圖4 Kinect空間坐標系向量表示
圖5 深度圖像采集、識別流程圖
圖6 濾波算法流程圖
針對不同環(huán)境下光照強弱、背景復雜程度對文中設計的基于Kinect視覺手勢識別進行了魯棒性驗證。在光照條件比較好的室內(nèi)和在光線比較暗的室內(nèi)進行多次實驗,Kinect體感設備可以有效地獲取人體深度圖像并識別手勢特征。在背景較為雜亂的環(huán)境下,手勢識別準確性沒有受到影響。當背景中出現(xiàn)其他人,且與使用者相距較近,Kinect傳感器的人物判斷會產(chǎn)生錯誤。圖7所示是Kinect傳感器在光線較弱的室內(nèi)獲取的人體深度骨骼圖像。
表1 手勢對應動作及識別準確性統(tǒng)計表
圖7 Kinect傳感器獲取深度骨骼圖像
本文驗證手勢識別的準確性,預先定義好手勢動作,每個手勢動作定義一個相對應的計算機界面操作。本次測試共采集200個動態(tài)手勢樣本,對定義的手勢動作分別做50次采樣測試,表1所示為本次手勢對應動作及識別準確性。
實驗結(jié)果表明,利用Kinect傳感器獲取人體手勢深度圖像,結(jié)合空間向量算法計算骨骼節(jié)點角度,在背景相對復雜及光線較弱的環(huán)境下,對動態(tài)手勢識別成功率較高,具有較好的實時性和魯棒性,達到了預期目標。
本文選用可以獲取高精度深度圖像的Kinect體感設備,結(jié)合空間向量算法計算骨骼節(jié)點信息進行動態(tài)手勢識別,運用限幅濾波算法對深度圖像進行優(yōu)化。實驗驗證表明,基于Kinect視覺功能的體感傳感器,對動態(tài)手勢的識別具有較好的實時性和魯棒性,可以實現(xiàn)人與計算機的人機交互。對該系統(tǒng)進一步優(yōu)化,結(jié)合靜態(tài)手勢和動態(tài)手勢的識別,可以應用于家庭數(shù)字電視、機器人、特殊環(huán)境下的人機交互,具有較大的研究價值和應用范圍。