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