楊和穩 楊萍萍 郭海晨
1(南京信息職業技術學院 江蘇 南京 210000)2(南京大學工程管理學院 江蘇 南京 210000)
隨著科學技術的不斷進步,人類和計算機的交互方式進入了一個新的發展階段,越來越多的人開始關注研究人機交互技術,而人機交互方式也成為近些年研究者的一個重要的研究課題。作為人機交互的最新研究領域,手勢作為更加便捷(相較于身體姿勢、眼神、視線)、表達力更加豐富的交互方式,越來越多的學者開始著重于手勢識別的研究。
手勢具有簡單、直觀、易于理解和操作等特點,已被廣泛應用于機器人控制、虛擬鍵盤、體感游戲、虛擬現實醫療等諸多領域,科技的進步使得人機交互設備也在不斷更新,并且識別精度會隨著設備的更新而不斷提高。文獻[1]利用關節點的旋轉原理,在關節點處貼上熒光標簽,然后結合計算機來研究關節點的旋轉特性對人體動作進行分析觀察,大量的實驗數據表明人體骨骼節點的運動特性對人體的動作行為有很好的預測作用。文獻[2]研發了一個可以識別手勢的工具,用來訓練以及識別手勢,同時也支持DTW和HMM識別算法,只需將手勢進行封裝,將手勢模板代碼嵌入到應用程序中,從而可以減少管理的復雜性姿態數據和算法。文獻[3]采用基于激光技術的深度相機獲取深度圖像,并對深度圖像進行手部的三維建模從而實現對人體手勢跟蹤識別的功能。傳統的數據采集裝備雖然能在一定程度上采集人體的動作特征點,但是裝備復雜、操作不便。美國NaturalPoint公司推出的OptiTrack運動捕捉系統,通過攝像機跟蹤標記點完成人體動作捕捉。隨后,Leap公司研發了Leap Motion非接觸式體感設備,依照三角測量法,基于雙目攝像頭的三維圖像識別技術,可以定位出目標手勢的準確位置。但由于光學式和非接觸式動作識別易受外部環境的干擾,如遮擋、光線等問題的制約。因此,需要一個便捷的體感設備能夠幫助我們完成對人體特征的獲取以及識別,通過更方便的人機交互方式完成研究。
針對以上問題,微軟經過多年研究于2015年推Kinect體感設備[4],Kinect綜合了計算機視覺處理算法和空間定位性能,可以利用高分辨率對空間中的細微變動進行識別。且不受光照、背景等因素的影響,從而提高了手勢軌跡別的穩定性和魯棒性,最后實現手勢動作識別。
本文通過對虛擬現實技術以及人機交互技術進行充分研究,基于Kinect進行人體手勢動作識別。利用Kinect捕獲到的人體骨骼關節點坐標,結合動態時間規整算法進行動作識別。并在Unity 3D進行虛擬模型同步演示,將定義的手勢應用到仿真系統里,代替傳統的鍵盤交互形式。該項技術的創新能夠更好地探討虛擬現實交互系統里新的交互通道存在的應用價值。
Kinect是微軟公司自主研發的一款體感外設產品,2010年正式推出,研發的初衷是為了讓玩家用戶擁有全新的人機交互體驗[5]。Kinect由彩色(RGB)攝像頭、深度(DEPTH)攝像頭、紅外攝像頭以及麥克風等部分組成,如圖1所示。

