李東東 張立民 鄧向陽 姜 杰
(海軍航空大學 山東 煙臺 264000)
手勢識別應用范圍廣,在軍用和民用均有涉及。在艦載直升機模擬訓練系統中[1],手勢識別方法已經得到了應用,實現著艦指揮員的模擬訓練。在民用方面,由于聾啞人需要通過手勢進行交流[2],通過手勢識別軟件可以較好地知道其表達的意思,實現與正常人的交流。
手勢動作識別與人體姿態動作識別相比,存在以下難點:
1) 手部區域比較小,動作幅度相較于人體姿態動作不明顯,識別起來較為困難。
2) 手部區域靈活度較高,手部動作復雜且部分動作相似度高。
3) 動態手勢動作單個動作持續時間較短,對實時性要求較高。
在實際情況中迫切需要實時性好、操作簡單、識別率高的指揮動態手勢識別系統,因此動態手勢的識別研究具有重要意義。
動態手勢的獲取方式根據獲取數據信息的方法的不同,分為三類:使用數據手套[3]、視覺攝像機[4]和紅外傳感器[5]。
由數據手套使用肌電傳感器來獲取手勢信息的方式,受距離的限制。這種限制有一定的束縛感,體驗感不是很好。
微軟公司推出的Kinect設備以及其配合推出的Kinect for Windows SDK開發工具包能夠獲得人體圖像的深度信息,在人體關節位置識別及跟蹤有著較好的表現,為后續的動作識別提供了有力支撐。文獻[6]運用一種改進的DTW算法使用Kinect獲得的深度信息對動態手勢進行識別。文獻[7]提出利用改進的ViBe算法處理深度圖像進行人體動作檢測取得了較好的效果。
Leap Motion是一個使用紅外攝像頭采集用戶手部數據的傳感器,并能返回手勢相關的參數信息。相比圖像數據,Leap Motion返回的數據更簡潔。童政[8]通過提取單指特征和指間特征對動態手勢進行描述,并使用隱條件分類器模型進行動態手勢識別。
動態手勢相比靜態手勢的識別,需要考慮時間因素,這給動態手勢識別帶來較大的考驗。而上述三種動態手勢數據信息獲取方式,均需要相關配套設備,增加了研究成本,同時不利于攜帶及普及。
現有的動態手勢識別分類器模型有:支持向量機(Support Vector Machine,SVM)模型[9]、動態時間規整(Dynamic Time Warping,DTW)模型[10-11]、隱馬爾可夫模型(Hidden Markov Model,HMM)模型[12-13]、BP(back propagation)神經網絡模型[14],以及長短期記憶網絡(Long Short-Term Memory,LSTM)模型[15]。
DTW算法與HMM算法在序列匹配識別中應用較為廣泛,文獻[16]分別使用DTW與HMM算法在手勢識別中應用測試,實驗表明了DTW算法有更好的表現。
針對常用的動態手勢數據信息獲取均需要相應的設備,本文使用開源姿態識別平臺OpenPose進行人體骨架關鍵點的獲取。OpenPose[17]由CMU Perceptual Computing Lab創造,能夠較準確地識別出人體骨架關鍵點,同時實時性比較好、開源性強。隨著不斷的研究,OpenPose目前可以識別包括身體、手部、面部和足共135個關鍵點,在沒有遮擋及正常光照下,在保證實時性的同時,能夠較準確地識別人體關鍵點的位置。
本文利用OpenPose獲得手部的關鍵點位置,建立手部模型。根據不同手勢相應的手指角度和位置變化,將角度與長度特征進行融合,使用FastDTW算法計算手勢的時間序列與模板中序列的距離,取最短距離所對應的模板,即為匹配的手勢。此方法能夠較好地識別出動態手勢。
OpenPose可以提取到手部21個關鍵點,如圖1所示[18]。

圖1 手部21個關鍵點示意圖
利用OpenPose的開源程序獲取手部關鍵點位置,對關鍵點位置進行連線,如圖2和圖3所示。

圖2 關鍵點識別圖 圖3 手部識別骨架圖
將手部第i個手指的指尖位置(xi,yi)與基點位置的手掌底部(x0,y0)進行連線,發現在手部進行動作變化的時候,指尖位置與基點位置的角度θ及長度d會有所變化,所以可以將手部手勢的圖片轉化為與時間相關的指尖與基點角度的變化及長度的變化,將數據進行簡化降維,如圖4所示。

圖4 手指頂點與手部基點示意圖
利用歐拉距離可以求得手指指尖位置(xi,yi)與基點位置(x0,y0)的距離d為:
(1)
根據坐標關系可以得到指尖位置與基點位置的角度θ(如圖5所示)。

圖5 長度和角度關系圖
(2)
由此可將圖像信息降到關鍵點的位置坐標的角度及長度信息的變化,使所要處理的數據量明顯下降。若將圖片作為輸入量,將每幅大小為m×n圖片的各個像素點的RGB信息作為輸入,共有3mn個參量,則每幅圖片的計算復雜度為O(mn·3),再考慮時間信息t,則復雜度進一步增加至O(mn·3·t)。而簡化之后考慮角度及長度與時間的變化的計算復雜度O(θt)和O(dt),計算量明顯下降,提高了運行速度,減少了計算的時間。
DTW算法是通過相似度來對不同長度的序列進行比較,圖6為DTW算法對兩個不同的序列進行匹配的示意圖。

