賈丙佳, 李平
(華僑大學(xué) 信息科學(xué)與工程學(xué)院, 福建 廈門(mén) 361021)
在眾多人機(jī)交互技術(shù)中,手勢(shì)不失為直接、高效的交互模式,手勢(shì)輸入超越了傳統(tǒng)的鼠標(biāo)和鍵盤(pán),是與計(jì)算機(jī)進(jìn)行交互的新類別.隨著計(jì)算機(jī)相關(guān)技術(shù)的發(fā)展,體感技術(shù)的使用突破了平面的約束,可以讓用戶在不需要任何其他輔助設(shè)備的情況下,運(yùn)用肢體動(dòng)作對(duì)機(jī)器發(fā)出指令,從而實(shí)現(xiàn)用最自然的方式與機(jī)器對(duì)話[1-3].2010年,微軟推出Kinect圖像采集設(shè)備,能夠準(zhǔn)確獲取復(fù)雜環(huán)境中人物和背景的深度圖像信息,并利用深度信息進(jìn)行手勢(shì)識(shí)別,為用戶提供便捷、無(wú)接觸式的人機(jī)交互方式;同時(shí),還可以利用Kinect進(jìn)行動(dòng)作的捕捉,如醫(yī)療康復(fù)[4]、體感游戲[5]等.
在早期的手勢(shì)識(shí)別中,大多需要借助一些輔助外設(shè),用戶需要穿戴顏色手套或特制數(shù)據(jù)手套等[6-11],確定手部關(guān)節(jié),實(shí)現(xiàn)手勢(shì)提取,但這類方法局限于特定的輔助設(shè)備,使用不便,并不能給用戶帶來(lái)良好的交互體驗(yàn).近年來(lái),許多研究者結(jié)合Kinect進(jìn)行算法設(shè)計(jì),獲得了一定的研究成果.如樊景超等[12]采用改進(jìn)重心距離法識(shí)別指尖,該方法的局限性在于指尖位置不能低于掌心位置,做手勢(shì)時(shí)手掌不能有太大的旋轉(zhuǎn)角度.葛艷茹等[13]采用 Hu 矩陣檢測(cè)直線交點(diǎn)個(gè)數(shù)的方式,判斷手指?jìng)€(gè)數(shù),但忽略了在指蹼部位與直線的交點(diǎn)問(wèn)題,可能會(huì)造成誤檢測(cè).方華等[14]利用模板匹配的方法進(jìn)行4種手勢(shì)的識(shí)別,但這種方法需要事先提供手勢(shì)模板,對(duì)于沒(méi)有模板的手勢(shì)無(wú)法識(shí)別.王松林等[15]利用k曲率算法檢測(cè)手指指尖,但其所取k值對(duì)于不同大小的手掌并不具有普適性.文獻(xiàn)[16-17]對(duì)手勢(shì)區(qū)域提取相應(yīng)的特征,運(yùn)用分類算法進(jìn)行識(shí)別.Keskin等[18]使用深度傳感器采集手勢(shì)三維模型,并對(duì)相同手勢(shì)分不同的部分運(yùn)用支持向量機(jī)(SVM)進(jìn)行手勢(shì)識(shí)別.文獻(xiàn)[19-20]通過(guò)提取手部特征向量,運(yùn)用SVM對(duì)預(yù)定的手勢(shì)進(jìn)行識(shí)別.Domini等[21]結(jié)合距離和曲率特征,運(yùn)用多級(jí)SVM識(shí)別手勢(shì).曹皺清等[22]從深度圖像中分割出手勢(shì)區(qū)域,并用決策樹(shù)識(shí)別手勢(shì),但需要預(yù)先采集數(shù)據(jù)、進(jìn)行訓(xùn)練,獲得的模型和特征復(fù)雜,運(yùn)算量大,并不適合實(shí)際操作.
本文為了提高手勢(shì)識(shí)別效率、降低算法復(fù)雜度,同時(shí)給使用者帶來(lái)舒適的體驗(yàn),提出一種基于Kinect融合深度信息和骨骼信息的數(shù)字手勢(shì)識(shí)別方法.
Kinect是一款能夠采集環(huán)境深度信息的體感外設(shè)3D攝像機(jī).包括彩色攝像機(jī)、深度傳感器、步進(jìn)電機(jī)、麥克風(fēng)陣列和發(fā)光二極管(LED).Kinect組件,如圖1所示.

