杜佳祥
(中國航空工業(yè)導彈院,洛陽471000)
在現(xiàn)階段,隨著機器視覺、計算機圖形學以及人機交互等相關(guān)技術(shù)的飛速發(fā)展,對于手勢識別的準確性提出了更高的要求。目前國內(nèi)外學者已經(jīng)進行了相關(guān)研究,重慶大學的彭露茜等人[1]基于模板匹配的思想,使用工業(yè)相機對手勢圖像進行采集與處理,結(jié)合粒子濾波器與皮膚的橢圓模型實現(xiàn)手勢的動態(tài)追蹤,并獲取手掌中心點的運動軌跡,以此為基礎(chǔ)提出使用軌跡追蹤的方法實現(xiàn)了對手勢的動態(tài)追蹤與識別;清華大學祝遠新等人[2]提出基于表觀的新型手勢識別方法,通過對用戶的動態(tài)手勢建立相應的表觀模型,包括手勢的運動表觀和時序信息等,確立對應的手勢模型的參數(shù),該識別算法能夠?qū)崿F(xiàn)對10種以上的手勢在線實時識別;這兩種基于機器視覺的手勢識別方法優(yōu)點是成本相對不高,設(shè)備相對比較簡單,但是由于一個普通的攝像機無法獲取深度信息,并且很容易受到光線、膚色和背景的干擾,僅僅依靠機器視覺進行手勢識別尤其是動態(tài)手勢識別進行人手模型細節(jié)動作的實時重建是非常困難的,很難達到實時性和準確性的要求。
Oka K等人[3]提出了一種基于Kinect的指尖檢測方法,通過紅外相機和RGB相機識別人手的五根手指的指尖,在增強現(xiàn)實桌面上,完成復雜背景下的指尖識別以及指尖運動追蹤。首先通過傳感器定位手掌位置,然后提取手掌輪廓,結(jié)合邊緣輪廓曲率特征法實現(xiàn)指尖的定位,再計算出手掌中央的位置及手掌掌心到指尖的距離,通過視頻中指尖手指的偏移距離來獲取手指的運動方向。但是由于Kinect的參數(shù)設(shè)置主要是針對追蹤相對距離比較大(0.5至4米)的全身的人體骨骼動作的追蹤,所以相對獲取的手部的細節(jié)信息是不夠的,Kinect的識別精度與其他專門針對手部識別的設(shè)備相比精度較低。
對于上述手勢識別算法存在的問題,本文提出一種基于Leap Motion(以下簡稱Leap)的手勢識別方法,對現(xiàn)有基于模板匹配的手勢識別算法改進,加入有效性閾值對手勢類別進一步判斷,實現(xiàn)手勢的分類與識別。
本文采用的手勢識別設(shè)備是Leap,該設(shè)備采用雙目立體視覺的方法獲取用戶的手勢信息。如圖1(a)所示,Leap為右手坐標系,單位為毫米,坐標系原點在控制器中心,XYZ三個坐標軸的位置如圖中所示,Z軸平行與設(shè)備的兩條短邊,正方向是有指示燈的方向。
Leap內(nèi)部結(jié)構(gòu)如圖1(b)所示,其中包括三個LED指示燈以顯示設(shè)備是否正常運行,兩個紅外相機組成雙目系統(tǒng)對手勢進行檢測與識別。該設(shè)備的檢測區(qū)域是倒金字塔,設(shè)備中心為金字塔尖,有效檢測的高度范圍在Y軸的正方向25至600毫米左右。Leap的指尖識別與追蹤精度的平均值在0.7毫米左右。
圖1 Leap結(jié)構(gòu)圖
模板匹配在手勢識別領(lǐng)域是一種較為常用的方法,其主要思想是通過對兩個樣本進行對比計算,得到兩個樣本之間的相似度用以判斷手勢,本文采取的也是基于模板匹配的手勢識別決策,首先對手勢進行初步地分類,然后通過歐氏距離計算計算未知手勢與同類的手勢之間的相似度。
K最近鄰法的思路如下:若所提取的未知樣本在已知樣本的特征空間中與K個已知樣本最近(即為最相似),那么根據(jù)這K個樣本所屬的類別來決策未知樣本的類別。該算法可以數(shù)學表達為:
其中,x表示未知手勢的特征向量,di表示已知樣本集的特征向量,cj表示預先設(shè)置好的手勢類型,bj表示預先設(shè)置的cj最優(yōu)閾值。
K最近鄰法的有點在于無顯式學習過程,即不需要預先進行訓練過程,因此該算法時間復雜度為零[4]。在樣本庫中選取一定數(shù)量的樣本k1,k2,k3,…,km,樣本對應的類別分別為w1,w2,w3,…,wn,可以通過式(2)來計算未知樣本和單個已知樣本之間的歐氏距離,然后根據(jù)得到的每一個類別的平均歐氏距離Ed(p,wi)對未知的樣本進行分類,即將未知樣本歸類于歐氏距離最小的對應樣本的類別。因此,K最近鄰法的分類規(guī)則為:若未知樣本p滿足式(2),則p的類別即為wi。
經(jīng)過上述的分類規(guī)則的決策之后,已經(jīng)能夠?qū)⑽粗獦颖境醪胶Y選分類完成,此時,我們認為用戶所做出的手勢在已知的多個樣本中有一定數(shù)量的已知類型的手勢與之對應,初步判定未知手勢屬于該類型。然而不同用戶在做相同的手勢時也會有一定的差異性,如果對未知的樣本在進行類型的分辨時,錯誤識別的手勢數(shù)量相比于正確識別的手勢數(shù)量更多,則最終的手勢識別結(jié)果就為失敗。
為了避免上述情況的發(fā)生,提高手勢識別準確率,本文提出的解決方案是:在對手勢的類別初步篩選之后,添加新的判斷機制對手勢的分類進行二次篩選,考慮引入有效性閾值μ,首先將初步分類之后的手勢與和其相同類別的其他所有的類別已知的樣本計算平均相似度,定義與初步分類后的手勢類別相同的手勢樣本共有L個,此L個樣本分別與未知樣本的單個歐氏距離分別為a1,a2,a3,…,aL則平均相似度可以表示為:
其中,Q表示平均相似度,L表示與未知手勢同一類別的手勢樣本數(shù)量。
通過式(3)獲得平均相似度Q之后,將該數(shù)值與設(shè)定的有效性閾值μ進行對比,若滿足相似度Q小于有效性閾值μ,則表示該手勢的分類與識別正確,如圖2所示。
圖2 手勢識別與交互流程
首先,初始化手勢檢測成功的計數(shù)值X為0,設(shè)備獲取每一幀圖像,并檢測是否存在手勢,若存在手勢則計數(shù)值X增加,手勢不存在則返回初始化。Leap官方文檔指出設(shè)備的固有刷新頻率是0.01,即每隔0.01s設(shè)備將會刷新一幀手勢圖像,若直接以此刷新頻率進行手勢的識別與判斷,將會導致整個交互操作的不自然,為了提高用戶在交互過程中的交互體驗與舒適感,本文加入檢測閾值參數(shù)(設(shè)為10),當手勢指令不斷觸發(fā),且連續(xù)次數(shù)大于等于該閾值時認為該手勢的操作指令觸發(fā),此時計算歐氏距離Q,然后比較有效性閾值判斷手勢是否成功,若識別失敗則返回,若識別成功則結(jié)束程序,手勢識別流程結(jié)束。
本文選取26位用戶,定義以下三種手勢分別為M、R、E,每個用戶分別做出三種手勢,使用Leap采集以計算有效性閾值,如圖3所示。
圖3 手勢識別驗證
根據(jù)實驗結(jié)果對數(shù)據(jù)進行整理得到歐氏距離分布折線圖如圖4所示,上面折點為正方形的折線為不同類手勢之間的距離分布,下面折點為三角形的折線為同類手勢之間的距離分布。
圖4 歐氏距離分布折線圖
從圖中能夠看出,兩條折線的交叉之處非常少,有明顯的分割線,當歐氏距離值為95時,能夠明顯地區(qū)分出兩個樣本手勢的相似度,因此本文的有效性閾值選擇為95。
確定有效性閾值之后,本文使用Leap設(shè)備對三種手勢各采集100組數(shù)據(jù)進行實驗驗證。根據(jù)上述介紹的分類方法將手勢進行初步篩選和分類,然后將未知樣本與樣本庫中的同類已知樣本進行相似度的計算,獲得兩者之間的歐氏距離,最后與選定的有效性閾值進行對比,采集三種手勢的樣本數(shù)量均為100個,然后分別統(tǒng)計M、R、E三種手勢的識別率情況,最終得到的實驗結(jié)果如表1所示。
表1 本文方法對三種手勢的識別率
本文提出了一種新的手勢識別改進算法,在現(xiàn)有的基于模板匹配的手勢識別算法中加入有效性閾值對手勢類別進一步判斷,提高了手勢的識別率,且所使用的設(shè)備價格低廉、易于攜帶,故綜合考慮,本文算法的可靠性和有效性更高,對人機交互中的手勢交互具有一定的實際意義。