王紅霞 王坤
摘要:基于RGBD(RGBDepth)的靜態(tài)手勢識別的速度高于其動(dòng)態(tài)手勢識別,但是存在冗余手勢和重復(fù)手勢而導(dǎo)致識別準(zhǔn)確性不高的問題。針對該問題,提出了一種基于加鎖機(jī)制的靜態(tài)手勢識別方法來識別運(yùn)動(dòng)中的手勢。首先,將通過Kinect設(shè)備獲取RGB數(shù)據(jù)流和Depth數(shù)據(jù)流融合成人體骨骼數(shù)據(jù)流;然后,在靜態(tài)手勢方法中引入加鎖機(jī)制,并與之前建立好的骨骼點(diǎn)特征模型手勢庫進(jìn)行比對計(jì)算;最后,設(shè)計(jì)一款“程序員進(jìn)階之路”益智類網(wǎng)頁游戲進(jìn)行應(yīng)用與實(shí)驗(yàn)。實(shí)驗(yàn)驗(yàn)證在6種不同運(yùn)動(dòng)手勢情況下,該方法與純靜態(tài)手勢識別方法相比,平均識別準(zhǔn)確率提高了14.4%;與動(dòng)態(tài)手勢識別相比,識別速度提高了14%為更好地說明優(yōu)勢,此處也改用相對值來說明,是否符合表達(dá)?請明確。英文也作了相應(yīng)修改。。實(shí)驗(yàn)結(jié)果表明,提出的基于加鎖機(jī)制的靜態(tài)手勢識別方法,既保留了靜態(tài)識別的速率,實(shí)現(xiàn)了實(shí)時(shí)識別;又能很好地剔除冗余手勢和重復(fù)手勢,提高了識別正確性。
關(guān)鍵詞:
RGBD;Kinect;骨骼數(shù)據(jù);手勢識別;加鎖機(jī)制
中圖分類號: TP391.413; TP18 文獻(xiàn)標(biāo)志碼:A
0引言
隨著深度攝像機(jī)技術(shù)的發(fā)展,實(shí)時(shí)同步獲取高質(zhì)量的彩色圖(RGB圖)和深度圖(Depth圖)成為現(xiàn)實(shí),所以基于RGBD(RGBDepth)數(shù)據(jù)的應(yīng)用變得越來越流行。本文研究的基于RGBD融合的手勢識別方法是在Kinect的RGBD融合數(shù)據(jù)流的基礎(chǔ)上進(jìn)行的。Kinect是微軟公司在2010年推出的一款應(yīng)用于Xbox 360的周邊設(shè)備。由于Kinect價(jià)格低廉并且能有效、方便地獲取高分辨率的深度圖像,所以迅速應(yīng)用在了手勢識別領(lǐng)域。瑞士Bern大學(xué)研究的Virtopsy課題,讓外科醫(yī)生使用Kinect并配合大尺寸監(jiān)視器,無需接觸任何醫(yī)療設(shè)備就可以自動(dòng)實(shí)現(xiàn)調(diào)整成像的角度和區(qū)域,用單手或雙手對3D血管圖像進(jìn)行平移、放大、旋轉(zhuǎn)、鎖定等操作[1]。新加坡南洋理工大學(xué)的Ren等[2]提出基于一種新的手形匹配算法——指尖移動(dòng)距離(FingerEarth Movers Distance, FEMD)實(shí)現(xiàn)對靜態(tài)手勢的識別并應(yīng)用在數(shù)獨(dú)游戲中,通過玩家做出不同的手勢動(dòng)作完成相應(yīng)的數(shù)字填寫。文獻(xiàn)[3]通過Kinect設(shè)計(jì)出一種非接觸式播放器系統(tǒng),將改進(jìn)的連續(xù)自適應(yīng)MeanShift(Continuously Adaptive MeanShift, CAMSHIFT)算法對手心部位進(jìn)行穩(wěn)定追蹤,使用隱馬爾可夫模型(Hidden Markov Model, HMM)算法對8種手勢命令進(jìn)行識別,實(shí)現(xiàn)利用手勢軌跡對非接觸式播放器的控制[3]。文獻(xiàn)[4]利用Kinect的骨架跟蹤功能,使用最近鄰分類器和動(dòng)態(tài)時(shí)間歸整(Dynamic Time Warping, DTW)算法,完成對波蘭手語的識別[4]。近幾年,國內(nèi)也進(jìn)行了大量的手勢識別方面的研究,如中國科學(xué)院智能信息處理重點(diǎn)實(shí)驗(yàn)室利用Kinect通過對中國手語的3D運(yùn)動(dòng)軌跡校準(zhǔn)并和單詞進(jìn)行計(jì)算匹配,使聽障人士使用手語和計(jì)算機(jī)進(jìn)行自然的互動(dòng)[5-6];重慶郵電大學(xué)國家信息無障礙工程研發(fā)中心基于Kinect骨骼信息與四自由度機(jī)械臂結(jié)合,實(shí)現(xiàn)體感交互控制機(jī)械臂的轉(zhuǎn)動(dòng)以及抓取物件[7];電子科技大學(xué)模式識別與機(jī)器智能實(shí)驗(yàn)室基于Kinect研發(fā)的交互式投影顯示系統(tǒng),通過多個(gè)手指觸點(diǎn)以及手勢來操控普通玻璃,進(jìn)而控制計(jì)算機(jī)或各種設(shè)備,可用于智能家居、虛擬試衣間、互動(dòng)櫥窗[8];Wang等[9]提出一種基于運(yùn)動(dòng)學(xué)信息和人體3D骨骼數(shù)據(jù)將運(yùn)動(dòng)視頻快速地分割為原子動(dòng)作的時(shí)間分割方法;Chen等[10]通過利用表面普通信息分割物體和獲得平滑的深度圖特征來提高虛擬視角圖像的品質(zhì);鄭立國等[11]通過對Kinect獲取的3D點(diǎn)云數(shù)據(jù)進(jìn)行初步處理和精細(xì)分類,實(shí)現(xiàn)多個(gè)人體檢測以及運(yùn)動(dòng)人體檢測。
國內(nèi)外關(guān)于手勢識別的研究與應(yīng)用都是基于兩大識別方法——靜態(tài)手勢識別方法和動(dòng)態(tài)手勢識別方法展開的。本文通過對這兩種識別方法的對比分析,提出一種改進(jìn)的手勢識別方法。該方法將加鎖機(jī)制引入到靜態(tài)手勢識別過程中,有效地改善了動(dòng)態(tài)手勢識別方法中手勢識別實(shí)時(shí)性較差的問題,并且很好地剔除靜態(tài)手勢識別過程中的冗余手勢和重復(fù)手勢,提高識別正確率。
1問題描述
1.1傳統(tǒng)手勢識別方法的難點(diǎn)
依據(jù)輸入裝置分類,手勢識別技術(shù)可以分為兩大類:基于“接觸式”的交互設(shè)備與基于“視覺”的交互設(shè)備?!敖佑|式”交互設(shè)備常見的有觸控屏幕、數(shù)據(jù)傳感手套以及隨身加速器等設(shè)備。數(shù)據(jù)傳感手套需要大量的計(jì)算與標(biāo)定,并且價(jià)格昂貴也穿戴不方便,比如手心容易出汗等,在人機(jī)交互的自然性上嚴(yán)重不足,所以沒有得到廣泛應(yīng)用。基于視覺的交互設(shè)備能夠以非接觸的、自然的方式實(shí)現(xiàn)人機(jī)交互,普通計(jì)算機(jī)攝像頭就能作為輸入設(shè)備,但對外部環(huán)境的要求卻十分嚴(yán)格,強(qiáng)光或者弱光環(huán)境、復(fù)雜的識別背景,都會(huì)嚴(yán)重影響識別結(jié)果。在傳統(tǒng)的基于視覺的手勢識別系統(tǒng)中,手勢識別的難點(diǎn)主要體現(xiàn)在以下幾個(gè)方面。
1)目標(biāo)分割。靜態(tài)手勢分割比較容易受到環(huán)境的影響,當(dāng)光線太強(qiáng)或太弱、識別背景較復(fù)雜、手和其他身體部位重疊時(shí),很難分割出完整的手部圖像。動(dòng)態(tài)手勢在分割過程中,起點(diǎn)和終點(diǎn)的檢測也是一個(gè)難點(diǎn),動(dòng)態(tài)手勢由于在時(shí)間上是連續(xù)性的,不能準(zhǔn)確地分割出動(dòng)態(tài)手勢序列。
2)算法效率。由于人機(jī)交互系統(tǒng)對實(shí)時(shí)性要求比較高,而分割算法常常具有提取特征個(gè)數(shù)過多、過于復(fù)雜、訓(xùn)練或識別時(shí)間太長的弊端,所以系統(tǒng)的實(shí)時(shí)性一般都不是很高,但是如果選擇較為簡單的分割算法、特征模型和分類器,識別率又不盡如人意。
3)手勢識別。由于手是一個(gè)沒有固定形態(tài)的物體,在自然人機(jī)交互中,手勢是比較隨意和舒適的,沒有僵硬的模型或狀態(tài)。人手揮動(dòng)幅度的大小、移動(dòng)速度的快慢都會(huì)導(dǎo)致即使是同一個(gè)人打同一個(gè)手勢也會(huì)有不一樣,運(yùn)動(dòng)軌跡的千差萬別和手形的多樣性也給手勢識別增加了難度。另外,如何剔除無效的手勢也是一個(gè)需要考慮的問題。
所以利用深度攝像頭能夠獲取Depth信息這一優(yōu)點(diǎn),來克服普通計(jì)算機(jī)攝像頭由于極端光環(huán)境、復(fù)雜的識別背景導(dǎo)致識別結(jié)果嚴(yán)重失真的局限,是很有意義的。
1.2基于RGBD的兩種手勢識別方法對比分析
1.1節(jié)分析了基于RGBD數(shù)據(jù)流的手勢識別方法可以有效地突破傳統(tǒng)手勢識別方法的局限,在基于RGBD數(shù)據(jù)流進(jìn)行手勢識別的過程中,手勢識別方法主要分為靜態(tài)手勢和動(dòng)態(tài)手勢兩類。靜態(tài)手勢識別針對含有手勢意義的某一幀圖像進(jìn)行識別,主要包括人手的形態(tài)變化,例如張開或握拳,或者手指的示意,可以利用指尖識別來判斷手勢狀態(tài),由于僅通過一幀圖像檢測,所以沒有時(shí)間序列上的變化,靜態(tài)手勢識別中常用模板匹配法、幾何特征分類法、支持向量機(jī)和人工神經(jīng)網(wǎng)絡(luò)等方法。如果識別一段在時(shí)間序列上連續(xù)自然的動(dòng)態(tài)手勢,則必須綜合考慮時(shí)間序列上的變化,并且要對時(shí)間進(jìn)行分割,一般需要在時(shí)間和空間上指定相應(yīng)的開始標(biāo)識和結(jié)束標(biāo)識。常用的動(dòng)態(tài)手勢識別算法有隱馬爾可夫模型、動(dòng)態(tài)時(shí)間規(guī)整和基于壓縮時(shí)間軸的方法。
靜態(tài)手勢即指人靜止不動(dòng)時(shí)的姿態(tài),動(dòng)態(tài)手勢為連續(xù)的動(dòng)作序列,兩者的對比分析如表1所示。
2基于加鎖機(jī)制的靜態(tài)手勢識別方法
基于加鎖機(jī)制的靜態(tài)手勢識別方法就是在靜態(tài)手勢識別過程中引入加鎖機(jī)制,能夠比較高效、準(zhǔn)確地從RGBD數(shù)據(jù)流中獲取到具體手勢指令,其中RGBD數(shù)據(jù)流需要借助Kinect硬件設(shè)備來獲取。所以本文在使用Kinect進(jìn)行手勢識別的過程中,主要有Kinect設(shè)備的發(fā)現(xiàn)、RGBD數(shù)據(jù)流的獲取與融合、使用基于加鎖機(jī)制的靜態(tài)手勢識別方法識別手勢指令等步驟,如圖1所示。
2.1Kinect設(shè)備的發(fā)現(xiàn)
在基于Kinect設(shè)備進(jìn)行手勢識別的過程中,最開始就需要用到KinectSensor對象,KinectSensor直接表示一個(gè)Kinect硬件設(shè)備。KinectSensor對象也就是需要獲取的各種數(shù)據(jù)流的封裝,包括RGB圖像數(shù)據(jù)流、Depth圖像數(shù)據(jù)流和Skeleton骨骼數(shù)據(jù)數(shù)據(jù)流。從KinectSensor對象獲取數(shù)據(jù)流最基本的方式是通過事件模型,監(jiān)聽該對象的一系列事件。KinectSeneor對象有一個(gè)靜態(tài)的屬性集合,該集合有一個(gè)索引器和一個(gè)狀態(tài)值,狀態(tài)值總共有9此處為9種,但表2中卻為8種,是否正確?請作者核實(shí)。種返回值,分別代表著Kinect的不同狀態(tài),如表2所示。集合中的索引器的作用就是用來獲取KinectSensor對象。
2.2RGBD數(shù)據(jù)流的獲取與融合
在Kinect的前方總共有3個(gè)鏡頭,分別是普通RGB彩色攝像頭、紅外線發(fā)射器和紅外線CMOS攝影機(jī)。其中RGB彩色攝影機(jī)主要用來采集彩色圖像,跟普通RGB攝像頭并沒有太多差別;CMOS攝影機(jī)和紅外線發(fā)射器一起構(gòu)成的3D結(jié)構(gòu)光深度感應(yīng)器,其作用是采集深度數(shù)據(jù),也就是場景中物體到攝像頭的距離。在使用Kinect設(shè)備進(jìn)行手勢識別的過程中,與之相關(guān)的原始數(shù)據(jù)流有兩種,一種是RGB數(shù)據(jù)流,一種是Depth數(shù)據(jù)流,然后由這兩種數(shù)據(jù)流又可以融合成人體的骨骼數(shù)據(jù)流,在人體骨骼數(shù)據(jù)流的基礎(chǔ)上就能很方便地識別手勢。
在RGB數(shù)據(jù)流和Depth數(shù)據(jù)流進(jìn)行融合的過程中需要用到隨機(jī)森林算法。隨機(jī)森林是一種基于統(tǒng)計(jì)的機(jī)器學(xué)習(xí)理論,使用隨機(jī)的方式建立一個(gè)決策樹森林。在得到隨機(jī)森林之后,每當(dāng)輸入一個(gè)新的樣本到數(shù)據(jù)中后,首先讓森林中的每一棵決策樹分別進(jìn)行判斷;然后看看這個(gè)樣本應(yīng)該屬于對于分類算法而言的哪一分類;最后看哪一分類被選擇得最多,就預(yù)測這個(gè)樣本為哪一類,如圖2所示。
在Kinect平臺上使用的是由Shotton等[12]提出RGBD融合算法。該算法在實(shí)現(xiàn)過程中主要分為獲取樣本集、計(jì)算深度圖像特征值、根據(jù)特征值決定身體位置、確定骨架節(jié)點(diǎn)位置4個(gè)步驟。
1)獲取樣本集。
為了獲取足夠多的訓(xùn)練樣本,Shotton等[12]用Kinect深度傳感器從各種不同的實(shí)際生活場景獲取了50多萬幀含有不同姿勢的深度圖像,然后用“最遠(yuǎn)鄰居”聚類算法刪除相似重復(fù)樣本,得到一個(gè)最終包含10萬幀深度圖像的訓(xùn)練樣本庫,這些樣本中任意兩個(gè)姿態(tài)的距離不小于5cm。
2)計(jì)算深度圖像的特征值。
Kinect使用式(1)來計(jì)算像素點(diǎn)x的特征值,以判斷該像素是否屬于身體的某一部位:
其中:dI(x)表示像素點(diǎn)x在深度圖I中的深度值;θ=(u,v)表示兩個(gè)偏移量u和v,為了使特征值具有深度不變性,偏移量需要除以一個(gè)歸一化因子dI(x)。
3)根據(jù)特征值確定身體位置。
決策森林是一個(gè)非常有效的多類分類器,它由T棵決策樹組成。從每幅合成圖中隨機(jī)選擇2000個(gè)能均勻覆蓋全身各部位的像素點(diǎn)構(gòu)成樣本集,然后通過隨機(jī)決策森林算法進(jìn)行訓(xùn)練,隨機(jī)決策森林訓(xùn)練完畢后,可以用來判斷某個(gè)像素點(diǎn)是否屬于身體的某一部位。在第T棵決策樹中,葉子節(jié)點(diǎn)表示像素x屬于身體部位標(biāo)簽c的概率分布Pt(c|I,x)。最后通過式(2)將每棵樹的概率分布相加,就得到最終分類結(jié)果:
P(c|I,x)=1T∑Tt=1Pt(c|I,x)(2)
4)確定骨架節(jié)點(diǎn)位置。
隨機(jī)決策森林只能將深度圖像中的所有節(jié)點(diǎn)進(jìn)行分類,還不能得到骨架節(jié)點(diǎn)的三維坐標(biāo)信息。然后根據(jù)帶加權(quán)高斯核的均值漂移算法,就能得到最終的骨架節(jié)點(diǎn)的具體三維坐標(biāo)信息。最終從單幅深度圖像中一共可以預(yù)測20個(gè)人體骨架節(jié)點(diǎn)的三維坐標(biāo)位置。這20個(gè)骨架節(jié)點(diǎn)如圖3所示。
2.3骨骼點(diǎn)特征模型手勢庫
在進(jìn)行手勢識別之前,本文先經(jīng)過大量的訓(xùn)練和測試,根據(jù)骨骼點(diǎn)之間的相對位置建立好了骨骼點(diǎn)特征模型手勢庫。在骨骼點(diǎn)特征模型手勢庫中,手臂部位的關(guān)節(jié)的不同相對位置可以對應(yīng)不同的手勢指令,比如向左揮手和向右揮手,并且通過相應(yīng)的閾值控制來提高手勢識別的魯棒性,不同手勢指令對應(yīng)的骨骼點(diǎn)的相對位置圖4所示。
2.4加鎖機(jī)制控制原理
當(dāng)獲取到骨骼數(shù)據(jù)流時(shí),就能夠根據(jù)骨骼數(shù)據(jù)流中骨骼點(diǎn)之間的相對位置來與骨骼點(diǎn)特征模型手勢庫進(jìn)行匹配來確定該時(shí)刻操作者的手勢含義。這種思路可以很好地解決動(dòng)態(tài)手勢識別過程中實(shí)時(shí)性不高的問題,但是同時(shí)又會(huì)出現(xiàn)冗余手勢重復(fù)識別的問題。比如說當(dāng)操作者向右揮手并一直停留在右邊時(shí),根據(jù)剛才的設(shè)計(jì)思路,程序會(huì)多次響應(yīng)向右的操作,但是很明顯操作者的意圖是只需要一次向右操作;本系統(tǒng)在具體的程序設(shè)計(jì)過程中通過操作系統(tǒng)中加鎖的機(jī)制來解決由于提高了手勢識別的實(shí)時(shí)性帶來的這一缺陷。具體做法就是在代碼中設(shè)置upActive、downActive、leftActive、rightActive、enterActive五把布爾型的全局變量鎖,能夠很有效地控制手勢操作的正常進(jìn)行,即在一個(gè)指令還沒結(jié)束時(shí),另一指令(包括與上次相同的指令)是不可能發(fā)生的,具體算法思路如算法1。
算法1加鎖模塊核心控制邏輯。
程序前
Input:skeletons。
Output:上、下、左、右、結(jié)束控制指令。
Skeleton=GetPrimarySkeleton(Skeleton[] skeletons)
if(rightHand.Position.Z primaryHand=rigthtHand; else primaryHand=leftHand; bool upActive=false; bool downActive=false;… private void ProcessSlideGesture(Joint shoulderCenter, Joint primaryHand) { double cross=primaryHand.X-shoulderCenter.X; double vertical=shoulderCenter.Y-primaryHand.Y; if (crossDistance>0.15) if(!upActive && !downActive && !leftActive && !rightActive) { rightActive=true; System.Windows.Forms.SendKeys.SendWait("{Right}"); } else rightActive=false; if (crossDistance<-0.15) if (!upActive && !downActive && !leftActive&&!rightActive) { leftActive=true; System.Windows.Forms.SendKeys.SendWait("{Left}"); } else leftActive=false;… } 程序后 2.5基于加鎖機(jī)制的靜態(tài)手勢識別方法流程 具體的手勢識別流程主要包括,獲取RGBD融合數(shù)據(jù)流、完整骨骼檢查、識別主控者骨骼、識別主控手、識別當(dāng)前幀手勢指令、識別控制鎖是否激活、發(fā)送指令幾個(gè)步驟,具體流程如圖5所示。 通過前三個(gè)步驟,首先獲取到RGBD融合后的骨骼數(shù)據(jù)流,然后判斷數(shù)據(jù)流中是否有完整的骨骼數(shù)據(jù)流:若沒有,則重新獲取RGBD融合后的數(shù)據(jù)流;若有則首先通過Depth信息從數(shù)據(jù)流中識別出主控者的骨骼數(shù)據(jù)流,然后再判斷主控者的主控手。由于主控者在控制過程隨時(shí)都可能改變主控手,所以這一過程是必須的,而不能在初始時(shí)就假定哪只手為主控手。主控手確定后就能夠識別當(dāng)前幀的手勢指令了,識別到手勢指令后,還需要判斷是控制鎖是否激活,若控制鎖被激活則表明上一手勢指令已結(jié)束,即能夠發(fā)出下一指令;若控制鎖沒有被激活則表明上一指令還在進(jìn)行中,還沒有讓出控制鎖,不能發(fā)出當(dāng)前指令操作。 3應(yīng)用與實(shí)驗(yàn) 通過對本文提出的基于加鎖機(jī)制的靜態(tài)手勢識別方法進(jìn)行具體實(shí)現(xiàn)與應(yīng)用,在實(shí)驗(yàn)中設(shè)計(jì)并實(shí)現(xiàn)了一個(gè)具體的手勢識別系統(tǒng),主體上分為手勢識別模塊和游戲模塊兩個(gè)部分。手勢識別模塊是對基于加鎖機(jī)制的靜態(tài)手勢識別方法的實(shí)現(xiàn),用來識別用戶手勢,并發(fā)出相應(yīng)操作指令。游戲模塊通過接收手勢識別模塊發(fā)出的指令進(jìn)行游戲,起到在真實(shí)應(yīng)用場景中測試手勢識別模塊的準(zhǔn)確率和流暢性的作用。接下來將闡述游戲的功能、手勢識別對比實(shí)驗(yàn)。 3.1游戲整體介紹 “程序員進(jìn)階之路”是一款益智類網(wǎng)頁游戲,用來接收底層手勢識別模塊的指令并進(jìn)行游戲,從而測試底層模塊在具體應(yīng)用場景中的實(shí)用性。在游戲主界面中,主體顯示4×4的16個(gè)小方塊,每個(gè)小方塊上顯示有程序員的職位名稱,代表小方塊的分?jǐn)?shù)值,如圖6所示,程序員的職位越高,方塊的分?jǐn)?shù)值越大,并且不同的職位方塊使用深淺不同的顏色表示,操作者通過鍵盤上、下、左、右鍵來控制方塊的整體移動(dòng),通過鍵盤的enter鍵來控制游戲的重新開始,當(dāng)兩個(gè)相同的等級值的方塊發(fā)生碰撞時(shí)表示程序員開始進(jìn)階,將提升方塊的等級值為更高一等級。 手勢識別系統(tǒng)整體架構(gòu)如圖7所示。游戲底層是手勢識別模塊,首先通過Kinect攝像機(jī)的RGB攝像頭和紅外傳感器獲取到彩色圖像數(shù)據(jù)流和深度信息數(shù)據(jù)流;然后由這兩種數(shù)據(jù)流融合成Skeleton骨骼數(shù)據(jù)流;接著通過對骨骼數(shù)據(jù)流的分析、預(yù)處理、顯示等步驟,并且使用基于加鎖機(jī)制的手勢識別方法達(dá)到手勢識別目的,在這個(gè)過程中需要與初始建立好的骨骼點(diǎn)特征模型手勢庫進(jìn)行比對計(jì)算,得到手勢識別指令。
3.2手勢識別對比實(shí)驗(yàn)
3.2.1手勢的定義
為了更好地測試基于靜態(tài)加鎖機(jī)制的手勢識別方法在實(shí)際應(yīng)用中的識別效果,在實(shí)驗(yàn)中,總共設(shè)計(jì)了6種手勢,分別是“左”“右”“上”“下”“確認(rèn)”“取消”;同時(shí)這6種基本手勢也能很好地控制游戲的進(jìn)行,每種手勢的具體參數(shù)與含義如表3所示。表中相對位置參數(shù)是指Hand關(guān)節(jié)與shoulder關(guān)節(jié)在空間三維坐標(biāo)中的相對位置。具體地,“左”“右”手勢指X坐標(biāo)抽上的相對位置,“上”“下”手勢指Y坐標(biāo)軸上的相對位置,“確認(rèn)”“取消”手勢指Z坐標(biāo)軸上的相對位置;閾值的設(shè)置是為了提高算法識別的容錯(cuò)性,具體參數(shù)是依據(jù)實(shí)驗(yàn)參與者在實(shí)際游戲過程中的自然手勢的關(guān)節(jié)相對位置得到的。
3.2.2手勢的識別
手勢識別的流程主要分為骨骼點(diǎn)特征模型手勢庫的設(shè)計(jì)與建立、Kinect設(shè)備的發(fā)現(xiàn)及數(shù)據(jù)流的獲取與顯示、主控人與主控手的確定、手勢操作識別4個(gè)過程。其流程描述如下。
Input:Skeleton骨骼數(shù)據(jù)流。
Output:手勢識別指令。
1)骨骼特征模型手勢庫的設(shè)計(jì)與建立。
2)Kinect設(shè)備的發(fā)現(xiàn)打開與數(shù)據(jù)流的獲取顯示。
3)主控人與主控手的確定。
4)基于加鎖機(jī)制進(jìn)行靜態(tài)手勢識別。
手勢識別模塊界面的設(shè)計(jì)與實(shí)現(xiàn)如下。
1)原始數(shù)據(jù)流的獲取。
從Kinect中獲取的初始深度數(shù)據(jù)流是原始的十六進(jìn)制數(shù)據(jù)流,可以直接將其通過控制臺輸出,就能看到其具體表現(xiàn)形式。在十六進(jìn)制數(shù)據(jù)流中,每一個(gè)深度圖像像素點(diǎn)都是一個(gè)三維坐標(biāo)(x,y,z),表示其在三維空間中的位置。在獲取骨骼數(shù)據(jù)流時(shí),從Kinect得到的是多個(gè)由20個(gè)三維坐標(biāo)組成的數(shù)據(jù),每一個(gè)三維坐標(biāo)均表示一個(gè)骨骼點(diǎn)在三維空間中的位置,并且在骨骼點(diǎn)的數(shù)據(jù)結(jié)構(gòu)中還有一個(gè)變量來表示骨骼點(diǎn)具體表示的是哪一個(gè)骨骼,具體的十六進(jìn)制數(shù)據(jù)流如圖8所示。
2)實(shí)時(shí)骨架的繪制。
實(shí)時(shí)骨架的顯示流程首先是由骨骼數(shù)據(jù)獲取到骨骼點(diǎn)的三維坐標(biāo)信息并將其轉(zhuǎn)化為界面中對應(yīng)的二維坐標(biāo),然后根據(jù)骨骼點(diǎn)的二維坐標(biāo)在圖形界面中將骨骼點(diǎn)用實(shí)心圓繪制出來,接著根據(jù)骨骼點(diǎn)對應(yīng)的人體具體物理關(guān)節(jié)在圖形界面中連接實(shí)心圓用以表示骨架,并且若骨骼點(diǎn)不是實(shí)際獲取而是推測出來的,則用不用顏色表示用以區(qū)別,相應(yīng)骨架用虛線連接。這樣當(dāng)所有骨骼點(diǎn)和骨架繪制完畢后,一幅栩栩如生的實(shí)時(shí)人體骨架圖就會(huì)展現(xiàn)在主界面上,如圖9所示。
3.2.3識別準(zhǔn)確率對比
分別使用靜態(tài)手勢識別方法實(shí)現(xiàn)的程序和基于加鎖機(jī)制的靜態(tài)手勢識別方法實(shí)現(xiàn)的程序,進(jìn)行“程序員進(jìn)階之路”游戲?qū)嶒?yàn),同一實(shí)驗(yàn)人以自己最舒適的自然手勢進(jìn)行游戲,并統(tǒng)計(jì)游戲過程中各種手勢出現(xiàn)的次數(shù)以及不同方法正確識別的手勢次數(shù),由此計(jì)算出不同方法的識別準(zhǔn)確率,具體如表4所示。
從表4中的數(shù)據(jù)可以看出,對于單個(gè)手勢的準(zhǔn)確率和整體的準(zhǔn)確率,本文提出的方法在手勢識別準(zhǔn)確率上都較靜態(tài)手勢識別方法有所提高,這是由于靜態(tài)手勢識別方法沒有對關(guān)節(jié)移動(dòng)過程中的時(shí)間序列進(jìn)行分析,從而不能準(zhǔn)確地判斷一個(gè)手勢開始時(shí)刻和結(jié)束時(shí)刻,導(dǎo)致識別準(zhǔn)確率不高,而本文方法由于加鎖機(jī)制的引入,很好地避免了這一漏洞,使準(zhǔn)確率得到了大幅的提升。
3.2.4識別速度對比
分別使用動(dòng)態(tài)手勢識別方法實(shí)現(xiàn)的程序和基于加鎖機(jī)制的靜態(tài)手勢識別方法實(shí)現(xiàn)的程序,進(jìn)行“程序員進(jìn)階之路”游戲?qū)嶒?yàn),同一實(shí)驗(yàn)人以自己最舒適的自然手勢進(jìn)行游戲,規(guī)定游戲時(shí)間為2min,統(tǒng)計(jì)在這2min內(nèi)程序識別的手勢次數(shù),從而對比兩種方法的手勢識別速度。一次手勢識別的完整過程為實(shí)驗(yàn)者從開始手勢動(dòng)做到游戲界面執(zhí)行完此手勢效果為止,并且實(shí)驗(yàn)者在2min內(nèi)連續(xù)發(fā)出手勢指令進(jìn)行游戲,所以表中的識別速度是指兩種方法在此具體游戲環(huán)境中的識別速度,其中還包含有游戲界面的響應(yīng)時(shí)間,具體數(shù)據(jù)如表5所示。
從實(shí)驗(yàn)結(jié)果可以看出,在識別速度上,本文方法較動(dòng)態(tài)手勢識別方法有所提高,平均每次識別所花的時(shí)間減少了1/4s0.25s,速度提高14%。這主要由于動(dòng)態(tài)手勢識別方法在識別每一獨(dú)立手勢的時(shí)候都必須先分析手勢的時(shí)間序列,從而得到手勢的開始時(shí)刻和結(jié)束時(shí)刻,這一計(jì)算過程需要耗費(fèi)一定的時(shí)間;而基于加鎖機(jī)制的靜態(tài)手勢識別方法由于加鎖機(jī)制的引入,不需要計(jì)算開始時(shí)刻和結(jié)束時(shí)刻,從而提高了識別速度。
4結(jié)語
本文提出的基于加鎖機(jī)制的靜態(tài)手勢識別方法有效地整合了靜態(tài)手勢識別和動(dòng)態(tài)手勢識別的優(yōu)勢。在方法中,首先獲取到RGBD融合后的骨骼數(shù)據(jù)流;然后通過Depth信息從數(shù)據(jù)流中識別出主控者的骨骼數(shù)據(jù)流;接著再判斷主控者的主控手,主控手確定后就能夠識別當(dāng)前幀的手勢指令了。識別到手勢指令后,還需要判斷是控制鎖是否激活,若控制鎖被激活則表明上一手勢指令已結(jié)束,即能夠發(fā)出下一指令,若控制鎖沒有被激活則表明上一指令還在進(jìn)行中,還沒有讓出控制鎖,不能發(fā)出當(dāng)前指令操作。最后將提出的手勢識別方法具體應(yīng)用到實(shí)際的手勢識別系統(tǒng)中,使用HTML5和JQuery技術(shù)設(shè)計(jì)了一款“程序員進(jìn)階之路”益智類網(wǎng)頁游戲,并部署在GitHub的個(gè)人主頁上(網(wǎng)址:http://180.76.137.57:8080/aroad/index.html),在RGBD融合后的數(shù)據(jù)流上使用本文識別方法,來識別游戲者的手勢指令,可以很好地實(shí)現(xiàn)無需鼠標(biāo)和鍵盤僅通過手勢就能實(shí)時(shí)準(zhǔn)確地進(jìn)行游戲的目的。
在實(shí)際系統(tǒng)中進(jìn)行了兩個(gè)對比實(shí)驗(yàn):一個(gè)是比較本文方法與靜態(tài)手勢識別方法的識別準(zhǔn)確率,由實(shí)驗(yàn)數(shù)據(jù)可以看到,識別準(zhǔn)確率提高了14.4%;另一個(gè)是比較本文方法與動(dòng)態(tài)手勢識別方法的識別速度,實(shí)驗(yàn)數(shù)據(jù)顯示每次手勢的平均本文方法識別速度提高了1/4s14%。實(shí)驗(yàn)結(jié)果表明,本文提出的基于加鎖機(jī)制的靜態(tài)手勢識別方法,很好地解決了靜態(tài)手勢識別中存在的冗余手勢和重復(fù)手勢問題,提高了識別正確性;同時(shí)又保留了靜態(tài)識別的速率速度快的優(yōu)勢,達(dá)到了實(shí)時(shí)識別的目的。
參考文獻(xiàn):
[1]
CHOI W, PANTOFARU C, SAVARESE S. A general framework for tracking multiple people from a moving camera [J]. IEEE Transactions on Pattern Analysis and Machine Intelligence, 2013, 35(7): 1577-1591.
[2]
REN Z, YUAN J, MENG J, et al. Robust hand gesture recognition based on fingerearth movers distance with a commodity depth camera [C]// MM11: Proceedings of the 19th ACM International Conference on Multimedia. New York: ACM, 2011: 1093-1096.
[3]
YANG C, JANG Y, BEHETC J. Gesture recognition using depthbased hand tracking for contactless controller application [C]// ICCE 2012: Proceedings of the 2012 IEEE International Conference on Consumer Electronics. Piscataway, NJ: IEEE, 2012: 297-298.
[4]
OSZUST M, WYSOCKI M. Polish sign language words recognition with Kinect [C]// HSI 2013: Proceedings of the 2013 6th International Conference on Human System Interactions. Washington, DC: IEEE Computer Society, 2013: 219-226.
[5]
CHAI X, LI G, LIN Y, et al. Sign language recognition and translation with Kinect [C]// FG 2013: Proceedings of the 10th IEEE International Conference on Automatic Face and Gesture Recognition. Washington, DC: IEEE Computer Society, 2013: 22-26.
[6]
CHAI X, LI G, CHEN X, et al. A tool to support communication between deaf and hearing persons with the Kinect [C]// ASSETS 2013: Proceedings of the 15th International ACM SIGACCESS Conference on Computers and Accessibility Proceedings. New York: ACM, 2013: 21-23.
[7]
林海波,梅為林,張毅,等.基于Kinect骨骼信息的機(jī)械臂體感交互系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)應(yīng)用與軟件,2013,30(2):157-160.(LIN H B, MEI W L, ZHANG Y, et al. Design and implementation of robot arm somatosensory interaction system based on Kinect skeletal information [J]. Computer Applications and Software, 2013, 30(2): 157-160.)
[8]
ZHAO Y, LIU Z, CHENG H. RGBdepth feature for 3D human activity recognition [J]. China Communication, 2013, 10(7): 93-103.
[9]
WANG Y, SHI Y. Human activities segmentation and location of key frames based on 3D skeleton [C]// CCC 2014: Proceedings of the 33rd Chinese Control Conference. Washington, DC: IEEE Computer Society, 2014: 4786-4790.
[10]
CHEN H, LIU T, GE M, et al. A depth optimization method for 2Dto3D conversion based on RGBD images [C]// IEEE ICNIDC 2014: Proceedings of the 2014 4th IEEE International Conference on Network Infrastructure and Digital Content. Piscataway, NJ: IEEE, 2014: 223-227.
[11]
鄭立國,劉楊,羅江林,等.基于RGBD數(shù)據(jù)的實(shí)時(shí)人體檢測算法[J].吉林大學(xué)學(xué)報(bào)(信息科學(xué)版),2015,33(2):214-218.(ZHENG L G, LIU Y, LUO J L, et al. Implementation of realtime human body detection based on RGBD data [J]. Journal of Jilin University (Information Science Edition), 2015, 33(2): 214-218.)
[12]
SHOTTON J, FITZGIBBON A, COOK M, et al. Realtime human pose recognition in parts from single depth images [C]// CVPR 2011: Proceedings of the 2011 IEEE Conference on Computer Vision and Pattern Recognition. Washington, DC: IEEE Computer Society, 2011: 1297-1304.