張成權,唐家康,汪志峰,
(1.安慶師范大學計算機與信息學院,安徽安慶246133;2.智能感知與計算安徽省高等學校重點實驗室,安徽安慶246133)
隨著計算機人機交互領域的不斷發展,人體動作識別技術在智能監控、舞蹈教學、醫療康復等方面的應用越來越廣泛,為人們的日常生活提供了極大的便利。一般在不同的應用場景中,使用不同的動作捕捉設備,關于人體動作捕捉技術[1]方面,主要有光學式和可穿戴式兩種。微軟發布的Kinect[2]3D體感攝影機,不僅可以采集人體的彩色圖像和深度信息,還能夠獲得人體骨骼數據信息。Luvizon等[3]提出了一種基于骨骼序列的人體動作識別框架,從子關節點中提取時空局部特征,通過VLAD算法和池化,然后利用LMNN的方法,將多個特征向量組合在一起,使用k-NN分類器進行分類。Gaglio等[4]用k均值聚類、支持向量機(SVM)和隱馬爾可夫模型(HMM)3種不同的機器學習方法對人體相鄰關節點估計,然后對不同的姿勢分類。Wang等[5]在小訓練集上基于深度圖像,通過加權分層深度運動圖和三通道深度卷積神經網絡的方法識別人體動作。Wang等[6]提取隨機占用模式(ROP)特征的半局部特征,利用稀疏編碼方法對這些特征進行魯棒編碼。Wang等[7]用一種新的動作集合模型來表征人類行為,該模型代表人類關節子集的相互作用。Oreifej等[8]使用直方圖來描述深度序列,該直方圖捕獲時間、深度和空間坐標的4D空間中的表面法線方向的分布。Vemulapalli等[9]提出了一種新的骨架來表示3D空間中的旋轉和平移,模擬各種身體部位之間的3D幾何關系的方法。Wang等[10]通過模擬人體姿勢的時空結構來處理視頻中的動作識別,得到了k最佳估計的輸出,并加入了額外的分割線索和時間約束來選擇“最佳”估計,然后將估計的關節分為5個身體部分,并應用數據挖掘技術獲得人類行為時空結構的表示。Barnachon等[11]提出了一種使用運動捕捉(MoCap)數據識別流動作框架,實現對正在進行的活動早期識別。Kapsour等[12]利用關節方位角和這些角度在不同時間尺度上的前向差異來表示運動捕捉序列的方法。Rahmani等[13]直接對點云進行處理,并提出了一種對噪聲、動作速度和視點變化更具魯棒性的動作識別新技術,該技術包括一個新的描述符和關鍵點檢測算法。Chen等[14]提出了一種雙層框架的三維動作識別方法,以解決高類內方差、運動速度變異性和高計算代價的動作識別問題。本文是在人體結構分層的基礎上,從兩個不同的空間維度來提取人體運動特征,分別利用三維空間里的關節向量和角速度特征以及二維空間里的關節角和加速度特征,來區分人的整體和局部運動情況,從而達到更好的識別效果。
在Kinect for Windows SDK的支持下,通過其骨骼追蹤技術,能夠對Kinect視野范圍內移動的行人進行骨骼位置的追蹤,獲得人體的20 個骨骼關節點數據信息,每個關節點用(x,y,z)三維坐標來表示。為了便于對人體骨骼的描述,按照Kinect骨骼數據采集的順序,把人體骨骼20個關節點從A到T進行編號,具體如圖1所示。
本文運用基于分層特征提取[15]的方法,根據人體結構學的知識,可以把人體分為5大部分。第1部分包括頭部(T)、頸部(C)、脊柱(D)和臀部(G),第2部分包括左手(L)、左腕(J)、左肘(H)和左肩(A),第3部分包括右手(M)、右腕(K)、右肘(I)和右肩(B),第4部分包括左腳(R)、左踝(P)、左膝(N)和左臀(E),第5部分包括右腳(S)、右踝(Q)、右膝(O)和右臀(F)。軀干是支撐人體的主要部分,人體某些腰部的運動特征信息來自于這部分關節點,手部和腳部的運動特征信息來自于四肢關節點。通過對人體結構的劃分,能夠用這5大部分之間的組合來表示人體的一些基本動作,例如只有雙臂的動作,就是第二部分和第三部分的組合。在分類的方法上,本文采取分層策略。第一層:先把上述5大部分具有相同組合模式的動作歸為一類,即動作的粗分類。第二層:對相同組合模式的動作再分類,具體判斷是哪種動作,即動作的細分類。
在三維空間里,不同的人體動作如果只從某個空間視角觀察時,會存在局部遮擋的情況,導致對某些運動特征的掩蓋,從而不能準確地表達該行為。于是利用人體三視圖的思想,把三維空間里的特征投影到二維平面上,從不同的平面視角去尋找運動特征,增加了類內差異性,彌補了僅考慮三維空間里運動特征的缺陷。關節之間角度的變化體現了平移和旋轉的運動本質,因此用角度信息來描述不同的運動姿態。把三維空間人體關節角投影到二維平面上,用二維平面里的關節角信息作為粗分類的運動特征,分別從3個不同的視角方向進行平面投影,形成3個不同平面里的關節角:主視圖關節角,人體從前向后方向主平面內的關節角投影;側視圖關節角,人體從左向右方向側平面內的關節角投影;俯視圖關節角,人體從上向下方向下平面內的關節角投影。選取的人體骨骼關節角如圖2所示。
在Kinect的人體骨骼框架中,每個關節點都對應一個骨骼數據坐標,每兩個關節點連接起來構成一個關節向量,通過余弦相似度公式可以計算出人體骨骼關節角的大小:


