王 巍,張慧靜,任相臻
(1.河北工程大學 信息與電氣工程學院,河北 邯鄲 056038;2.江南大學 物聯(lián)網(wǎng)工程學院 物聯(lián)網(wǎng)技術(shù)應用教育部工程中心,江蘇 無錫 214122)
根據(jù)手語輸入介質(zhì)的不同,手語識別系統(tǒng)大致分為兩種:基于數(shù)據(jù)手套的手語識別和基于視覺的手語識別。前者是通過數(shù)據(jù)手套這一可穿戴式傳感器來捕獲手勢原始數(shù)據(jù),然后對這些數(shù)據(jù)進行分析處理來識別出用戶的手部姿態(tài)[1],后者是基于計算機視覺通過攝像頭捕獲手勢圖像數(shù)據(jù),然后運用各種圖像處理技術(shù)進行分析,最終達到手勢識別的目標[2]。由于數(shù)據(jù)手套需要通過多組不同類型傳感器識別確定用戶手指的真實位置,所以具有其它識別設備無法匹敵的高精度、低誤差的特性。但考慮到數(shù)據(jù)手套佩戴繁瑣、價格昂貴、普適性低、抗干擾性差等因素,逐漸受到“冷落”。后者則以其自然、直觀、易于學習等優(yōu)勢逐漸成為近幾年手語識別領(lǐng)域的青睞[3],但識別精度又差強人意。
微軟Kinect是一款消費級的姿態(tài)傳感器,它能夠允許用戶在非控制條件下進行交互[4]。Kinect最初設計應用于體感游戲[5]。然而,隨著Kinect版本不斷地更新和技術(shù)的提高,也被應用到人體骨骼追蹤、人臉識別和手勢識別等領(lǐng)域[6]。將測試的準確度和精度作為Kinect的評估標準,Gonzalez-Jorge等[7]將Kinect與Xtion傳感器進行了比較,發(fā)現(xiàn)準確度和精度并不受傳感器類型或是測試目標與設備間的入射角度的影響,而距離則會引起測試準確度和精度成倍降低。當測試距離超過7 m后,傳感器已無法測量。測試距離在1 m范圍內(nèi),測試準確性是5 mm~15 mm,兩米范圍內(nèi)為5 mm~25 mm,在1 m和2 m范圍內(nèi)測試精度分別為1 mm~6 mm和4 mm~14 mm。這些結(jié)果證實Kinect在工程實際應用中的測試范圍很小,而且測試準確度也不太嚴格。
相比Kinect,另外一款消費級別的姿態(tài)傳感器是Leap Motion Controller(LMC),于2013年中旬上市[8,9]。LMC致力于手勢識別,允許用戶通過手勢與電腦實現(xiàn)交互[10]。這款設備將高精度的手和手指追蹤作為一個自然交互界面來改善人機交互。根據(jù)制造廠商提供的信息,LMC能夠識別手勢和手的坐標位置,精度可達0.01 mm。而實際測試發(fā)現(xiàn)測試精度只能達到0.7 mm[11],并不適用于專業(yè)的目標追蹤研究,但它為簡捷手語識別提供了一種更加自然、舒適的體驗效果。
由于手部運動有益于兒童的腦部發(fā)育,Cho和Lee[12]利用Leap Motion基于蜜蜂之舞為孩子開發(fā)了一款游戲,這款游戲充分利用了LMC的優(yōu)勢,為歷險游戲提供了一個新的發(fā)展方向。Chuan CH等[13]提出一種基于Leap Motion的美國手語方法,他們使用K-臨近算法和支持向量機對美國手語中26個字母指語進行了分類,實驗結(jié)果顯示兩種分類方法的最高平均識別率分別是72.78%和79.83%,該方法的提出對聾啞教學有巨大影響。任磊[14]提出一種基于Leap Motion動態(tài)手勢研究系統(tǒng),主要通過追蹤目標手指的運動軌跡作為手勢識別特征對中國手語的26個字母進行識別的,平均識別準確率為96.57%,但是在實驗設計過程中并沒有使用到Leap Motion檢測到的高精度手勢信息。
本文針對以往基于視覺手勢識別存在的手勢分割難、環(huán)境干擾大、識別準確低等弊端,提出一種基于支持向量機(support vector machine,SVM)的單手指語識別方法。之所以選用單手指語,是因為它簡潔、通用,非常適用于有限空間范圍內(nèi)。本文將從Leap Motion提取的特征訓練生成手勢模型,使用SVM對預測手勢完成分類。實驗結(jié)果表明,本方法具有較高的識別精度和良好的可拓展性。
本文中指語識別主要分為數(shù)據(jù)采集、特征提取、數(shù)據(jù)預處理和分類識別4部分。首先,數(shù)據(jù)采集部分使用由Leap公司提供的一款價格低廉、便于攜帶的姿態(tài)傳感器Leap Motion獲取視野內(nèi)手勢特征。其次,Leap Motion采集得到的手勢數(shù)據(jù)含有大量的冗余信息不可以直接使用,因此需要對采集的特征進行提取,整理出更具有價值的手勢特征以便分類使用。再次,考慮到特征樣本含量大、特征維度高,影響識別準確率和運行速度,在建模前需要對特征數(shù)據(jù)進行了預處理。最后,利用網(wǎng)格搜索尋找最優(yōu)參數(shù),訓練模型完成分類。指語識別具體流程如圖1所示。
圖1 指語識別流程
圖中左側(cè)虛線框內(nèi)為Leap Motion數(shù)據(jù)采集流程,采集到的手勢特征以數(shù)據(jù)集的方式封裝在軟件開發(fā)工具包(software development kit,SDK)中。每個手勢姿態(tài)可以細化成很多幀,每一幀都有其特定的ID與之區(qū)別開,對于視野內(nèi)持續(xù)存在的ID將保持追蹤,提取幀中的手勢數(shù)據(jù)進行存儲,對于丟失ID將結(jié)束本次追蹤,重新采集。Leap Motion最大頻率可達每秒200幀,保證了手勢數(shù)據(jù)采集的實時性。右側(cè)虛線框內(nèi)是對特征提取后的手勢數(shù)據(jù)進行預處理,包含:歸一化和主成分分析(principal component analysis,PCA)降維。
Leap Motion采用的是右手笛卡爾坐標系,反饋給用戶的為手勢三維空間信息,封裝在系統(tǒng)內(nèi)部。從文獻[15]了解到Leap Motion通過Frame類作為程序入口來捕獲視野內(nèi)的手與手指的數(shù)據(jù)集合,再通過調(diào)用Frame類的成員函數(shù)得到視野內(nèi)一只手的三維信息,如圖2所示:圖(a)為視野內(nèi)手的骨骼坐標和名稱,圖(c)為視野內(nèi)手的指尖方向和法線方向。表1根據(jù)圖2列出了本文從Leap Motion的應用程序接口(application program interface,API)可以獲得的手掌和手指的特征。手掌特征包括:法線、手掌的中心坐標和速度。手指特征包括,每根手指的名稱、方向和長度,遠端骨節(jié)、中間骨節(jié)、近端骨節(jié)和掌骨的三維坐標等。同時,API還提供一些手勢信息,圖2并沒有顯示出的浮點型數(shù)據(jù)(本文并沒有涉及到),例如:抓力、捏力、球心和求半徑。
表1 從Leap Motion API獲取的手勢特征
圖2 Leap Motion API提供的手勢特征
本文只針對靜態(tài)手勢,因此API提供的一些手勢信息并不完全適用,例如手掌及指尖速度,如果不進行特征提取,必將引入大量的冗余信息,影響識別結(jié)果的準確性。盡管手和手指的絕對位置對指語識別影響不大,但是可以通過它們獲取其它有意義的特征,例如計算指尖距離、向量夾角。因此,本文特征向量將基于API提供的手勢空間信息計算得來,使得到手勢特征具有較強的魯棒性[16]。
(1)
第二個特征向量f2包含兩兩手指間夾角,可由兩向量間夾角公式求得,令j∈(thumb, index, middle, ring, little),i≠j
=arccos
(2)
則特征向量f2可表示為
(3)
特征向量f3為每個手指與手掌法線間夾角,夾角大小也可由式(2)求得
(4)
同時,還將視野內(nèi)手指的伸張個數(shù)作為第4個特征向量,即
f4=[extendi]
(5)
5根手指根據(jù)extend的0,1狀態(tài)判斷手指伸曲狀態(tài)。加入特征向量f4后,此時共計25組特征數(shù)據(jù),將其以.txt格式保存作為本文指語識別特征,保證了手勢在實測過程中的旋轉(zhuǎn)不變性和放縮不變性,同時提高了測試精度。
本文設計9種指語分類,每種指語樣本包含25組特征數(shù)據(jù),樣本數(shù)量是識別準確性的重要保障,但是樣本數(shù)量太大會影響識別速率,樣本數(shù)量太少又無法保證識別準確性。在保持樣本數(shù)量充足的情況下,可以通過降低特征矩陣維數(shù)來提高識別速率。
在降維前,考慮到提取的特征值數(shù)值之間相差較大,很容易導致大數(shù)值區(qū)間屬性過分支配小數(shù)值區(qū)間屬性的現(xiàn)象出現(xiàn),造成降維過程中損失主成分特征,所以需要先對特征數(shù)據(jù)進行歸一化處理。本文將數(shù)據(jù)歸一到[0,1]區(qū)間,采用訓練集和測試集同時歸一化的方式。圖3為訓練集歸一化前后數(shù)據(jù)分布圖,灰度值的深淺變化代表訓練集中特征值的范圍變化。
圖3 訓練集數(shù)據(jù)歸一化前后對比
從圖3(a)可以看出,原始數(shù)據(jù)數(shù)值分布跨度較大,部分數(shù)據(jù)數(shù)值較小,分布在0-5范圍內(nèi),也有部分數(shù)據(jù)數(shù)值較大,分布在100-120范圍內(nèi)。歸一化后圖3(b)中,數(shù)值規(guī)范在[0,1]區(qū)間后,數(shù)據(jù)分布相對均勻,避免了大數(shù)的變化會掩蓋掉小數(shù)的變化的現(xiàn)象,同時也加快了收斂速度。
主成分分析(PCA),是常用的降維方法之一[17]。降維就是將原來的樣本數(shù)據(jù)投影到一個新的空間,通過坐標轉(zhuǎn)換得到一個新的坐標系下,在這個坐標系中不再需要原始空間中那么多的變量,只需找到原來樣本的最大的一個線性無關(guān)組的特征值對應的空間的坐標即可。降維后的主成分分析如圖4所示。
圖4 PCA降維后主成分分析
圖中橫坐標為主成分維數(shù),縱坐標為主成分的貢獻率。從圖中可以看出特征維數(shù)從原來25維降為現(xiàn)在的6維,此時主成分仍然可以達到對原始變量95%的解釋程度,不但大大降低特征矩陣的空間維度,還保留較多的原始數(shù)據(jù)特征。
支持向量機(SVM),作為一種統(tǒng)計學上的分類方法,主要用于解決二分類中涉及到的線性可分與線性不可分的分類問題,對于線性不可分的則需要依靠核函數(shù),核函數(shù)的選擇是SVM的關(guān)鍵,選擇哪種核函數(shù)訓練分類器關(guān)乎到分類結(jié)果的精度。由兩類分類器得到多類分類器,完成對9種指語的分類,本文則采用文獻[18]提到的一對一的方法,相對于一對多的分類方法這種方法用時更少,效率更高。
本文選用徑向基核函數(shù)(radial basis function,RBF),它不僅具有線性核函數(shù)和Sigmoid核函數(shù)的優(yōu)點,而且數(shù)值計算簡單,不會出現(xiàn)溢出之類的計算問題。由SVM原理可知,核函數(shù)參數(shù)g和非負懲罰因子C對SVM分類起著至關(guān)重要作用,因此,本文利用網(wǎng)格搜索結(jié)合交叉驗證的方法對RBF核參數(shù)g和懲罰因子C尋優(yōu)。網(wǎng)格參數(shù)選擇結(jié)果如圖5所示。
圖5 網(wǎng)格參數(shù)選擇結(jié)果
圖5中滿足交叉驗證的最佳分類準確率為100%對應的參數(shù)對(c,g)較多,根據(jù)參數(shù)尋優(yōu)的一般原則,最終選擇了C值最小的那組,對應的最佳參數(shù)C=0.00097656,最佳參數(shù)g=0.00097656。
將利用網(wǎng)格搜索結(jié)合交叉驗證的方法得到最佳RBF核參數(shù)g和懲罰因子C代入到svmtrain()中訓練model,實現(xiàn)對測試集指語的預測分類。
本節(jié)所使用的硬件平臺:DELL筆記本電腦(Inter(R)Core(TM)i5-4460,4.00 GB內(nèi)存)一臺和Leap Motion設備一臺。軟件環(huán)境:Leap_Motion_SDK_Windows_2.3.1驅(qū)動結(jié)合Visual Studio 2013編程環(huán)境安裝在Windows8.1系統(tǒng)下使用C和C++語言進行特征提取,Matlab2014b結(jié)合Libsvm工具箱完成分類。測試條件:實驗者伸出右手手勢保持在Leap Motion視野上方60 mm~300 mm范圍內(nèi),此范圍內(nèi)得到的數(shù)據(jù)值最為理想。
為了驗證本文指語識別方法具有良好的旋轉(zhuǎn)不變性和放縮不變性,本文對4名實驗者(兩男兩女)進行了手勢數(shù)據(jù)采集,將4名實驗者分為兩組,每組男女各1名。其中一組要求數(shù)據(jù)采集過程中手勢姿態(tài)相對設備靜止,作為訓練集。另一組則進行兩輪數(shù)據(jù)采集,第一輪要求采集過程中手勢姿態(tài)相對設備靜止,作為測試集1,第二輪要求采集過程中手勢可以適當旋轉(zhuǎn)或者上下移動,作為測試集2。本文涉及到9種指語類型,為了保障測試樣本充足,要求每人每種指語需要采集200組數(shù)據(jù),從中隨機抽出100組進行實驗。那么,訓練集和測試集的樣本數(shù)量都是1800組,避免了因為測試集樣本數(shù)量過少發(fā)生“數(shù)值偏置”。實驗過程中兩組測試集共用同一組訓練集,使得預測結(jié)果對比性更具說服力。實驗結(jié)果如圖6所示。
圖6 測試集的實際分類和預測分類
圖6中(a)、(b)分別是測試集1和測試集2的實際分類和預測分類的實驗結(jié)果。圖中黑色“o”表示實際測試集分類,灰色“*”表示預測測試集分類。橫坐標是數(shù)據(jù)集組數(shù),每200組是一種指語類型,共計1800組,縱坐標為數(shù)字指語1-9類型標識。從圖(a)中可以看出當手勢姿態(tài)相對靜止時,9種指語全部預測正確,識別準確率為100%;當手勢在采集過程中不斷發(fā)生旋轉(zhuǎn)、上下變換時,圖(b)中僅指語1有一小部分誤測為指語8,指語7數(shù)據(jù)集中前面一部分誤測為指語9,其余指語實際分類與預測分類完全相符,9種指語的平均識別準確率達到95.56%,兩次實驗結(jié)果都驗證了本文方法的可行性。
本文借助Leap Motion完成了對9種靜態(tài)單手指語的識別過程,相對于以往的基于視覺的手語識別,不僅在識別準確度、識別速度有很大提高,而且選用Leap Motion控制器進行實驗,對測試者的要求更低,通過手勢特征的精確選取,使得測試過程中手勢的適當旋轉(zhuǎn)、縮放不會對識別結(jié)果造成太大影響,增強了用戶體驗效果。但是考慮到Leap Motion設備識別范圍只限于60 mm~500 mm,無法定位人臉及上肢動作,使得目前識別只能局限于手部,同時手勢旋轉(zhuǎn)、縮放過程中的遮擋和細節(jié)微小差別識別不明顯等缺陷,致使部分指語9誤識別為指語7,導致識別準確率降低,希望在未來的新一代設備上加以解決。
本文方法主要針對靜態(tài)手語識別,目前識別種類較少,但是本文方法易于手勢庫的拓展。因此,在以后研究中將會加入字母指語,并嘗試利用Leap Motion追蹤手勢的運動軌跡實現(xiàn)動態(tài)指語識別。