圖1 Kinect
本次實驗采用的二代Kinect利用Time of Flight[6],也就是根據光脈沖的來回時間去捕獲目標物體的深度圖像。Kinect最大的優勢是其可以獲得目標人物的骨骼圖像從而進行人體行為動作的研究。而Kinect傳感器將深度圖像轉換成骨骼圖像的步驟主要有三部分:將人體輪廓從背景圖像抽離出來、對人體關鍵部位的定位、骨骼節點的標識[7]。
首先Kinect會對人體深度圖像的像素點逐點掃描,將屬于人體部位的像素點從深度圖像中抽離出來;接著Kinect通過特征值將人體各個部位進行分類,比如軀干、頭部、手臂等;最后Kinect根據機器學習的方法確定骨骼關節點。Kinect2.0可以識別人體的25個骨骼關節點,包含肘、踝、腳、手指、肩等關節,相比一代Kinect,識別的骨骼更多,以達到全身體感操作,Kinect體系架構如圖2所示。而本文對動作的分析則是基于人體的骨骼信息來進行研究的。

圖2 Kinect骨骼追蹤的體系架構
對人體動作的識別從本質上來看是指對提取的動作特征進行分析,選取合適的識別算法對動作特征進行分析研究,從而實現動作識別。本文對動作特征提取的研究的出發點是基于人體骨骼關節點信息,Kinect會捕獲25個關節點數據,我們需要對這25個關節點的數據做進一步詳細的分析才能提取出有用的姿態特征。如果直接利用25個骨骼節點的空間坐標數據作為人體的運動特征,會存在兩個方面的缺點:一是25個關節點的維度較高,高緯度的訓練樣本會使得本次系統的計算量和復雜度增加,導致訓練效率極其低下;二是不同的人的骨骼關節點空間坐標信息不同,需要找到統一的動作特征才能對人體動作進行識別。
在日常生活中見到的手臂彎曲、揮手、跳躍等行為動作其實是由不同的關節的旋轉帶動的,比如,跳躍時,胯關節帶動大腿運動,而大腿則通過膝關節帶動小腿運動。圖3展示了人體四肢運動時,各個關節角度度數。

圖3 人體關節角度圖
從圖中可以看出,運動特征其實可以對應于各個關節點旋轉的角度。反觀不同的人的生理結構,關節之間的變化可以不受不同人體身體結構差異的影響,所以可以推測,關節點的旋轉特性決定人體四肢在空間中的位置,而旋轉特性其實可以對應關節點的角度。在人體運動過程中,關節之間的變化不受不同人體身體結構差異的影響。因此本文接下來研究在運動過程中骨骼關節點角度的變化情況。
本次實驗是針對人體手勢動作進行研究識別的,為避免不同人體手臂長度或寬度對動作識別的干擾,除了跟蹤某些關節點在空間唯一的軌跡和線速度之外,還要對上肢關節結構向量間的夾角進行研究。綜合考慮簡單動作和復雜動作,本文選取的動作特征參數包括:雙手手臂關節角度、手臂相對于肩部、頭部變化的距離和角度。因此本文只針對上半身的幾個關鍵骨骼點進行分析,著重研究肩關節、肘關節、頭部、腕關節。圖4解釋了手勢動作關節點的計算原理。

圖4 夾角示意圖

(1)
β=90°-αj
(2)
具體操作是:把人體的運動看作是在x、y軸所在平面內的二維運動,根據式(1)計算出每個關節點與y軸的夾角,而手肘關節的角度β由式(2)可以計算出。
將以上獲得的夾角組成一組關節角度向量A={α1,α2,α3,β1,β2}T,通過連續地捕捉每一幀的關節角度,就可以獲得關節角度關于時間變化的函數,它可以充分地描述人體手部動作的運動特征。圖5顯示實驗者揮動左手時左肘關節角度關于時間變化的曲線圖。