圖1 Kinect組件Fig.1 Kinect components
圖1中:彩色攝像機(jī)如同普通RGB攝像頭一樣,從環(huán)境中捕獲彩色視頻數(shù)據(jù),在其內(nèi)部以流的方式進(jìn)行傳輸;深度傳感器包括紅外發(fā)射器和紅外攝像機(jī),紅外發(fā)射器在工作時(shí),不斷以“偽隨機(jī)點(diǎn)”模式向鏡頭外發(fā)射紅外光,而紅外攝像機(jī)則捕捉物體反射的紅外光,通過(guò)內(nèi)建算法,就可得出Kinect可視范圍內(nèi)的深度數(shù)據(jù);在紅外發(fā)射器和彩色攝像機(jī)之間的發(fā)光二極管(LED),用于指示Kinect設(shè)備的工作狀態(tài);盒子底部是由4個(gè)相同的麥克風(fēng)以直線排列組成的麥克風(fēng)陣列,這樣設(shè)置不僅可以捕獲聲音,還可以定位聲源的位置;底座和主體部分的連接處安裝了一個(gè)步進(jìn)電機(jī),通過(guò)控制步進(jìn)電機(jī)調(diào)整俯仰角,使Kinect獲取可視范圍內(nèi)盡可能多的有效數(shù)據(jù).
利用Kinect 進(jìn)行深度圖像數(shù)據(jù)采集,通過(guò)一系列深度圖像幀返回16位灰度格式的深度數(shù)據(jù)流,運(yùn)用內(nèi)建算法可以計(jì)算深度圖像中每一個(gè)像素到攝像頭的距離,并以mm為單位返回.當(dāng)啟動(dòng)骨骼數(shù)據(jù)流時(shí),在返回的16位數(shù)據(jù)中,0~7用于表示人體編號(hào)的后三位二進(jìn)制數(shù)據(jù)有效.如果這3位的數(shù)據(jù)為0時(shí),代表該像素屬于環(huán)境,不屬于人體;如果這3位的數(shù)據(jù)為非0時(shí),表明Kinect視野中有人體像素.剩下的13位用于表示該點(diǎn)與傳感器的相對(duì)距離.Kinect捕獲的普通圖像和深度圖像對(duì)比圖,如圖2所示.圖2(b)中:根據(jù)灰白程度,對(duì)距離攝像頭遠(yuǎn)近的物體進(jìn)行標(biāo)示.
針對(duì)深度圖像中的每一個(gè)像素取出人體編號(hào);然后,根據(jù)這個(gè)編號(hào)就可以實(shí)現(xiàn)人體像素和非人體像素的分離,能夠排除非人體像素對(duì)實(shí)驗(yàn)造成的干擾.從復(fù)雜背景中分離出的人體深度圖像,如圖3所示.