圖6 兩個序列匹配示意圖
標準的DTW算法原理如下:
假設有兩個序列X={x1,x2,…,xi,…,xm}和Y={y1,y2,…,yj,…,yn},首先構造一個n×m的距離矩陣d(i,j),d(i,j)表示序列的分量xi和yj之間的距離,一般距離使用歐氏距離。
當前位置的距離矩陣d(i,j)與可以到達該點的最小的鄰近點的累積距離之和為累積距離矩陣D(i,j):
D(i,j)=d(i,j)+min{D(i-1,j),D(i,j-
1),D(i-1,j-1)}
(3)
當i=m,j=n時,累積距離矩陣D(m,n)為序列X與Y的路徑距離。
本文使用改進的DTW算法為FastDTW[19],該算法主要通過限制可選擇的區域和對數據進行抽象來對DTW算法進行加速的,主要分為三個步驟:
(1) 粗化。對原始序列進行數據抽象,進行多次迭代用較少的數據點來盡可能地表示原來數據序列曲線。
(2) 投影。在粗化后的序列上使用DTW算法。
(3) 細化。通過局部調整線路路徑,優化粗化后投影的線路路徑。
圖7中,第一幅圖是在較粗粒度空間下使用DTW算法得到的路徑,第二幅圖表示在第一幅圖的基礎上對方格細化,在橫向、豎向、斜向擴展一個粒度,再使用DTW算法進行計算,得到歸整后的路徑。第三幅圖和第四幅圖也是按照此步驟進行迭代計算。

圖7 FastDTW算法流程圖
利用FastDTW與DTW進行比較,FastDTW所搜索的范圍與DTW相比,搜索范圍小,速度更快,時效性更好。
有M個模板角度和長度特征序列以及N個待識別角度和長度特征序列。其中第a(a∈M)個模板角度序列Θa={θ1,θ2,…,θi,…,θm}與第b(b∈N)個待識別角度特征序列Θb={θ1,θ2,…,θj,…,θn}利用FastDTW求取序列之間的路徑距離Dθ(a,b)(m,n)。同理也可以求取到模板長度特征序列DISTa={dist1,dist2,…,disti,…,distm}與待匹配的長度特征序列DISTb={dist1,dist2,…,distj,…,distn}的路徑距離DDIST(a,b)(m,n)。最后得到輸出的角度與長度特征融合的距離為:
Dθd(a,b)(m,n)=Dθ(a,b)(m,n)+DDIST(a,b)(m,n)
(4)
若在M個模板手勢中找到模板手勢A使得Dθd(A,b)(m,n)最小,則模板手勢A與待測手勢b相匹配。
根據實際經驗通常一個手勢的時間約為1 s,將30幀作為一個模板手勢的長度,將30幀視頻放入OpenPose中得到手部關鍵點的位置坐標信息,將此坐標利用上文的方法將位置坐標轉化為角度信息θ及長度信息d的序列。所得到的角度序列與長度序列由于OpenPose的關鍵點識別會存在一些偏差,會產生一些奇異點,需要先設置閾值將這些奇異點去掉。設該點為xi,最小閾值為ε1,最大閾值為ε2,若ε1 由圖8中可以看出,添加閾值后去掉了奇異點,使得模板更加具有通用性。 圖8 添加閾值的曲線對比圖 之后將需要匹配的動態手勢與模板手勢利用FastDTW算法計算兩者的相似度,根據相似度來選擇相近的手勢。總體的流程如圖9所示。 圖9 動態手勢識別流程 本實驗基于Tensorflow,使用GPU1070進行加速。為驗證算法的有效性,本文參照美國艦載航空兵標準指令[20],定義了4種動態手勢,分別是“松開剎車”“做最后準備”“準備離艦”“左轉彎”,如圖10所示,并給每個手勢構建了五個特征模板。 圖10 四種手勢示意圖 將每個手勢的圖片使用OpenPose提取到手部關鍵點的坐標利用式(1)、式(2)進行處理得到四個手勢五個手指的角度變化圖及長度變化如圖11、圖12所示。 手勢模板中每個模板含有300幀手勢圖,通過OpenPose提取關鍵點進行預處理后,可得到手勢的角度變化序列及長度變化的序列。 本文有三名測試者參與實驗,每人進行100次手勢動作,得到表1實驗結果。 表1 四種動態手勢識別結果 由表1所示,在每個手勢300次的手部動作檢測中,識別正確次數較多,識別準確率較高。四個手勢中“做最后準備”動作識別率最高,達到了99.33%。因為此動作與其他動作區分度較大,識別較為精確。“松開剎車”和“左轉彎”手勢動作識別準確率也較高,為91.67%和96.33%。但是在“準備離艦”動作識別中,識別容易出現錯誤,準確率為90%,與其他三個動作相比較低,因為實驗者的動作習慣不同,若手勢動作幅度過小,容易識別成“左轉彎”的手勢動作。 在計算時間方面,FastDTW和DTW的速度在序列長度較短時,區別不是很明顯,但是隨著序列X、Y變長,計算時間逐漸變長,而FastDTW的時間明顯低于DTW的計算時間,如圖13所示。 圖13 FastDTW與DTW計算時間對比圖 本文選用的模板序列長度為30幀,所以角度序列和長度序列為30,FastDTW的計算時間0.015 619 s,DTW的計算時間為0.015 622 s,對于本實驗的結果沒有太大區別。但是在較復雜手勢中,FastDTW能大大縮短計算時間,實現手勢識別的實時性,為后續應用提供了可實施性。 本文利用OpenPose提取了手部的關鍵點位置,將圖片信息轉化為坐標信息,進一步提出了將坐標信息轉為角度變化序列及長度變化序列,減少了計算量,提高了實時性,且在識別準確率方面,識別動態手勢較為準確,同時對于設備要求不高,可在人機交互、手勢識別方面等多個領域進行應用。但對于區分度不高的動態手勢識別容易出現錯誤,且因為每個實驗者的習慣不同,在做手勢時,不同人對于特定含義動作的理解不同,所做的動作不盡相同,在這些方面有待繼續研究。

4 實驗與結果分析





5 結 語