圖5 左肘關節角度的變化圖
從圖中可以看出,在揮手這個動作過程當中,左肘關節角度是隨時間的變化而不斷變化的,這條基于時間序列的關節變化曲線圖可以反映出揮手這個動作的運動特性?;诖?,本文采用基于時間變化的骨骼關節點的變化特性作為人體運動的動態特征。
通過實驗對比分析可以發現,不同的測試者在做同一個揮手動作時,他們的肘關節角度曲線圖在波形和幅值雖然有一定的偏差,但是整體的波形很相似,即可以將關節角度變化曲線圖的相似度作為分類器的切入點。歐式距離是最常用的計算不同向量之間的距離,但是歐式距離是基于相同維度的向量進行計算的,而實際中關節角度變化曲線圖的維度不同,這就要求我們需要借助動態規劃的思想來解決。動態時間規整算法DTW(Dynamic Time Wraping)[8]主要是通過時間規整的原理對兩條不一樣的時間序列進行相似度的匹配,尋找這兩條曲線之間距離最小的相似度路徑。時間規整是指將待測信號的長度進行壓縮或拉長,從而與標準信號的模板里的長度一樣。
假設有兩個動作序列,長度分別為m和n,即:
T={t1,t2,…,tm}
G={g1,g2,…,gn}
為了得出這兩條時間序列的相似度,我們引用一個m=n的矩陣M,該矩陣里的每一個元素(i,j)表示參考序列ti和測試序列gj兩個點之間的距離d(ti,gj)[9]:
d(ti,gj)=(ti-gj)2
(3)
歐式距離是計算機領域中最常見的計算距離的方法,如式(3)所示。簡而言之,該算法就是尋找出一條最優路徑,且這條路徑包含了這兩個動作序列之間相距最短的點,即規整路徑(warping path),如圖6所示。

圖6 動態時間規整路徑
規整路徑W可表示為:
W={w1,w2,…,wT}max(m,n)≤T≤m+n+1
另外,規整路徑不可以任意選擇,它需要滿足3個約束條件:
(1) 邊界性:規整路徑W的起點必須是左下角,即w1=(1,1),路徑的終點是右上角,即wT=(m,n)。
(2) 連續性:規整路徑W上的點必需與相鄰的幾個點對齊,也就是說當前點的下一個對應點只能是相鄰的點,即wT=(t,g),wT′=(t′,g′),t-t′≤1,g-g′≤1。
(3) 單調性:規整路徑W上的點在時間軸上必須是單調遞增的,即wT=(t,g),wT′=(t′,g′),那么t-t′≥0,g-g′≥0。
為了對兩個時間序列進行匹配,這里我們定義累積路徑值為γ(i,j),對T和G這兩個時間序列從起點(1,1)點進行計算匹配,每經過一個點,累計點ti與點gj的之間距離再加上其四周與這個點距離最小的那個點之間的距離,如式(4)所示。當匹配到終點(m,n)的時候,最后得到的距離值代表了這兩個時間序列的相似度。
(4)
直到匹配到終點(m,n)為止,最終所獲得的路徑累積值就是兩天時間序列T和G是否匹配的依據。累計距離和相似度成反比,如果累計距離γ(i,j)越小,這兩個動作之間的相似度就越高,反之亦然。
對人體手勢動作進行分析研究時,首先創建手勢動作模板庫,然后將測試動作與模板庫中的動作進行相似度的匹配,根據DTW識別算法計算兩個模板之間的最小匹配距離。找出匹配距離值最小的那個模板即為識別的動作模板。
前面已經完成了對人體動作特征的提取和識別算法的選取,下面通過實驗來驗證本文方法的有效性。
本文定義了基于交互的5種簡單的手勢動作,分別為上下舉、左右揮、停止等,如表1所示。在人機交互中,可以通過這幾種手勢命令與計算機進行交互。

表1 自定義的交互手勢集
手勢1到5選擇5個實驗者進行50次實驗,則每種手勢有250組數據。本次實驗由同一個人對這幾種動作進行訓練,并建立動作模板庫。訓練的模板長度為90幀,Kinect記錄的數據信息包括關節角度變化,上肢關節點的坐標信息。這里以手臂上舉,手指越過頭頂為例進行分析。通過Kinect捕獲其骨骼關節角度的變化作為測試序列,與標準的序列模板進行對比來檢測系統識別效果。關節角度變化如圖7所示,其中,Sample作為標準模板,Test sample 作為測試序列模板。