圖1 20個關節點的編號

圖2 人體的17個關節角
式中:θ是每幀骨骼數據t時刻的關節角大小,U(t)和V(t)是t時刻的兩個關節向量。由于采集的Kinect骨骼數據是三維坐標( x,y,z ),對三維骨骼數據降維,使之變為二維投影平面XOY上的骨骼數據,再用二維坐標去計算關節角的大小。比如計算左腕,在t時刻投影到一個二維平面內關節角的大小,左手在t時刻的關節點坐標是( x1( t ),y1( t )),左肘在t 時刻的關節點坐標是( x2( t ),y2( t )),左腕在t 時刻的關節點坐標是( x3( t ),y3( t )),那么

{2}表示在二維空間內,根據t 時刻的關節點坐標,算出二維平面內t 時刻的內關節向量t)和(t),再求出這兩個關節向量之間的夾角,最后得到左腕在t時刻的一個二維平面內關節角的大小,圖2中17個關節角在3個二維平面內的投影組成了關節角特征向量,把它作為對人體動作第一層粗分類的特征。區分具有相同組合模式的人體動作時,從運動學理論入手來進行特征提取。一個完整的人體動作可以分解為主動作和輔動作,主動作反映了運動方式的全局狀態,輔動作反映了運動方式的局部狀態,只有主輔動作特征相結合,才能更加準確地表達這個動作。對于前面劃分的人體5大部分,分別構建出它們在三維空間里內的關節向量:

{3}表示在三維空間內,t表示某一時刻,把手腳末端點容易產生漂移的關節點暫時舍去,最終5部分所有時刻在三維空間內的肢體向量分別用GT{3}、AJ{3}、BK{3}、EP{3}、來表示。依據對人體動作表達貢獻度的不同,從每部分選取兩個關節角,稱之為主動作關節角。軀干部分選擇角θ4和角θ9,左臂部分選擇角θ3和角θ2,右臂部分選擇角θ6和角θ7,左腿部分選擇角θ12和角θ13,右腿部分選擇角θ15和角θ16,根據(1)式求出關節角在三維空間中的大小。前后時刻關節角的變化形成了角速度ω(t)=θ(t+1)-θ(t)。關節向量和主動作關節角的角速度作為主動作的特征,代表了人體四肢和軀干整體的運動情況。人體四肢和軀干的彎曲通過關節點之間距離的變化來體現,把人體從左視圖方向投影到YOZ側平面內,5部分骨骼關節點之間的距離為

式中:d(y,z)表示側平面內兩個關節間的歐式距離,t 表示某一時刻。人體這5 部分首末關節點間的距離,反映了四肢和軀干在運動中彎曲的狀況。前后時刻距離的變化形成了速度v,加速度能描述人體運動變化快慢:

把側平面內5部分關節間的距離和運動的加速度作為輔動作的特征,5部分的加速度分別為?1,?2,?3,?4,?5。主動作和輔動作特征共同組成人體動作第二層細分類的特征。考慮到每個人的身高臂長等不盡相同,即使兩個人做出一樣的動作姿勢,也會產生一定的誤差,為了消除個體的差異性,分別把(2)式和(3)式中各項除以肩寬dAB和YOZ側平面內關節間歐式距離的均值dˉ來標準化處理,即:


對于分類器的選擇,是從分類器特性和運動特征角度出發的。支持向量機的本質為特征空間內間隔最大的線性分類器,學習策略是將問題最終轉化為一個凸二次規劃問題的求解,并使得兩類之間的間隔最大化。SVM憑借其出色的學習性能,成功地運用于模式識別,特別是運動模式分類問題。隱馬爾可夫模型的基本思想是用雙重隨機過程來描述一個模式,一個是Markov鏈,它描述的是狀態轉移,另一個是隨機過程,描述狀態和觀測值之間的對應關系。人體動作數據在時間上是連續的序列,適合用HMM來處理。
由于人體結構和肢體動作的復雜性,很多相似的人體動作之間難以區分,所以在分類器的設計方面,采用雙層不同的分類器。第一層把相同部位參與的動作分成一大類,采用支持向量機,把動作粗分類為7大類。即在MSR Action 3D[16]數據集中,單臂的動作共有11個作為第1大類,雙臂的動作共有3個作為第2大類,單腿的動作共有2個作為第3大類,其他動作有4個,每個各作為一大類。第二層對第一類到第三類動作再分類,選擇隱馬爾可夫模型,細分類出相似度較大的各種行為。完成了對MSR Action 3D數據集中的20個人體動作的分類,具體如圖3所示。
本文實驗軟硬件條件:Intel(R)Core(TM)i5-4210M CPU@2.60GHz,8 GB RAM,64位Windows操作系統,MATLAB R2017b。使用MSR Action 3D公開數據集,里面包含20種行為類別,一共567個樣本。該數據集的20種行為類別分別是高揮手、水平揮手、捶打、手抓、沖拳、高拋、畫叉、畫勾、畫圓、拍手、雙揮手、側拳、彎腰、向前踢、側踢、慢跑、網球揮拍、網球發球、高爾夫揮桿、撿起扔。標記為a1~a20,如圖4所示。

圖3 雙層分類器模型
去除數據缺失的20個樣本,選取其中的547個樣本。交叉驗證是一種統計學上將數據樣本切割分成較小子集的一種方法,用它的子集作為訓練集和測試集來評估數據集的泛化能力。十折交叉驗證是將數據集分成10份,輪流用9份訓練和1份驗證,把10次結果的均值作為對精度的估計。本文采用10次10折交叉驗證,最后求其均值。把這20種動作粗分類成7大類別。圖5是粗分類的混淆矩陣,水平坐標軸x代表識別結果,垂直坐標軸y代表動作的真實標簽。從混淆矩陣可以看出,對于7種類別行為的粗分類基本都是正確的。第1類由于都是手部比較相似的動作,側拳動作里也含有單手側拳和雙手側拳兩種行為,所以存在一定的識別誤差。

圖5 7種類別行為粗分類的混淆矩陣
圖6顯示了細分類的混淆矩陣,第一層分類的結果會直接影響第二層的識別率,總體來看,手抓,網球發球和高爾夫揮桿3種動作分類識別率略低,其他動作分類均正確。表1顯示了一些使用交叉驗證的研究方法與本文研究方法的對比,通過在MSR Action 3D數據集上的識別率可以發現,本文的最高識別率第二,最低和平均識別率最高,比其他方法具有更好的穩定性。

圖6 20種動作細分類的混淆矩陣

表1 各種方法用MSR Action 3D數據集的識別率對比

續表1
本文提出了一種基于Kinect骨骼數據二維空間特征融合的人體動作識別方法。該方法運用人體結構學和空間幾何學的思維來對人體結構劃分和特征提取,通過分層把兩個空間維度的主動作和輔動作特征結合在一起,運用支持向量機和隱馬爾科夫模型的機器學習方法進行分類。實驗結果和方法對比表明,本文方法能有效地識別不同的人體動作姿勢,識別準確率較高,魯棒性較強。