趙雅,李建軍
(內(nèi)蒙古科技大學(xué)信息工程學(xué)院,內(nèi)蒙古包頭 014010)
手勢識(shí)別是計(jì)算機(jī)視覺、虛擬現(xiàn)實(shí)、人機(jī)交互和手語翻譯的一種重要的交互模式[1]。手勢識(shí)別可以分為接觸式[2]手勢識(shí)別和基于視覺的手勢識(shí)別[3]。接觸性手勢識(shí)別因?yàn)槠湓O(shè)備較復(fù)雜、價(jià)格較昂貴,限制了手勢的自然表達(dá),不利于高效的手勢交互應(yīng)用。而基于視覺的手勢識(shí)別無需復(fù)雜且價(jià)格高昂的設(shè)備,操作簡便,更符合人機(jī)交互的發(fā)展趨勢,真正實(shí)現(xiàn)了從復(fù)雜、低效到簡單、高效的轉(zhuǎn)變,因而具有廣闊的應(yīng)用前景。
手勢識(shí)別根據(jù)是否具有時(shí)序性,可分為靜態(tài)手勢識(shí)別和動(dòng)態(tài)手勢識(shí)別。靜態(tài)手勢識(shí)別指單幀靜止的手勢圖像。文芳等人[4]采用融合深度信息和彩色信息的手勢分割算法分割手勢區(qū)域,并提取靜態(tài)手勢輪廓的圓形度、凸包點(diǎn)及凸缺陷點(diǎn)等特征向量,采用SVM 進(jìn)行分類。Prachi Sharma 等人[5]在深度圖像中分割手部區(qū)域,提取幾何形狀特征,并計(jì)算舉起手指數(shù)目和手掌中心距離作為特征向量,采用高斯SVM 核函數(shù)分類器進(jìn)行識(shí)別分類。
相比靜態(tài)手勢識(shí)別,動(dòng)態(tài)手勢識(shí)別更加復(fù)雜,不僅需要關(guān)注手部手形的變化,還要關(guān)注手指在時(shí)間、空間中的運(yùn)動(dòng)趨勢。隨著Microsoft Kinect 等深度相機(jī)的廣泛使用,人們很容易獲得精準(zhǔn)的骨架數(shù)據(jù)。手部骨胳關(guān)節(jié)點(diǎn)的變化趨勢通??梢院芎玫胤从巢煌瑒?dòng)態(tài)手勢的特征。LiuXing 等人[6]提出采用幾何代數(shù)的方法從骨骼序列中提取形狀和運(yùn)動(dòng)特征,構(gòu)造時(shí)空視圖不變模型。吳佳等人[7]提出動(dòng)作特征,保存相關(guān)編碼信息,采用改進(jìn)編輯距離對手勢動(dòng)作進(jìn)行分類。
針對動(dòng)態(tài)手勢識(shí)別過程中可變性的問題,文中提出動(dòng)態(tài)手勢關(guān)鍵幀的提取方法,采用基于運(yùn)動(dòng)的分析算法,利用圖像序列中像素在時(shí)間域上的變化,以及相鄰幀之間的相關(guān)性,找到上一幀跟當(dāng)前幀之間存在的差值信息,根據(jù)閾值選出最合適的關(guān)鍵幀,去除動(dòng)態(tài)手勢中的冗余幀。
文中從動(dòng)態(tài)手勢運(yùn)動(dòng)的內(nèi)在特征出發(fā),結(jié)合時(shí)間域和空間域手勢所具有的個(gè)體性差異,提出了一種新的動(dòng)態(tài)手勢識(shí)別框架,如圖1 所示。
圖1 動(dòng)態(tài)手勢識(shí)別框架
首先對輸入的視頻序列,通過運(yùn)動(dòng)分析算法提取有效的關(guān)鍵幀,然后通過OpenPose 獲取關(guān)鍵幀序列中手部的21 個(gè)關(guān)節(jié)點(diǎn)的坐標(biāo)和置信度,最后采用閾值法和XGBoost 分類算法進(jìn)行動(dòng)態(tài)手勢識(shí)別。該框架結(jié)合時(shí)空連續(xù)性,有效解決手勢的時(shí)序問題,使動(dòng)態(tài)手勢識(shí)別變得更加高效、簡潔。
對于動(dòng)態(tài)手勢視頻序列,若簡單地選取每一幀作為關(guān)鍵幀,容易出現(xiàn)相鄰兩幀變化甚微的情況,且容易出現(xiàn)嚴(yán)重的信息冗余,導(dǎo)致算法效率降低。單幀提取手勢視頻序列變化情況如圖2所示。
圖2 關(guān)鍵幀分析
手勢可以分為3 個(gè)階段:起始、高潮、結(jié)束??梢钥闯鰪囊曨l序列的第1 幀到第8 幀基本沒有什么動(dòng)作,可以看成是靜止不動(dòng)的,屬于起始階段。從第13 幀開始到第25 幀,手部動(dòng)作開始頻繁變換,屬于高潮階段,包含豐富的動(dòng)作信息。從第33 幀到第45 幀同樣手部動(dòng)作變化不明顯,屬于結(jié)束階段。因此,手勢的變化階段主要在高潮階段,包含了豐富的運(yùn)動(dòng)變化信息,在判別手勢過程中起到了決定性作用。
因此,為了提高算法效率,在完整識(shí)別出動(dòng)態(tài)手勢序列的前提下有效減少視頻序列中的冗余幀,文中采用基于運(yùn)動(dòng)分析的方法來提取關(guān)鍵幀。具體算法描述如下:
1)讀取視頻,遍歷數(shù)據(jù)集中的所有視頻數(shù)據(jù),并創(chuàng)建目錄;
2)提取視頻中的每一幀圖像,并對每一幀提取灰度信息之后作高斯模糊處理,計(jì)算每一幀參數(shù)和相鄰幀的差別,并保存到字典list中;
3)統(tǒng)計(jì)每一幀與上一幀的差值,記錄最大值、最小值、平均值、標(biāo)準(zhǔn)差等信息,保存到字典list中;
4)根據(jù)字典list 中的信息(主要是平均值和標(biāo)準(zhǔn)差)計(jì)算閾值,當(dāng)相鄰幀之間的差距大于閾值時(shí)就把這一幀保存為關(guān)鍵幀。
根據(jù)上述算法所提取出的關(guān)鍵幀如圖3 所示。
圖3 提取手勢關(guān)鍵幀
OpenPose[8]可實(shí)現(xiàn)人體動(dòng)作、面部表情、手指運(yùn)動(dòng)等姿態(tài)估計(jì),適用于單人和多人,具有極好的魯棒性。
OpenPose 中CPM(單人姿態(tài)估計(jì))的算法流程如下:
首先,對圖像中所有出現(xiàn)的人進(jìn)行回歸,回歸每個(gè)人的關(guān)節(jié);
然后,根據(jù)center map 去除掉對其他人的響應(yīng);
最后,通過重復(fù)地對預(yù)測出來的heatmap 進(jìn)行refine,得到最終的姿態(tài)估計(jì)結(jié)果。在進(jìn)行refine 時(shí),OpenPose 引入了中間層的loss,從而保證較深的網(wǎng)絡(luò)仍然可以完成訓(xùn)練,避免出現(xiàn)梯度彌散或爆炸現(xiàn)象。通過coarse to fine 逐漸提升回歸的準(zhǔn)確度。
文中采用開源的OpenPoseDemo 文件讀取圖片中的姿態(tài)信息,并將讀取的信息保存為json 文件。針對手勢識(shí)別只需要關(guān)注json 文件中的兩個(gè)鍵hand_left_keypoints_2d、hand_right_keypoints_2d。每個(gè)鍵對應(yīng)手部21 個(gè)關(guān)鍵點(diǎn),節(jié)點(diǎn)有3 個(gè)值(X,Y,置信度),其中一幀的關(guān)鍵點(diǎn)數(shù)據(jù)如表1 所示。
表1 關(guān)鍵點(diǎn)數(shù)據(jù)
由于部分手勢動(dòng)作左右手的動(dòng)作相差無幾,或者只有一只手處于運(yùn)動(dòng)狀態(tài),故不區(qū)分左右手,只識(shí)別手勢的動(dòng)作。文中通過對某個(gè)節(jié)點(diǎn)保持Y坐標(biāo)不變,X坐標(biāo)變?yōu)?X來進(jìn)行數(shù)據(jù)增強(qiáng)。為了方便讀取,將最終的樣本整合為一個(gè)csv 文件,該文件有65 列(21(關(guān)鍵點(diǎn))×3(X,Y,置信度)+左手/右手+動(dòng)作標(biāo)志)。
XGBoost[9]是一種專注于梯度提升的機(jī)器學(xué)習(xí)算法,被廣泛應(yīng)用在Kaggle 競賽及其他機(jī)器學(xué)習(xí)競賽中,取得了不錯(cuò)的成績。不但在識(shí)別率上較傳統(tǒng)梯度提升樹要高,在識(shí)別效率上也有一定的優(yōu)勢。
XGBoost 本質(zhì)上屬于梯度提升樹,其算法的基本思想是讓新的模型(GBDT 以CART 分類回歸樹為基模型)去擬合前面模型的偏差,從而不斷地將加法模型的偏差降低。
相比于經(jīng)典的GBDT 算法,XGBoost 作了一些改進(jìn),因而在效果和性能上有非常明顯的提升:
1)XGBoost 加入了葉子權(quán)重的L2 正則化項(xiàng)來平滑各葉子節(jié)點(diǎn)的預(yù)測值,因此模型可以獲得更低的方差。
2)GBDT 將目標(biāo)函數(shù)泰勒展開到一階,而XGBoost 將目標(biāo)函數(shù)泰勒展開到了二階。保留了更多有關(guān)目標(biāo)函數(shù)的信息。
3)GBDT 是給新的基模型尋找新的擬合標(biāo)簽,而XGBoost 是給新的基模型尋找新的目標(biāo)函數(shù)。
XGBoost 算法中的正則項(xiàng),目標(biāo)函數(shù)定義如下:
XGBoot 的預(yù)測模型同樣可以表示為式(3):
對于目標(biāo)損失函數(shù)中的正則項(xiàng)(復(fù)雜度)部分,當(dāng)從單一的樹考慮時(shí),對于其中每一棵回歸樹,其模型可以寫成式(4):
式中,ωq(x)是葉子節(jié)點(diǎn)q的分?jǐn)?shù),q(x)是葉子節(jié)點(diǎn)的編號(hào),f(x)是其中一棵回歸樹。即任意一個(gè)樣本x,其最后會(huì)落在樹的某個(gè)葉子節(jié)點(diǎn)上,其值為ωq(x),正如上文所說,新生成的決策樹用于擬合上一棵樹預(yù)測的殘差,故當(dāng)生成t棵樹時(shí),預(yù)測分?jǐn)?shù)可以寫成:
同時(shí),目標(biāo)函數(shù)可以改寫成ft(xi)為當(dāng)前樹上某個(gè)葉子節(jié)點(diǎn)的值:
然后,需要找到能夠使目標(biāo)函數(shù)最小化的ft。XGBoost 是利用其在ft=0 處的泰勒公式的二階展開式來近似求解的。故目標(biāo)函數(shù)可以近似為如下公式:
其中,gi為一階導(dǎo)數(shù),hi為二階導(dǎo)數(shù),hi前面的為泰勒二階展開式二階導(dǎo)的系數(shù)
根據(jù)以上分析,文中采用的算法流程如圖4所示。
圖4 算法流程
為了驗(yàn)證該算法的有效性,分別采用靜態(tài)數(shù)據(jù)集Microsoft Kinect and Leap Motion[10]和動(dòng)態(tài)數(shù)據(jù)集UTD-MHAD 進(jìn)行實(shí)驗(yàn)驗(yàn)證。
Microsoft Kinect and Leap Motion 數(shù)據(jù)集包含了14 位不同受試者執(zhí)行的10 個(gè)不同的手勢動(dòng)作,總共為1 400 個(gè)不同的樣本執(zhí)行10 次。每個(gè)樣本包括深度和RGB 圖像、原始深度數(shù)據(jù)和CSV 數(shù)據(jù)。文中選擇RGB 圖像進(jìn)行手勢動(dòng)作識(shí)別,其10 個(gè)手勢動(dòng)作如圖5 所示。最終識(shí)別結(jié)果采用混淆矩陣表示如圖6 所示?;煜仃嚳梢员砻?,識(shí)別率可達(dá)98.23%,從中發(fā)現(xiàn)手勢G0 和G6、G3 和G4、G5 和G8、G9 和G6 容易發(fā)生識(shí)別混淆。和其他實(shí)驗(yàn)方法進(jìn)行實(shí)驗(yàn)對比,實(shí)驗(yàn)結(jié)果如表2 所示。
圖5 靜態(tài)手勢動(dòng)作
圖6 Microsoft Kinect and Leap Motion數(shù)據(jù)集上的識(shí)別結(jié)果
表2 基于Microsoft Kinect and Leap Motion數(shù)據(jù)集不同方法的識(shí)別率對比
文獻(xiàn)[11]中提出CSRP 算法,且遞歸模型可解決手勢邊緣序列不等長、起始點(diǎn)匹配問題,可有效區(qū)分不同手勢,提高識(shí)別效率。文獻(xiàn)[12]中采用Leap Motion 設(shè)備獲取3D 手勢數(shù)據(jù),定義6 個(gè)新的特征描述符,使用Random Regression Forest 進(jìn)行手勢識(shí)別,識(shí)別率可達(dá)到100%,高于文中識(shí)別率。由于使用了3D 手勢數(shù)據(jù),相比RGB 圖像的數(shù)據(jù),可以更加準(zhǔn)確地對各位受試者的不同手勢進(jìn)行描述,但Leap Motion 設(shè)備采集的數(shù)據(jù)相對復(fù)雜,而RGB 圖像更加直觀,相反,3D 的手勢數(shù)據(jù)增加了空間復(fù)雜度和計(jì)算時(shí)間。
文中采用OpenPose 提取手部的21 個(gè)關(guān)鍵點(diǎn),無需考慮光照環(huán)境、人的膚色、周圍環(huán)境等外界因素,可以較精確地提取到手部關(guān)鍵點(diǎn)信息,而后使用XGBoost 進(jìn)行手勢分類的算法,可達(dá)到98.23%的識(shí)別率。通過上述的對比實(shí)驗(yàn),文中提出的算法有較好的識(shí)別效果。
UTD-MHAD 數(shù)據(jù)集中選擇RGB 視頻數(shù)據(jù),其中包含8 位不同受試者執(zhí)行的27 個(gè)不同的動(dòng)作,每個(gè)動(dòng)作重復(fù)4次,共861個(gè)RGB視頻序列。從中選擇了16個(gè)動(dòng)作,分別為Wave、Clap、Throw、Arm cross、Draw X、Draw circle(counter clockwise)、Bowling、Boxing、Baseball swing、Tennis swing、Arm curl、Push、Catch、Jog、Walk、Squat,共512 個(gè)視頻序列。最終的識(shí)別結(jié)果采用混淆矩陣表示,如圖7 所示。
圖7 UTD-MHAD數(shù)據(jù)集上的識(shí)別結(jié)果
由以上混淆矩陣可以表明,識(shí)別率可達(dá)95.84%,從中發(fā)現(xiàn)Jog 與Squat 較容易發(fā)生識(shí)別混淆。在該數(shù)據(jù)集上和其他方法進(jìn)行實(shí)驗(yàn)對比,如表3所示。
表3 基于UTD-MHAD數(shù)據(jù)集不同方法的識(shí)別率對比
文獻(xiàn)[16]中,提取3 個(gè)通道的深度信息DMM(Front DMM、Side DMM 和Top DMM)及RGB 圖像數(shù)據(jù),通過VGG 分別進(jìn)行訓(xùn)練預(yù)測,最終將4 個(gè)通道的預(yù)測分?jǐn)?shù)進(jìn)行融合,達(dá)到了95.74%的識(shí)別率。DMM由三維結(jié)構(gòu)組成,故3 個(gè)通道的DMM 可充分表示各維度特征。經(jīng)過預(yù)測,結(jié)合RGB 圖像的預(yù)測結(jié)果進(jìn)行融合,由于深度圖像和RGB 圖像提取特征的互補(bǔ)性,可實(shí)現(xiàn)較高的識(shí)別率。文中提出的算法,不僅能夠?qū)?dòng)作的關(guān)鍵幀進(jìn)行選取,去掉冗余信息、提高效率,同時(shí)還能夠獲得理想的識(shí)別效果,充分說明該方法的有效性和可行性[17]。
通過實(shí)驗(yàn)結(jié)果表明,文中提出的動(dòng)態(tài)手勢識(shí)別框架,具有一定的可行性,該關(guān)鍵幀提取方法能夠有效地提取到動(dòng)態(tài)手勢序列中的關(guān)鍵動(dòng)作,并利用關(guān)鍵幀替代全部的動(dòng)態(tài)手勢幀,避免了數(shù)據(jù)的冗余。然后通過OpenPose 提取手部的關(guān)鍵點(diǎn)坐標(biāo)及置信度,有效地減少了傳統(tǒng)上對RGB 圖像的預(yù)處理過程,在不同光照、環(huán)境下有很好的識(shí)別效果,可準(zhǔn)確提取到手勢的信息。