劉雨聰,徐碩晨,宋帥超,張東生
(河南大學(xué) 軟件學(xué)院,河南 開封 475004)
中國(guó)傳統(tǒng)武術(shù)有著悠久的歷史,具有極其廣泛的群眾基礎(chǔ),是中國(guó)優(yōu)秀文化遺產(chǎn)的重要組成部分。傳統(tǒng)武術(shù)中的太極拳、少林拳、詠春拳等不僅可以用來防身,更對(duì)人體健康有益。研究表明,太極拳可提高活力,改善人體身心健康[1]。因此,以太極拳為代表的武術(shù)項(xiàng)目受到廣泛關(guān)注、大力推廣。
目前,國(guó)內(nèi)外對(duì)于武術(shù)的教學(xué)大多停留在面授或是練習(xí)者僅跟隨視頻學(xué)習(xí)的傳統(tǒng)方式。一方面,傳統(tǒng)武術(shù)的傳承人較為稀缺,群眾很難接觸到正宗的面授教學(xué);另一方面,僅跟隨視頻學(xué)習(xí)技巧性動(dòng)作存在直觀性差、效率低下等問題,練習(xí)者極易做錯(cuò)動(dòng)作,造成肌肉損傷[2]。
隨著人工智能技術(shù)的發(fā)展,利用深度學(xué)習(xí)等技術(shù)對(duì)于人體姿態(tài)識(shí)別與比對(duì)的研究也較為深入。針對(duì)上文提到的問題,本文提出使用OpenPose算法對(duì)武術(shù)練習(xí)者的動(dòng)作進(jìn)行提取分析,利用OpenPose算法處理后得到的人體骨架數(shù)據(jù)與標(biāo)準(zhǔn)動(dòng)作進(jìn)行比對(duì),幫助判斷練習(xí)者動(dòng)作是否規(guī)范。以嘗試解決這一問題,并探索武術(shù)教學(xué)的新方式。本文對(duì)該方法作了初步研究。
由美國(guó)卡耐基大學(xué)提出的基于深度學(xué)習(xí)的開源庫OpenPose[3]可實(shí)現(xiàn)對(duì)人體動(dòng)作、手指運(yùn)動(dòng)、面部表情等的識(shí)別捕捉,對(duì)圖像中人體姿態(tài)進(jìn)行較為精準(zhǔn)的估計(jì),提取多個(gè)身體、手部或面部骨骼關(guān)鍵點(diǎn)。它適用于單人和多人情況,具有極好的魯棒性。
OpenPose算法首先定位人體的特征位置,再將人體組合,其識(shí)別思路是自下向上的[4]。在人體被部分遮擋或背景復(fù)雜度較高的情況下,仍可較好的解決問題;在場(chǎng)景中存在多人的情況下,可有效減少運(yùn)算時(shí)間。本文利用該算法這一特性,提取出練習(xí)者與標(biāo)準(zhǔn)運(yùn)動(dòng)視頻中的關(guān)鍵幀或是圖片,作為后續(xù)比對(duì)的素材使用。
OpenPose算法的大致思路如下:將輸入的圖像經(jīng)10層VGG19網(wǎng)絡(luò)處理,提取出圖片特征F,再將特征F放入兩個(gè)卷積網(wǎng)絡(luò)進(jìn)行計(jì)算,即關(guān)鍵點(diǎn)置信度網(wǎng)絡(luò)S和關(guān)鍵點(diǎn)親和度向量場(chǎng)網(wǎng)絡(luò)L,然后預(yù)測(cè)得到每個(gè)關(guān)鍵點(diǎn)的置信度、親和度向量。之后通過二分匹配進(jìn)行關(guān)鍵點(diǎn)聚類,將同一人的骨架節(jié)點(diǎn)拼接,最終得到每一個(gè)人的骨架信息。傳統(tǒng)的姿態(tài)估計(jì)算法需要依靠深度攝像頭計(jì)算,而OpenPose僅使用單目攝像頭便可達(dá)到極佳的實(shí)時(shí)性。
人體的不同特征部位可以抽象為18個(gè)特征點(diǎn),由這些特征點(diǎn)組成的人體骨架即可反映此刻人體的姿態(tài)。而特定關(guān)節(jié)間的角度值可以為判斷一個(gè)人動(dòng)作的準(zhǔn)確性提供參考,無需受不同人體型、膚色、著裝等特征影響。本文將利用這一特征進(jìn)行動(dòng)作比對(duì)。
經(jīng)過OpenPose處理圖片后,可以得到人體18個(gè)特征點(diǎn)的坐標(biāo),如圖1所示。個(gè)別情況下,平面圖片中人體的部分不能完整呈現(xiàn),這會(huì)導(dǎo)致該特征點(diǎn)對(duì)應(yīng)坐標(biāo)為“None”,圖1就是這種情況。但本實(shí)驗(yàn)主要關(guān)注人體軀干骨架,眼部特征點(diǎn)未識(shí)別對(duì)于動(dòng)作的比對(duì)影響不大,故面部數(shù)據(jù)可以忽略不計(jì)。
圖1 人體18個(gè)特征點(diǎn)的坐標(biāo)
得出的人體骨架圖片如圖2所示。兩點(diǎn)之間的長(zhǎng)度可以通過計(jì)算歐氏距離得出,再使用余弦定理計(jì)算得出反映人體動(dòng)作的特定關(guān)節(jié)間夾角的角度值。本文使用這一方法分別對(duì)標(biāo)準(zhǔn)動(dòng)作圖片進(jìn)行處理,得出該圖片人體骨架的關(guān)節(jié)角度值,作為比對(duì)范本。之后輸入需要進(jìn)行評(píng)判的訓(xùn)練者動(dòng)作圖片,同樣得出關(guān)節(jié)角度值。將兩者角度值進(jìn)行分析即可得出訓(xùn)練者動(dòng)作是否標(biāo)準(zhǔn),達(dá)到動(dòng)作比對(duì)的效果。
圖2 OpenPose還原出的人體骨架
本實(shí)驗(yàn)的硬件環(huán)境如下:CPU為Intel(R)Core i7-8750H,2.20 GHz,內(nèi)存為8GB;GPU為NVIDIA GeForce GTX 1060,操作系統(tǒng)為Windows 10專業(yè)版。軟件平臺(tái)為Eclipse IDE。
本實(shí)驗(yàn)首先對(duì)標(biāo)準(zhǔn)動(dòng)作的視頻數(shù)據(jù)切割處理,對(duì)視頻剪輯得到一個(gè)完整的動(dòng)作或招式片段,然后將招式中部分動(dòng)作截取生成關(guān)鍵幀圖片,作為對(duì)照數(shù)據(jù)。再將練習(xí)者的動(dòng)作視頻做同樣處理,截取其相同動(dòng)作的關(guān)鍵幀,用來與對(duì)照數(shù)據(jù)比對(duì)。
本文使用Python 3.0開發(fā)了一個(gè)腳本程序,該程序命名為Judge.py,主要實(shí)現(xiàn)輸入一張關(guān)鍵幀圖片,調(diào)用OpenPose計(jì)算出圖片中人體18個(gè)關(guān)鍵點(diǎn)坐標(biāo)、還原骨架、計(jì)算關(guān)節(jié)間角度值的功能。實(shí)驗(yàn)輸入的數(shù)據(jù)為的圖片文件,格式為JPG,如圖3所示。
圖3 輸入的練習(xí)者動(dòng)作圖片
運(yùn)行Judge.py后,該程序會(huì)自動(dòng)將預(yù)先截取好的練習(xí)者動(dòng)作關(guān)鍵幀進(jìn)行處理,得出此畫面中包含多個(gè)關(guān)節(jié)角度的人體骨架數(shù)據(jù),如圖4所示。同時(shí),畫面中的人體會(huì)被標(biāo)注出含有關(guān)鍵點(diǎn)的骨架結(jié)構(gòu),如圖5所示。之后,將輸出的數(shù)據(jù)與事先已用同樣方法處理過的標(biāo)準(zhǔn)動(dòng)作數(shù)據(jù)進(jìn)行比對(duì),即可大致判斷出訓(xùn)練者的動(dòng)作是否規(guī)范。
圖4 人體關(guān)節(jié)間角度值
圖5 練習(xí)者骨架結(jié)構(gòu)
實(shí)驗(yàn)采集了3位練習(xí)者的動(dòng)作視頻,截取幾個(gè)動(dòng)作的關(guān)鍵幀,使用OpenPose算法分別處理,得出最終用來判別動(dòng)作規(guī)范度的關(guān)節(jié)角度數(shù)據(jù),與預(yù)先處理好的標(biāo)準(zhǔn)動(dòng)作關(guān)節(jié)角度數(shù)據(jù)對(duì)比,以此判斷OpenPose算法應(yīng)用在武術(shù)動(dòng)作中人體動(dòng)作的識(shí)別與比對(duì)的可靠性。在實(shí)驗(yàn)過程中,即使背景復(fù)雜、拍照角度特殊、練習(xí)者著裝色彩與背景相似等情況下,系統(tǒng)均可根據(jù)人體動(dòng)作關(guān)鍵幀還原出骨架,說明該算法的可用性。而得出的關(guān)節(jié)角度數(shù)據(jù)也符合客觀規(guī)律,與人眼判斷練習(xí)者動(dòng)作外形的規(guī)范程度吻合,說明本實(shí)驗(yàn)的方法應(yīng)用于武術(shù)動(dòng)作外形識(shí)別是可行的。
但是,在個(gè)別情況下OpenPose對(duì)人體骨架的還原存在問題。例如,當(dāng)訓(xùn)練者的手垂直舉過頭頂時(shí),該算法會(huì)存在手臂部分骨架還原失敗的情況。這是由于OpenPose在姿態(tài)估計(jì)時(shí),依靠?jī)蓚€(gè)已知的骨骼點(diǎn)生成一個(gè)PAF連接,如果兩個(gè)骨骼點(diǎn)有一個(gè)不存在或識(shí)別失敗,則不生成PAF標(biāo)簽[5]。因此推測(cè),當(dāng)訓(xùn)練者的手舉過頭頂時(shí),只識(shí)別出了腕關(guān)節(jié)點(diǎn),而肘關(guān)節(jié)識(shí)別失敗,故不生成PAF連接,但此連接實(shí)際存在,是應(yīng)該生成的。
本實(shí)驗(yàn)也存在以下不足:本實(shí)驗(yàn)所使用的樣本過于單一,僅對(duì)指定的幾個(gè)人體動(dòng)作進(jìn)行了識(shí)別比對(duì),未來應(yīng)擴(kuò)大樣本范圍,覆蓋更多的武術(shù)品種與招式、動(dòng)作,以探究該方法應(yīng)用在傳統(tǒng)武術(shù)動(dòng)作識(shí)別與比對(duì)領(lǐng)域的普適性。另外本實(shí)驗(yàn)使用的OpenPose算法中也存在一些問題,如COCO數(shù)據(jù)集中存在一些不適當(dāng)標(biāo)簽,即對(duì)于超出圖片范圍的肘部缺少標(biāo)注等,當(dāng)使用包含此類缺少標(biāo)簽的數(shù)據(jù)進(jìn)行模型訓(xùn)練時(shí),會(huì)對(duì)模型的性能造成一定的負(fù)面影響[6]。之后的研究可以通過使用OpenPose的相關(guān)改進(jìn)算法進(jìn)行動(dòng)作識(shí)別,嘗試提高人體骨架還原與動(dòng)作識(shí)別的精度[7-8]。
本文以傳統(tǒng)武術(shù)動(dòng)作識(shí)別與比對(duì)為目標(biāo),使用OpenPose算法處理訓(xùn)練者及標(biāo)準(zhǔn)動(dòng)作關(guān)鍵幀,還原人體骨架,得出人體關(guān)節(jié)角度值,進(jìn)行兩者的比對(duì),驗(yàn)證了OpenPose及比對(duì)算法在武術(shù)動(dòng)作教學(xué)中的可行性,對(duì)于推動(dòng)武術(shù)教學(xué)、傳承、推廣等具有較好的現(xiàn)實(shí)意義和實(shí)用價(jià)值。該技術(shù)成熟后,也可應(yīng)用于如飛行器駕駛、車輛操控等對(duì)于動(dòng)作規(guī)范度要求較高的領(lǐng)域,發(fā)揮更大的應(yīng)用價(jià)值。但在實(shí)際操作中,訓(xùn)練者做出部分動(dòng)作時(shí),該算法會(huì)識(shí)別出不完整的人體骨架;另外,如何處理兩者關(guān)節(jié)角度數(shù)據(jù)、如何制定評(píng)判標(biāo)準(zhǔn)也是值得研究的。針對(duì)這一問題,將繼續(xù)開展對(duì)姿態(tài)估計(jì)的算法與應(yīng)用的研究。