(a) 普通圖像 (b) 深度圖像 (a) 環(huán)境深度圖 (b)人體深度圖圖2 Kinect捕獲圖像的對(duì)比圖 圖3 Kinect捕獲圖像的分離圖Fig.2 Comparison of Kinect captured images Fig.3 Separation of Kinect captured images
根據(jù)人們?nèi)粘W鍪謩?shì)時(shí),手掌平面近似與水平面保持垂直且位于整個(gè)身體最前端的習(xí)慣,Kinect采集到手部區(qū)域的深度值大都處于同一深度范圍內(nèi),利用深度閾值法粗略提取手部區(qū)域的深度數(shù)據(jù).按照所采集到人體數(shù)據(jù)的最小深度值(Dmin)加深度閾值(T)的方法,就可分割出手部區(qū)域.根據(jù)實(shí)際測(cè)試,取80 mm 上式中:H(B,G,R)為提取的手部區(qū)域像素值;S(B,G,R)為人體像素值,其他區(qū)域?yàn)?;d為攝像頭到人體輪廓每個(gè)像素的距離.根據(jù)深度閾值法,對(duì)分割出的手部區(qū)域進(jìn)行二維空間的投影,重建二維圖像.提取的手部區(qū)域分割圖,如圖4所示. 圖4 手部區(qū)域分割圖Fig.4 Hand region segmentation map 圖4是重建的二維RGB圖像,在進(jìn)行手指數(shù)字識(shí)別時(shí),可以對(duì)R,G和B任一通道中的數(shù)據(jù)進(jìn)行處理.對(duì)于這3個(gè)通道的數(shù)據(jù)取值并沒(méi)有特殊要求,文中取R,G和B三個(gè)通道的數(shù)值分別為115,169和9.掌心圓的邊界同樣是提取B通道的數(shù)據(jù)進(jìn)行手指數(shù)字識(shí)別.在采集手部數(shù)據(jù)時(shí),采用了人體輪廓距攝像頭最近距離Dmin+T的方式,達(dá)到不限定人體必須位于攝像頭前的某一固定位置的目的. 根據(jù)Kinect骨骼追蹤系統(tǒng),實(shí)時(shí)讀取出手腕和手掌處的骨骼信息,并將其映射到手部區(qū)域的二維圖像中,計(jì)算過(guò)這兩點(diǎn)的直線l1的斜率.根據(jù)該斜率的負(fù)倒數(shù)和手腕點(diǎn)坐標(biāo),運(yùn)用直線點(diǎn)斜式方程創(chuàng)建另一條垂直于l1的直線l2.具體有以下2個(gè)步驟. 利用創(chuàng)建的直線方程l2,將手掌二維坐標(biāo)點(diǎn)帶入,判斷該點(diǎn)相對(duì)于直線的位置,即 當(dāng)f1取值為0時(shí),表明該點(diǎn)在直線上;當(dāng)f1取值為大于或小于0時(shí),表明該點(diǎn)不在直線上.在判斷出手掌點(diǎn)p1的取值情況f1后,對(duì)整個(gè)手部區(qū)域的像素坐標(biāo)進(jìn)行遍歷,保留和p1點(diǎn)的f1取值相同的像素點(diǎn),即 上式中:H(i,j)為原始手部區(qū)域圖像的像素坐標(biāo);dst(i,j)為分割后的手掌區(qū)域圖像的像素坐標(biāo). (a) 手部分割圖 (b) 分割結(jié)果 圖5 手掌分割圖Fig.5 Palm segmentation map 手掌區(qū)域被準(zhǔn)確分割.手掌分割圖,如圖5所示.圖5(a)中:部分手臂像素對(duì)后續(xù)的處理造成一定的干擾,需將其分割掉;兩個(gè)藍(lán)色圓點(diǎn)為Kinect骨骼追蹤系統(tǒng)追蹤到的手掌和手腕骨骼點(diǎn);區(qū)域分割線l2為這兩點(diǎn)建立的傾斜直線.圖5(b)為圖5(a)的分割結(jié)果.由圖5(b)可知:手掌區(qū)域被單獨(dú)分割出來(lái),去除了手臂上的干擾像素,進(jìn)行了邊緣平滑處理. 對(duì)分割出來(lái)的圖像進(jìn)行形態(tài)學(xué)開(kāi)運(yùn)算,在保持手掌區(qū)域面積大體不變的情況下,分割掉手指處的纖細(xì)部分,這時(shí)計(jì)算分割后圖像的最小包圍圓;然后,對(duì)最小包圍圓的半徑適當(dāng)延長(zhǎng)5到10個(gè)像素單位,得到的同心圓作為掌心圓;最后,統(tǒng)計(jì)掌心圓邊界和圖5(b)所示的手掌區(qū)域分割圖中手指的相交次數(shù),將其作為一種特征識(shí)別手指?jìng)€(gè)數(shù). Kinect骨骼追蹤系統(tǒng)可以直接定位手掌心坐標(biāo),但由于骨骼追蹤系統(tǒng)測(cè)量存在誤差,如果直接使用該結(jié)果,會(huì)嚴(yán)重影響最終識(shí)別精度.文中通過(guò)處理手掌區(qū)域圖像,獲得掌心位置的準(zhǔn)確坐標(biāo),具體分為以下兩個(gè)步驟. 步驟1利用圖像處理中的形態(tài)學(xué)開(kāi)運(yùn)算,對(duì)手指區(qū)域的像素進(jìn)行分割處理. 步驟2對(duì)保留的圖像區(qū)域計(jì)算最小包圍圓,手掌區(qū)域最小包圍圓,如圖6所示. 形態(tài)學(xué)開(kāi)運(yùn)算的實(shí)質(zhì)是對(duì)圖像進(jìn)行先腐蝕后膨脹,這樣可以消除圖像上一些小的噪點(diǎn),還能在纖細(xì)點(diǎn)處分離物體,且不會(huì)明顯改變圖像的有效面積.文中正是利用這一特性,將手指部位全部去除,保留不含手指的手掌區(qū)域像素.接著對(duì)該區(qū)域像素坐標(biāo)進(jìn)行遍歷,找出手掌區(qū)域距離圖像4個(gè)邊界最近的4個(gè)像素坐標(biāo)值.邊界點(diǎn)像素坐標(biāo),如圖7所示.圖7中:A,B,C和D四點(diǎn)是滿足條件的手掌區(qū)域距離圖像邊界最近的4個(gè)像素點(diǎn). (a) 手指分割圖 (b) 最小包圍圓 圖6 手掌區(qū)域最小包圍圓 圖7 邊界點(diǎn)像素坐標(biāo) Fig.6 Minimum surrounding circle in palm area Fig.7 Pixel coordinates of boundary points 在獲得4個(gè)邊界像素坐標(biāo)值后,尋找相鄰且相互之間距離最遠(yuǎn)的3個(gè)點(diǎn).AB,BC,CD和DA之間的距離為 過(guò)A,B和C這3個(gè)點(diǎn)的圓的方程為 (x-x0)2-(y-y0)2=r2. 將A,B和C三個(gè)點(diǎn)依次帶入上式,得到的方程組為 聯(lián)立以上方程組,求得圓心為 將x0和y0代入方程組中的任何一個(gè)式子,便可以求出半徑r,畫(huà)出最小包圍圓.由于手掌區(qū)域圖像是RGB圖,包含3個(gè)通道,所以圓的邊界也用3個(gè)通道畫(huà)出,并選用像素值為S(9,0,255),這里B通道的取值為第一個(gè)值9,其與圖5(b)圖的B通道取值保持一致,同時(shí),圓邊界的寬度僅用一個(gè)像素值表示,從而為后續(xù)處理做鋪墊. 最小包圍圓包圍了不含手指的全部像素(圖6(b)),此時(shí),僅需要對(duì)該最小包圍圓的半徑進(jìn)行適當(dāng)?shù)难娱L(zhǎng),以避免和手掌部分像素相交,并映射到圖5(b)中,就可獲得僅和手指相交的圓.經(jīng)過(guò)多次試驗(yàn),取r′=r+6,然后,以該半徑r′和掌心點(diǎn)(x0,y0)畫(huà)出另一個(gè)圓.手掌區(qū)域映射圖,如圖8所示. 擴(kuò)大半徑的圓映射到手掌區(qū)域分割圖,如圖8(b)所示.圖8(b)中:圓的邊界僅和手指部分相交.通過(guò)計(jì)算出相交次數(shù),便可以識(shí)別出手指?jìng)€(gè)數(shù),有以下4個(gè)步驟. 步驟1遍歷圖8(b)所示的圖像.圓的邊界像素坐標(biāo)值為 上式中:C1=(i,j)表示將符合條件的像素坐標(biāo)賦值給集合C1;disi,j(B,G,R)為B,G和R三個(gè)通道的像素值;disi,j(9,0,255)為節(jié)2.1畫(huà)掌心圓時(shí)的像素取值. 步驟2坐標(biāo)排序.由于步驟1獲取的圓邊界坐標(biāo)值是按照從左到右、從上到下排列的,并不符合圓按照順時(shí)針或者逆時(shí)針畫(huà)的規(guī)律,這時(shí)需要對(duì)這些坐標(biāo)點(diǎn)進(jìn)行排序. 步驟3運(yùn)用“十字形”搜索窗口,沿著排序后的圓邊界坐標(biāo)進(jìn)行遍歷.“十字形”搜索窗口,如圖9所示.圖9中:中心點(diǎn)坐標(biāo)(i,j)為像素坐標(biāo)的位置.中心點(diǎn)坐標(biāo)沿著圓的邊界進(jìn)行遍歷,每遍歷一個(gè)坐標(biāo)值,依次取出周?chē)噜?個(gè)坐標(biāo)的像素值進(jìn)行判斷.如果4個(gè)像素值都和手勢(shì)分割圖B通道的數(shù)值相等,則記錄下這個(gè)特征,并將這個(gè)特征存儲(chǔ)到另一個(gè)集合C2中,以便后續(xù)處理. (a) 最小包圍圓 (b) 掌心圓 圖8 手掌區(qū)域映射圖 圖9 “十字形”搜索框 Fig.8 Palm area map Fig.9 Cross search box 步驟4統(tǒng)計(jì)特征,識(shí)別出手指?jìng)€(gè)數(shù).對(duì)步驟3得到的集合C2進(jìn)行從0~1或者從1~0變化次數(shù)的統(tǒng)計(jì).如統(tǒng)計(jì)的次數(shù)為5,說(shuō)明圓的邊界和手指相交了5次,進(jìn)一步說(shuō)明使用者伸出了5個(gè)手指,傳達(dá)的意思是數(shù)字5.集合C2為 至此,一幀手掌二維圖像數(shù)據(jù)處理完畢.重復(fù)以上步驟,可以實(shí)現(xiàn)對(duì)0~5任意輸入的手指數(shù)字圖像數(shù)據(jù)的處理,手指數(shù)字識(shí)別流程圖,如圖10所示. 采用掌心圓和手指相交的方式,只在于識(shí)別出手指?jìng)€(gè)數(shù),并不涉及語(yǔ)義識(shí)別.對(duì)于任意組合的手指,均以手指?jìng)€(gè)數(shù)作為數(shù)字識(shí)別結(jié)果,如若識(shí)別更多的數(shù)字,需用伸出更多根手指進(jìn)行組合,只要獲得的掌心圓能夠和手指相交,就能準(zhǔn)確識(shí)別出結(jié)果.另外,相對(duì)于傳統(tǒng)的各種觸摸接觸式人機(jī)交互方式,文中采用的是基于Kinect的非接觸式交互方式,使用者無(wú)需用身體的任何部位觸碰實(shí)際物體,僅僅依據(jù)動(dòng)作手勢(shì)進(jìn)行交互,更接近于人與人之間的交互模式,給使用者帶來(lái)自然、舒適的體驗(yàn). 圖10 手指數(shù)字識(shí)別流程圖Fig.10 Flow chart of finger digital recognition 為了對(duì)提出的方法進(jìn)行驗(yàn)證,使用的計(jì)算機(jī)配置為Inert(R) Core(TM) i3-3220 CPU、4.00 GB安裝內(nèi)存、3.30 GHz主頻和Windows 7操作系統(tǒng),實(shí)驗(yàn)數(shù)據(jù)來(lái)自Kinect for XBOX攝像頭.利用微軟Microsoft Visual Studio 2013作為開(kāi)發(fā)平臺(tái),并結(jié)合微軟官方Kinect for Windows SDK開(kāi)發(fā)工具包.圖像的分辨率設(shè)置為640 px×480 px,視頻幀率為30 幀·s-1,進(jìn)行手指數(shù)字識(shí)別實(shí)驗(yàn).文中要識(shí)別的6種數(shù)字手勢(shì)圖,如圖11所示. (a) 數(shù)字0 (b) 數(shù)字1 (c) 數(shù)字2 (d) 數(shù)字3 (e) 數(shù)字4 (f) 數(shù)字5圖11 數(shù)字手勢(shì)圖Fig.11 Digital gesture map 表1 手勢(shì)識(shí)別結(jié)果Tab.1 Gesture recognition result 為了驗(yàn)證該方法的實(shí)時(shí)性和準(zhǔn)確性,在室內(nèi)的正常光照條件下,邀請(qǐng)了6位實(shí)驗(yàn)者,對(duì)每個(gè)手勢(shì)采集600幀圖像,手指數(shù)字識(shí)別結(jié)果,如表1所示.表1中:η為識(shí)別率. 數(shù)字手勢(shì)識(shí)別界面,如圖12所示.圖12中:設(shè)計(jì)的界面實(shí)時(shí)顯示了手勢(shì)的識(shí)別結(jié)果;紅色圓圈即是掌心圓;右側(cè)是手指數(shù)字的識(shí)別結(jié)果和準(zhǔn)確率;右下角是開(kāi)始和停止識(shí)別按鈕.由圖12可知:文中方法對(duì)于0~5等6種數(shù)字手勢(shì)的識(shí)別率均達(dá)到100%,進(jìn)一步說(shuō)明了文中方法實(shí)時(shí)、準(zhǔn)確. 對(duì)不同方法識(shí)別同種數(shù)字手勢(shì)0~5的結(jié)果進(jìn)行列舉比較,不同方法的識(shí)別率,如表2所示.表2中:文獻(xiàn)[18-19]均采用SVM對(duì)提取的手勢(shì)特征進(jìn)行訓(xùn)練. (a) 數(shù)字0 (b) 數(shù)字1 (c) 數(shù)字2 (d) 數(shù)字3 (e) 數(shù)字4 (f) 數(shù)字5 圖12 數(shù)字手勢(shì)識(shí)別界面Fig.12 Digital gesture recognition map 表2 不同方法識(shí)別率Tab.2 Recognition rate in different methods % 由表2可知:雖然SVM是用于處理小樣本數(shù)據(jù)的一種機(jī)器學(xué)習(xí)方法,但需先給定一定量的樣本進(jìn)行訓(xùn)練,而文中方法并不是基于樣本數(shù)據(jù)特征,無(wú)需給定任何樣本;對(duì)于1~5這種連續(xù)手勢(shì)的識(shí)別,須建立多分類支持向量機(jī)解決,這無(wú)疑增加了算法的計(jì)算復(fù)雜度. 利用Kinect采集的深度數(shù)據(jù)融合追蹤到的骨骼數(shù)據(jù)研究手指數(shù)字識(shí)別方法,對(duì)采集到的深度圖像進(jìn)行一系列處理,得到掌心圓,根據(jù)掌心圓和手指相交的次數(shù),識(shí)別出手指?jìng)€(gè)數(shù).實(shí)驗(yàn)結(jié)果證明:該方法準(zhǔn)確、高效,同時(shí)復(fù)雜度低,準(zhǔn)確率高,適用于很多簡(jiǎn)單的人機(jī)交互現(xiàn)實(shí)場(chǎng)景.對(duì)動(dòng)態(tài)手勢(shì)如手勢(shì)軌跡進(jìn)行跟蹤識(shí)別將會(huì)是下一步的工作.
1.3 手掌分割



2 特征的提取與手指?jìng)€(gè)數(shù)的識(shí)別
2.1 掌心圓的計(jì)算


2.2 手指數(shù)字的識(shí)別


3 實(shí)驗(yàn)結(jié)果與分析






4 結(jié)束語(yǔ)