李國友,李晨光,王維江,楊夢琪,杭丙鵬
燕山大學工業(yè)計算機控制工程河北省重點實驗室,河北 秦皇島 066004
人體姿態(tài)識別是計算機視覺研究的熱門課題,為人機交互、虛擬現(xiàn)實等領(lǐng)域的發(fā)展提供技術(shù)支持[1]。人體運動動作的時變性以及運動場景的復雜變化性,導致人體姿態(tài)識別的實時性、準確性和魯棒性不理想。因此,如何實時準確地捕捉和識別人體姿態(tài)在計算機視覺領(lǐng)域引起了極高的關(guān)注。
目前,人體姿態(tài)識別研究方法主要有基于統(tǒng)計的算法[2](隱馬爾科夫模型(HMM)、動態(tài)貝葉斯網(wǎng)路(DBN)),基于模板的算法(模型、動態(tài)規(guī)劃、動態(tài)時間規(guī)整[3](DTW)),以及基于語法的算法(有限狀態(tài)機(FSM)、上下文無關(guān)文(CFG))。在針對人體姿態(tài)研究的算法中,基于模板匹配相比其他算法具有更好的識別準確性和魯棒性,但是模型的建立需要大量數(shù)據(jù)且特征計算復雜[4]。李紅波等[5]提出了基于Kinect 骨骼數(shù)據(jù)的靜態(tài)三維手勢識別,通過獲取手部角度特征向量確定待測姿態(tài)模板,待測姿態(tài)與姿態(tài)模板進行最佳姿態(tài)匹配,由于行為時間間隔的持續(xù)性和圖像噪聲影響,每幀圖像無法實時地檢測識別。Zhe 等人[6]提出了零件相似性的實時多人人體姿態(tài)識別,該算法采用自下而上(down-top approach)方法,首先對人體關(guān)鍵點進行檢測,其次建立矢量場推測關(guān)鍵部位并進行連接,最后采用深度學習網(wǎng)絡結(jié)構(gòu)構(gòu)建特征圖像集進行姿態(tài)預測;但該算法存在一定的局限性,只考慮了肢體關(guān)鍵點的位置信息,忽略了旋轉(zhuǎn)、尺度不變性,因而只能在局部區(qū)域進行姿態(tài)預測連接。Pfitscher 等人[7]提出了基于卷積神經(jīng)網(wǎng)絡和FastDTW 的Kinect 手勢控制機器人的移動,對從Kinect 上捕捉獲取圖像的每幀關(guān)節(jié)信息進行提取和處理,建立姿態(tài)動作所有幀派生圖像,采用聯(lián)合訓練和個人訓練進行卷積神經(jīng)網(wǎng)絡(CNN)訓練,最后將移動機器人系統(tǒng)添加到訓練好的系統(tǒng)中,根據(jù)姿態(tài)算法的分類結(jié)果控制機器人的移動。趙海勇等人[8]提出了基于視頻流的運動人體行為識別,采用幀間差分法和改進C-V 模型算法進行運動人體分割,檢測運動目標的輪廓曲線,對分割的輪廓進行加權(quán)運動串分類,構(gòu)建動作串時對不同的姿態(tài)賦予不同的權(quán)重,最后通過對全局運動信息和局部特征信息的異常行為進行識別,該方法可有效地將全局信息和局部特征信息進行互補加權(quán)串聯(lián)融合,特征點更加明顯,識別效果更好。Xu 等人[9]提出了多級深度運動圖的人體動作識別,使用多級幀選擇采樣模型(MFSS),首先將輸入的深度圖像投影到三個正交的笛卡爾平面上,其次采用動態(tài)圖和靜態(tài)圖(MSM)映射方法獲得動態(tài)歷史圖像和靜態(tài)歷史圖像來表示姿態(tài),利用LBP 提取塊的MSM 的特征信息和使用Fisher 內(nèi)核整合塊,最后采用極限學習機(KELM)分類器進行姿態(tài)識別。Vinyals等[10]提出了小樣本學習匹配網(wǎng)絡,設計了匹配網(wǎng)絡(matching networks,新的神經(jīng)體系結(jié)構(gòu)),該網(wǎng)絡將標記的實例映射到已標記的小型支持集,且標記的樣本無需調(diào)整就能適應新的類型,并且損失函數(shù)使預測值和真實值的誤差最小化。現(xiàn)階段人體姿態(tài)識別的研究取得了不錯的成果,但基于模板匹配的研究忽略了姿態(tài)的時序性,對于姿態(tài)的瞬變性仍然存在技術(shù)漏洞。
現(xiàn)階段對人體姿態(tài)識別仍然存在未定義姿態(tài)干擾等技術(shù)缺陷,導致識別的實時性和準確性在一定程度上沒有達到預期效果。因此,本文針對模型特征提取和模型數(shù)據(jù)集訓練,基于單樣本學習對獲取的圖像進行映射訓練,采用關(guān)節(jié)點向量角度和距離特征以及關(guān)節(jié)點成角平面與Kinect 的XOZ平面夾角,保證姿態(tài)特征的不變性,同時在姿態(tài)識別過程中保證特征點的高契合度。該方法對定義好的姿態(tài)模型識別準確率達到98.29%,實時性也有所提高。
KinectV2 獲取深度圖像的原理是采用飛行時間(TOF)技術(shù)[11],傳感器發(fā)射紅外光通過物體反射的時間和相位差來確定深度信息。尤其在骨骼檢測和跟蹤方面有著強大的功能,可捕捉到25 個關(guān)節(jié)點信息,這25 個關(guān)節(jié)點能實時有效地反映出人體任意姿態(tài)[12],25個骨骼關(guān)節(jié)點如圖1 所示。
圖中藍色標注代表姿態(tài)的角度和距離特征的相關(guān)關(guān)節(jié)點,這些關(guān)節(jié)點依次為SpineBase(脊柱基部)、HandLeft(左手)、ElbowLeft(左肘)、ShoulderLeft(左肩)、ShoulderRight(右肩)、ElbowRight(右肘)、HandRight(右手)。姿態(tài)的特征計算基于標注關(guān)節(jié)點的三維坐標實時信息。
KinectV2 動作數(shù)據(jù)識別數(shù)據(jù)集[13]可分為五種類型,每種類型既有相通性又有區(qū)別性,GAMING DATASRTS-G3D 數(shù)據(jù)集定義規(guī)劃了20 個游戲動作;UTKINECT-ACTION3D DATASET 數(shù)據(jù)集基于RGB、深度和骨架節(jié)點位置定義了10 種動作;FLORENCE 3D ACTIONS DATASET 數(shù)據(jù)集定義了9 個動作;MSR ACTION3D 數(shù)據(jù)集通過記錄人體動作序列,按動作的時序性記錄了20 個動作;NTU RGB+D ACTION RECOGNITION DATASET 數(shù)據(jù)集利用RGB 視頻、深度圖序列、3D 骨骼數(shù)據(jù)和紅外視頻捕捉動作,但是該數(shù)據(jù)集依賴于三個KinectV2 攝像機同時捕捉,捕捉難度和數(shù)據(jù)處理分析難度大。動作類型如圖2 所示。
圖1 人體骨骼關(guān)節(jié)點示意圖Fig.1 Schematic diagram of human bone joints
人體姿態(tài)識別的核心內(nèi)容為:首先,進行姿態(tài)捕捉、特征提取并標定,其中特征標定是將姿態(tài)動作標記為一個靜態(tài)標簽的過程,一個靜態(tài)標簽對應一個特定的姿態(tài)。其次,采用單樣本學習模型匹配算法將待識別特征樣本與訓練完成的特征模板庫進行角度和距離特征匹配計算,并根據(jù)設定的閾值范圍進行契合度對比,閾值范圍通過多次實驗確定。最后,顯示識別結(jié)果的過程。圖3 為人體姿態(tài)識別流程圖。
由于骨骼信息的時變性,如何將不穩(wěn)定的骨骼信息進行特征標定并轉(zhuǎn)換得到構(gòu)建模型的特征信息是模型識別的關(guān)鍵。為使獲取的特征信息具有良好的魯棒性,本文提出了角度特征和距離特征。
圖2 動作類型示意圖Fig.2 Schematic diagram of action types
圖3 人體姿態(tài)識別流程圖Fig.3 Flow chart of gesture recognition
3.2.1 角度特征
由于人體運動具有高自由度和非剛性的特點,導致人體骨骼關(guān)節(jié)點運動隨意性很大,沒有特定的姿態(tài)作為匹配對象很難去識別,因此選取骨骼信息作為技術(shù)支撐[14]。在KinectV2 骨骼坐標系下的25 個關(guān)節(jié)點都有獨立的三維坐標信息,若直接采用25 個關(guān)節(jié)點的三維信息構(gòu)建人體姿態(tài),數(shù)據(jù)集維度達到75 維,姿態(tài)表征信息冗余,計算難度非常大。過多的關(guān)節(jié)點表征使識別結(jié)果容易錯亂而達不到預期效果。角度特征的提取是基于骨骼結(jié)構(gòu)的不變性,關(guān)節(jié)點向量之間可以隨機組合成不同的向量角,向量角既可以高度表征姿態(tài)信息,又可以將與姿態(tài)動作無關(guān)的信息進行剔除,減少了數(shù)據(jù)集維度,可有效利用骨骼信息,從而使識別準確性更高。
本文選取角度組合數(shù)量多的上肢進行特征提取,基于關(guān)節(jié)點的三維坐標值構(gòu)建關(guān)節(jié)點向量,然后對關(guān)節(jié)向量組合成的夾角進行計算。本文選取HandLeft-ElbowLeft-ShoulderLeft 構(gòu)建左上肢向量角和ShoulderRight-ElbowRight-HandRight 構(gòu)建右上肢向量角,對兩個關(guān)節(jié)向量角分別設定不同的角度構(gòu)建姿態(tài)特征模板庫。關(guān)節(jié)向量角如圖4 所示,θ1為構(gòu)建的左上肢向量角,θ2為右上肢向量角。
圖5 為構(gòu)建的左上肢向量角示意圖,計算過程如下:
1) 獲取關(guān)節(jié)點三維坐標信息如下:
HandLeft (a1,b1,c1),ElbowLeft (a2,b2,c2),ShoulderLeft (a3,b3,c3);
2) 構(gòu)建關(guān)節(jié)點向量,定義左手肘到左手關(guān)節(jié)向量及左手肘到左肩膀關(guān)節(jié)點向量如下:
圖4 關(guān)節(jié)向量角示意圖Fig.4 Schematic diagram of joint vector angle
3) 計算向量α和β組成的向量夾角θ值:
基于式(1)~式(5)的計算提取角度特征構(gòu)建人體姿態(tài)數(shù)據(jù)集[15],在姿態(tài)匹配識別過程,設定閾值d,當θ計算值滿足取值范圍(θ-d)≤θ≤ (θ+d),即識別成功。
3.2.2 距離特征
角度特征可以有效地描述人體姿態(tài)類型,但在某些情況,采用距離特征能簡單快速地描述出姿態(tài),而且能準確標記出人體關(guān)節(jié)點的相對位置,避開了角度特征的干擾性?;陉P(guān)節(jié)點特征的提取,本文選取了人體骨骼比較穩(wěn)定的軀干和上肢關(guān)節(jié)點,也是識別效果最佳的關(guān)節(jié)點。
本文選取 SpineBase(脊柱基部)作為參考點,Neck(脖頸)作為平面映射點,HandLeft(左手)和HandRight(右手)為距離點進行距離標定,然后計算距離點到參考點三維坐標距離。由于距離特征維度上的差異性和分離性,采用了X方向上的距離作為特征,距離特征如圖6 所示。
特征距離計算過程如下:
1) 獲取關(guān)節(jié)點的三維坐標信息如下:
SpineBase (x1,y1,z1),Neck (x2,y2,z2),HandLeft(x3,y3,z3),HandRight (x4,y4,z4);
2) 計算X方向上的距離,選取脖頸為脊柱基點映射點,X方向上的坐標一致,只需計算手部位置到脖頸的距離。即距離特征x1=x2,計算如下:
左手到脊柱基點的距離:
圖5 左上肢向量角Fig.5 Vector angle of left upper limb
右手到脊柱基點的距離:
3) 設定定值f1和f2,比較(L1>f1) ∪(L2<f2)或(L1<f1) ∪(L2>f2),若滿足設定條件即特征對比成功。本文采用綜合角度特征和距離特征結(jié)合的方法,對人體姿態(tài)進行準確的標定和描述,具有旋轉(zhuǎn)縮放不變性,滿足了不同人、不同角度和不同位置的姿態(tài)識別。
圖6 距離特征示意圖Fig.6 Schematic diagram of distance characteristics
在人體姿態(tài)識別過程中,姿態(tài)特征提取和動作識別尤為重要。本文提出了基于人體姿態(tài)關(guān)節(jié)點角度和距離特征的單樣本學習的模型匹配算法進行動作識別。該算法的核心思想是監(jiān)督學習領(lǐng)域的單樣本學習歸類,對小樣本進行訓練歸類,即訓練一個數(shù)據(jù)端到另一個數(shù)據(jù)端的分類器[16],訓練的樣本庫模型具有高度不變性,模型匹配方法將訓練完成的數(shù)據(jù)庫模板與識別過程的靜態(tài)數(shù)據(jù)做歐氏距離計算,選擇契合度最高的樣本模板所屬類型作為識別結(jié)果。該算法具有計算復雜度低、實時性和準確性高的特點。
單樣本學習作為小樣本學習的特殊情況,每種類別只需提供一個樣本作為參考模板無需依賴海量的樣本數(shù)據(jù)。在單樣本學習的訓練集中設定了多種類型,每種類型對應一個樣本,在訓練過程中,隨機抽取訓練集中的C種類型,每種類型一個(one)樣本(所有的特征點集合)構(gòu)建meta-task[17],作為模型的support set(支持集)[18]輸入;然后從設定的類型數(shù)據(jù)抽取batch(批)樣本作為模板的batch set[19](預測對象),這種訓練模式稱為one-way one-shot 單樣本學習。經(jīng)過多次訓練,可得到包含一個類型所有特征點的meta-task。單樣本學習模型結(jié)構(gòu)如圖7 所示。
對建立好的模型結(jié)構(gòu)進行參數(shù)轉(zhuǎn)換,尋找已訓練數(shù)據(jù)集和將要預測實驗數(shù)據(jù)集的相似度,算法流程如下:
1) 訓練過程:定義一個包含多個樣本數(shù)據(jù)的支持集:
將測試樣本數(shù)據(jù)進行分類進而得到他們各自的標簽,即:
其中:a用來計算度量測試樣本和訓練樣本的契合度,即:
其中:f為模型結(jié)構(gòu)中測試樣本編碼,g為訓練樣本編碼,c為計算測試樣本到訓練樣本的匹配距離[22]。
定義一個支持集到測試數(shù)據(jù)映射為
輸入一個測試數(shù)據(jù),計算測試數(shù)據(jù)到支持集S的距離度量[23]:
將支持集樣本數(shù)據(jù)嵌入模型g反復優(yōu)化,也可通過修改測試樣本嵌入模型f將提取的特征反復優(yōu)化后得到每個姿態(tài)在不同情況下的數(shù)據(jù)集,即訓練過程結(jié)束。
2) 編碼樣本集:對于訓練樣本數(shù)據(jù)集映射到預測數(shù)據(jù)的序列問題,本文選取長短期記憶(LSTM),旨在解決訓練樣本冗余數(shù)據(jù)的干擾、匹配過程中動作間隔和延遲時間的問題[25]。模型結(jié)構(gòu)中g(shù)(θ) 是一個雙向LSTM,作為單輸入(對應支持集S中的每個樣本(x0,x1,x2,???)雙輸出(mi,ni)的典型遞歸神經(jīng)網(wǎng)絡,將xi輸入到LSTM 進行第一個編碼記為g′(xi),然后對于支持集S中的樣本xi進行遞歸編碼:
圖7 單樣本學習模型結(jié)構(gòu)Fig.7 One-shot learning model structure
其中:ML表示長短期記憶函數(shù),mi,ni為雙向編碼支持集。
3) 編碼測試集:考慮到支持集S中樣本xi的隨機性,可能在一定程度上出現(xiàn)序列紊亂現(xiàn)象,因此設定一個嵌入函數(shù)f(θ) :
在迭代的每一步中,嵌入層f′(x) 輸出值不變,保證了測試數(shù)據(jù)的完整性。
本次實驗硬件基于Windows 10 企業(yè)版的64 位操作系統(tǒng),處理器為Intel(R) Core(TM) i5-6400 CPU 主頻2.71 GHz,搭配內(nèi)存為8 GB,顯卡為NVIDIA GeForce GTX 750 Ti,二代Kinect for Windows 體感攝像頭;軟件基于Visual Studio 2017,Kinect SDK2.0,OpenCV3.4.1 視覺庫。
本文通過對人體主要骨骼關(guān)節(jié)點進行特征提取,建立模板庫,采用單樣本學習的模型匹配算法,實現(xiàn)人體姿態(tài)識別?;诮嵌群途嚯x特征定義了7 種姿態(tài),通過姿態(tài)識別結(jié)果驗證本文算法的準確性、實時性和魯棒性。
本次實驗對定義的姿態(tài)進行識別驗證,為了使識別效果更好,經(jīng)過多次實驗校正,角度特征閾值d=20,距離特征高度f1=0.45,f2=0.2時,偏差在設定值范圍之內(nèi),識別效果最佳。角度特征姿態(tài)實驗結(jié)果如圖8 所示,圖中左側(cè)字母代表姿態(tài)標記,圓框代表模板庫樣本姿態(tài),骨骼和彩色圖像代表實時測試姿態(tài),方框顯示動作名稱。
距離特征姿態(tài)識別實驗結(jié)果如圖9 所示,圖片顯示內(nèi)容和角度特征一致,距離特征只需計算左右手關(guān)節(jié)點到脊柱基部的設定距離,即可完成姿態(tài)識別。
圖8 角度特征姿態(tài)識別結(jié)果示意圖Fig.8 Schematic diagram of recognition results of angular features
圖9 距離特征姿態(tài)識別結(jié)果示意圖Fig.9 Schematic diagram of distance feature pose recognition results
本文定義的姿態(tài)動作標記為A(舉起雙手)、B(手臂成一字型在胸前)、C(雙手叉腰)、D(左手向左伸直)、E(右手向右伸直)、F(左手舉起成90°右手自然下垂)、G(右手舉起成90°左手自然下垂)7 種。為驗證本文算法的準確性、實時性和魯棒性,實驗過程中5 人進行不同位置、不同身高體型、不同角度的實驗,姿態(tài)動作10 次/人,實驗結(jié)果如表1 所示。
從表1 中可看出,動作F 和G 識別錯誤率相對較高。通過分析可知原因有兩點:1) 特征點少,存在匹配誤差;2) 測試者沒有做出識別范圍內(nèi)的動作。實驗結(jié)果表明,本文基于角度特征和距離特征的平均識別率高達98.29%,準確率較高。
針對算法的識別率和實時性,選取六種算法作為對比對象,對比算法如下:
1) 算法1:文獻[26]提出的通過提取梯度局部自相關(guān)(GLAC)特征來表征動作相對應的運動歷史圖像(MHI)和靜態(tài)歷史圖像(SHI)聯(lián)合表征動作的算法。
2) 算法2:文獻[7]提出的基于CNN 和FastDTW進行聯(lián)合訓練和個別訓練的方法。
3) 算法3:文獻[21]提出的姿態(tài)圖像生成特征代表特定的身體部位,然后將生成的特征饋送到SVM 中生成姿態(tài)學習,識別預定義姿態(tài)模型的算法。
4) 算法4:文獻[20]提出的基于分割技術(shù)將動態(tài)表示和骨架特征序列匹配的識別方法。
5) 算法5:文獻[24]提出的使用Gabor 小波提取圖像紋理特征和梯度空間邊緣分布(SEDG)計算形狀特征構(gòu)建擴展多分辨特征(EMRF)模型的方法。
6) 算法6:文獻[27]提出的定義一個由三元素組成的姿態(tài)描述符,使用Fisher Vector(FV)對描述符進行編碼的算法。
為證明本文提出算法的優(yōu)異性,本文提出的算法與六種算法的平均識別率和平均識別時間進行對比,對比結(jié)果如表2 所示。
從表2 對比可得出:
表1 七種姿態(tài)識別結(jié)果Table 1 Recognition results of seven gestures
表2 七種算法識別率對比Table 2 Comparison of recognition rates of seven algorithms
1) 算法1 的平均識別率為97.3%,該算法通過聯(lián)合使用運動歷史圖像(MHI)和靜態(tài)歷史圖像(SHI)兩種功能的動作表示方法,首先對提取的動作進行12-正規(guī)化協(xié)作表示分類器(12-CRC),然后對測試動作評估識別。該算法主要提取圖像的紋理特征,將特征傳遞給GLAC 構(gòu)建數(shù)據(jù)集,但該算法容易混淆特征相似的動作,且數(shù)據(jù)集的構(gòu)建需要大量的數(shù)據(jù)作為支撐。
2) 算法2 的平均識別率為90.78%,該算法利用姿態(tài)的所有幀創(chuàng)建圖像,進而卷積神經(jīng)網(wǎng)絡訓練,在匹配控制中運用FastDTW 進行識別。雖采用CNN 對姿態(tài)訓練,有效地解決了訓練過程特征點丟失和冗余,但實時性和準確性并沒達到預期效果。
3) 算法3 的平均識別率逼近本文識別率,為98.14%。該算法采用了主成分分析對姿態(tài)特征評估,將評估的特征饋送到SVM 生成姿態(tài)學習。該算法的高識別率依據(jù)了主要關(guān)節(jié)點的提取和評估,但同一主關(guān)節(jié)點不同姿態(tài)存在干擾性,出現(xiàn)誤識情況。
4) 算法4 的平均識別率為97.80%,該算法將骨架特征序列劃分為關(guān)鍵姿態(tài)和運動段姿態(tài),構(gòu)建高置信度的框架集,最后利用形狀動態(tài)時間規(guī)整(shapeDTW)測量兩個特征序列的運動特征段距離。該算法有效地分割骨架特征,高置信度的框架集提高了識別率,但骨架特征信息具有連續(xù)性和瞬變性,影響運動特征段的提取。
5) 算法5 的平均識別率為96.16%,該算法通過模糊推理模型從視頻序列中選取單個關(guān)鍵圖像,然后計算選取圖像的紋理和形狀特征,構(gòu)建多分辨率的特征描述模型并通過SVM 分類器進行識別的算法。該算法對特征進行分類提取,且構(gòu)建的多分辨率特征模型消弱了場景的干擾,但處理圖像旋轉(zhuǎn)縮放性能力和實時性較差。
6) 算法6 的平均識別率為93.07%,該算法使用3D 骨架信息構(gòu)建三元素姿態(tài)描述符,使用極限學習機(ELM)對編碼的描述符進行訓練。該算法采用時空動作描述符構(gòu)建人體姿態(tài)框架,解決了姿態(tài)識別過程中序列丟幀問題,但編碼描述符的計算復雜,三元素的特征提取一定程度上導致識別時間增加,實時效果減弱。
本文算法的平均識別率相對高了幾個百分點,針對算法1 特征點相似,本文從角度和距離特征進行識別,拓展了姿態(tài)動作集,且對特征相似的姿態(tài)進行標定區(qū)分;有效的特征點提取解決了算法2 數(shù)據(jù)丟失和冗余現(xiàn)象;解決了算法3 中姿態(tài)互擾問題;解決了算法4 關(guān)鍵特征提取問題,且本算法的容錯率更高;針對算法5 受場景影響,本算法排除了場景的干擾且具有旋轉(zhuǎn)縮放不變性,解決了算法6 中對框架模型依賴性高,且本算法特征計算量小。通過對比平均識別時間,本文算法識別時間只有32 ms,識別時間更短。本算法不僅提高了識別率,且實時性更好。
本文基于KinectV2 采集骨骼數(shù)據(jù),通過對獲取骨骼關(guān)節(jié)的三維坐標信息進行角度和距離特征提取,采用單樣本學習的模型匹配方法,解決了特征提取和特征向量構(gòu)建的問題,運用數(shù)學矢量角和余弦值將構(gòu)建的特征向量組合成角度,每個姿態(tài)特征向量角設定一個匹配閾值,匹配過程中測試姿態(tài)特征向量角在閾值范圍之內(nèi)則匹配成功。實驗結(jié)果表明,本文算法提高了人體姿態(tài)識別的抗干擾性、準確性、實時性和魯棒性。