圖7 測試數據與模板數據對比
Kinect對手勢識別的結果是通過Visual Gesture Builder里的波形來表示,波形出現的范圍越廣,說明識別的相似度就越高。如果沒有出現波形,則表明該動作沒有被我們識別出來。識別的效果如圖8所示。左邊為人物的動作,右邊為識別效果,波形代表相似程度,波峰越高代表與模板的匹配度越高,成功識別的判定標準為:波峰超過所在窗口的一般即認為成果識別。

圖8 識別效果圖
實驗結果如表2所示。

表2 識別結果
從表中可以看出,基于上肢關節角度變化的動態時間規整算法的識別率普遍超過90%。盡管對動作識別的精度不高,但是對于一些常見的動作已經可以實現對動作的識別。
為檢驗光照環境變化對該實驗魯棒性的影響,做出另一組實驗,在不同光照環境下每個手勢由上一組實驗者進行相同的實驗,表3為實驗者在光線充足與不充足的環境下的對比結果。

表3 不同光照環境下每個手勢的識別率
從對比結果可以看出,相同手勢在不同光線下的識別率差距甚微,利用DTW識別算法以及Kinect傳感器對光照變化的干擾具有較強的魯棒性。
本系統中的人機交互功能主要是使用人體手勢動作控制虛擬模型的運動,而基于Kinect的虛擬仿真平臺則是通過Unity 3D來實現對虛擬物體的三維展示功能。首先利用Kinect體感器獲取現實場景中的深度數據,并獲取人體骨骼數據,根據骨骼跟蹤生成的關節點信息來識別當前用戶的姿勢,并通過約定的姿勢來達到對展示的三維模型進行操作的目的。
Unity 3D是由Unity technologies開發的一款專業游戲引擎,它可以讓用戶輕松地創建各種三維游戲、實時動畫、場景可視化等互動性較高的項目。本文將在Unity 3D中對虛擬物體的運動進行同步演示設計。如圖9所示,在Unity 3D里創建一個虛擬小方塊。小方塊的每一面貼上不同的圖紙,每個手勢對應不同的界面。當手上舉時,小方塊就向上翻轉一面。向左揮時,小方塊向左旋轉一面。當握拳時,小方塊恢復成初始界面。

圖9 虛擬模型
虛擬物體模型是按照Kinect提供的骨骼節點設計的,這里只保留上肢節點。因為人體的運動是一個連續性的動態過程,所以需要對骨骼關節點的坐標位置進行實時地更新,這里我們建立一個RefereshBodyObject()函數用來實時地更新骨骼節點的坐標數據,并將這些數據復制給虛擬模型,從而使得虛擬模型可以同步地跟隨用戶運動。
最終的實驗結果如圖10所示,顯示了用戶上舉、下舉、左揮、右揮、停止動作時虛擬模型與其同步運動的情況。

圖10 同步運動結果
本文利用搭建的Kinect的體感識別平臺,通過Kinect捕獲被測對象骨骼信息空間坐標數據,提出基于特征提取的模板匹配方法,分析關節角度與動作行為研究的相似性,提出將骨骼關節點的角度變化作為運動特征。并借助于動態規劃的思想來解決,即利用模 板匹配的方法來進行人體手勢動作的跟蹤和識別。實 驗結果和對比結果表明,該方法成功實現了對人體手 勢特征的識別,并獲得良好的姿勢識別率、魯棒性較 強。同時將這一技術在虛擬現實中同步演示,獲得良 好的演示效果,交互方式更直觀、便捷。在未來的研究 中,可以利用該方法來完成對真實物體模型進行觀測 的目的。
與此同時,本方法也存在一定的不足之處,對于手勢識別,只是進行了主要動作的識別,應用相對有限,可以將動作識別的工作進一步深入,這些工作以后需要改進與完善。