摘 要:【目的】為降低輕量級(jí)神經(jīng)網(wǎng)絡(luò)模型的運(yùn)算量,提高計(jì)算的準(zhǔn)確性,本研究基于深度學(xué)習(xí)姿態(tài)估計(jì),設(shè)計(jì)并實(shí)現(xiàn)一種基于單目攝像頭的虛擬人物驅(qū)動(dòng)系統(tǒng)。【方法】首先,通過(guò)MediaPipe來(lái)分析單目相機(jī)中的人體姿態(tài),得到基于人體骨骼的32個(gè)特征點(diǎn)及手部骨骼的21個(gè)特征點(diǎn)。其次,對(duì)神經(jīng)網(wǎng)絡(luò)特征點(diǎn)的閃爍問(wèn)題,使用均值濾波算法來(lái)減少誤差,從而得到流暢的運(yùn)動(dòng)軌跡信息。最后,把3D虛擬人體模型導(dǎo)入到Unity3D軟件中,為其添加基本的人體骨骼,并賦予權(quán)重,建立特征點(diǎn)與骨骼間的映射關(guān)系,用特征點(diǎn)來(lái)驅(qū)動(dòng)骨骼?!窘Y(jié)果】實(shí)現(xiàn)了3D虛擬人體模型實(shí)時(shí)模仿攝像頭前的真人運(yùn)動(dòng)的效果?!窘Y(jié)論】經(jīng)試驗(yàn)驗(yàn)證,本研究提出的系統(tǒng)可實(shí)時(shí)準(zhǔn)確地捕捉人體姿態(tài),并借助Unity3D出色的物理系統(tǒng)來(lái)實(shí)現(xiàn)良好的互動(dòng)體驗(yàn)。
關(guān)鍵詞:姿態(tài)估計(jì);單目攝像機(jī);MediaPipe;動(dòng)作捕捉;Unity3D
中圖分類(lèi)號(hào):TP391" " 文獻(xiàn)標(biāo)志碼:A" " 文章編號(hào):1003-5168(2023)21-0018-05
DOI:10.19968/j.cnki.hnkj.1003-5168.2023.21.004
Virtual Character Drive System Based on MediaPipe and Unity3D
DOU Zhaoxun ZUO Zhibin
(School of Information Science and Engineering, Henan University of Technology, Zhengzhou 450001,China)
Abstract: [Purposes] In order to reduce the computational complexity of the lightweight neural network model and improve the accuracy of the calculation, this study designs and implements a virtual character drive system based on monocular camera on the basis of deep learning pose estimation. [Methods] Firstly, MediaPipe was used to analyze the human pose in the monocular camera, and 32 feature points based on human skeleton and 21 feature points of hand skeleton were obtained. Secondly, for the flicker problem of neural network feature points, the mean filtering algorithm is used to reduce the error, so as to obtain smooth motion trajectory information. Finally, the 3D virtual human model is imported into Unity3D software, and the basic human skeleton is added, and the weight is given. The mapping relationship between the feature points and the skeleton is established, and the skeleton is driven by the feature points. [Findings] The effect of 3D virtual human body model imitating the real human motion in front of the camera in real time was realized. [Conclusions] It is verified by experiments that the system proposed in this study can accurately capture human posture in real time, and achieve a good interactive experience with the help of Unity3D's excellent physical system.
Keywords: attitude estimation; monocular camera; MediaPipe; motion capture; Unity3D
0 引言
自然人機(jī)交互技術(shù)是計(jì)算機(jī)領(lǐng)域的重要前沿技術(shù),與圖像識(shí)別、人工智能技術(shù)有著密切的聯(lián)系。利用動(dòng)作捕捉技術(shù)捕獲的數(shù)據(jù)來(lái)驅(qū)動(dòng)虛擬人物并生成動(dòng)畫(huà)是人機(jī)交互中的常用場(chǎng)景[1]。通過(guò)穿戴相關(guān)的設(shè)備來(lái)驅(qū)動(dòng)虛擬模型,但這些設(shè)備往往價(jià)值不菲,因此可利用單目攝像頭對(duì)人體動(dòng)作評(píng)估的技術(shù)[2]來(lái)降低成本。常用的人體姿態(tài)估計(jì)技術(shù)有二維人體姿態(tài)估計(jì)技術(shù)和三維人體姿態(tài)估計(jì)技術(shù)。
二維人體姿態(tài)技術(shù)通過(guò)對(duì)輸入的圖像信息進(jìn)行分析,得到二維上的人體關(guān)鍵點(diǎn)預(yù)測(cè)坐標(biāo)。根據(jù)檢測(cè)人數(shù)的不同,可分為單人人體姿態(tài)估計(jì)和多人人體姿態(tài)估計(jì)[3]。多人人體姿態(tài)估計(jì)又可分為自頂向下法和自底向上法。自頂向下法是利用人體檢測(cè)器裁剪出單人子圖,再進(jìn)行單人姿態(tài)估計(jì)的。這種方法能降低復(fù)雜度,并提高人體姿態(tài)估計(jì)的準(zhǔn)確性。自底向上法先估計(jì)出原圖像中所有關(guān)鍵點(diǎn)的坐標(biāo),再根據(jù)人來(lái)進(jìn)行劃分生成對(duì)應(yīng)的二維人體姿態(tài)估計(jì),執(zhí)行一次便可完成對(duì)圖像中所有人的姿態(tài)估計(jì)。相較于自頂向下法,自底向上法的效率更高,能更好地滿足實(shí)時(shí)性要求,但其精確度卻有所下降。
通過(guò)二維人體姿態(tài)估計(jì)法無(wú)法獲得深度信息,導(dǎo)致其應(yīng)用場(chǎng)景有限。隨著人機(jī)交互的要求越來(lái)越高,關(guān)于三維人體姿態(tài)估計(jì)的研究[4]也日益增多。三維人體姿態(tài)估計(jì)是根據(jù)輸入的二維圖像來(lái)生成三維關(guān)鍵點(diǎn)坐標(biāo)的,由于引入深度信息,相較于二維人體姿態(tài)估計(jì),三維人體姿態(tài)估計(jì)更加準(zhǔn)確,其應(yīng)用場(chǎng)景也更廣泛。雖然三維人體姿態(tài)估計(jì)在技術(shù)上實(shí)現(xiàn)更加困難,但基于深度學(xué)習(xí)的RGB輸入人體姿態(tài)估計(jì)法已有了顯著發(fā)展。
本研究采用基于三維人體姿態(tài)估計(jì)中的單目三維人體姿態(tài)估計(jì)法來(lái)研發(fā)出一套虛擬人物驅(qū)動(dòng)系統(tǒng),通過(guò)該系統(tǒng),可借助單目RGB攝像機(jī)來(lái)實(shí)時(shí)將相機(jī)前的人物動(dòng)作映射到3D虛擬模型上。
1 人體動(dòng)作捕捉系統(tǒng)模型
本研究設(shè)計(jì)的系統(tǒng)總體可分為三個(gè)模塊,即人體姿態(tài)估計(jì)模塊、均值濾波模塊、虛擬模型驅(qū)動(dòng)模塊。該系統(tǒng)的流程如圖1所示。其中,3D人物模型骨骼綁定和骨骼驅(qū)動(dòng)都屬于3D人物模型驅(qū)動(dòng)模塊。
2 人體姿態(tài)估計(jì)
MediaPipe為一個(gè)用于構(gòu)建機(jī)器學(xué)習(xí)管道的框架,可用于處理視頻、音頻等時(shí)間序列數(shù)據(jù)[5],且該平臺(tái)框架適用于桌面/服務(wù)器、Android、IOS和嵌入式設(shè)備。MediaPipe的處理流程如圖2所示。
MediaPipe使用的BlazePose是一種輕量級(jí)卷積神經(jīng)網(wǎng)絡(luò)模型[6],專(zhuān)門(mén)為移動(dòng)設(shè)備實(shí)時(shí)推理而設(shè)計(jì)。推理過(guò)程中會(huì)為個(gè)人生成33個(gè)人體關(guān)鍵點(diǎn),此網(wǎng)絡(luò)同時(shí)結(jié)合了熱圖和回歸關(guān)鍵點(diǎn)的坐標(biāo)。BlazePose通過(guò)編碼器-解碼器網(wǎng)絡(luò)體系結(jié)構(gòu)來(lái)預(yù)測(cè)所有關(guān)節(jié)的熱圖,并用編碼器來(lái)回歸所有關(guān)節(jié)的坐標(biāo),關(guān)鍵點(diǎn)為推理過(guò)程中丟棄的熱圖分支,能減少運(yùn)算量,使其可以在手機(jī)上運(yùn)行。
MediaPipe框架內(nèi)使用的BlazePose神經(jīng)卷積模型與OpenPose的對(duì)比見(jiàn)表1。
以O(shè)penPose為基準(zhǔn),手動(dòng)標(biāo)注1 000個(gè)圖像的數(shù)據(jù)集,每個(gè)數(shù)據(jù)集中的人數(shù)為1~2人。表1中AR Dataset為第一個(gè)數(shù)據(jù)集,由各種野外人體姿態(tài)組成;表1中Yoga Dataset為第二個(gè)數(shù)據(jù)集,主要為各種人體瑜伽姿態(tài)。為保證試驗(yàn)對(duì)比的一致性,MediaPipe使用的是和OpenPose一樣的MS Coco拓?fù)浣Y(jié)構(gòu)(該拓?fù)浣Y(jié)構(gòu)有17個(gè)人體關(guān)鍵點(diǎn),MediaPipe使用的拓?fù)浣Y(jié)構(gòu)原有33個(gè)人體關(guān)鍵點(diǎn))。PCK@0.2是指使用公差為20%的正確點(diǎn)百分比,即如果二維上的歐式誤差小于相應(yīng)人體軀干尺寸的20%,那么就能正確地檢測(cè)出該點(diǎn)。
BazePose Full和BlazePose Lite為容量不同的兩個(gè)模型,BlazePose Full的容量為6.9 MFlop、3.5 MParams,BlazePose Lite的容量為2.7 MFlop、1.3 MParams。由表1可知,BlazePose Full模型在AR數(shù)據(jù)集上稍遜于OpenPose模型,在Yoga數(shù)據(jù)集上比OpenPose模型更優(yōu)。二者的最大差別在性能上,在單個(gè)CPU上,BlazePose比OpenPose快了25到75倍,實(shí)現(xiàn)此點(diǎn)取決于所要求的質(zhì)量。
使用MediaPipe對(duì)圖片進(jìn)行分析后,會(huì)返回一個(gè)結(jié)果集,該結(jié)果集包含所需的人體特征點(diǎn)的三維坐標(biāo)信息,以臀部中心為坐標(biāo)原點(diǎn)。MediaPipe人體特征點(diǎn)分布如圖3所示。
3 均值濾波模塊
在對(duì)3D人物模型驅(qū)動(dòng)過(guò)程中,神經(jīng)網(wǎng)絡(luò)預(yù)測(cè)的特征點(diǎn)會(huì)出現(xiàn)跳閃情況,可用卡爾曼濾波器對(duì)其進(jìn)行平滑處理,采用線性卡爾曼濾波器,通過(guò)比較估計(jì)誤差與測(cè)量誤差來(lái)改善跳閃現(xiàn)象[7]。由于卡爾曼濾波實(shí)現(xiàn)較為復(fù)雜,需要計(jì)算噪聲方差,誤差受實(shí)驗(yàn)室數(shù)據(jù)的影響,對(duì)不同人體姿態(tài)估計(jì)模型需要重新測(cè)量誤差。
由于均值濾波法對(duì)解決神經(jīng)網(wǎng)絡(luò)抖動(dòng)問(wèn)題有顯著效果,同時(shí)該方法并不局限于某一種人體姿態(tài)估計(jì)模型,因此可用動(dòng)態(tài)規(guī)劃思想來(lái)改進(jìn)算法,使其在實(shí)時(shí)運(yùn)算中占用更少的資源,且運(yùn)算量不隨需要被均值的個(gè)數(shù)增加而增加。
均值濾波器全稱(chēng)為算術(shù)平均值濾波器[8],N個(gè)數(shù)據(jù)只在一個(gè)很小的范圍內(nèi)浮動(dòng),如果利用最小二乘法,那么便可以找到一個(gè)y值,使該值與N個(gè)數(shù)據(jù)的偏差最小,這個(gè)y值約等于N個(gè)數(shù)據(jù)總和的平均值,見(jiàn)式(1)。
轉(zhuǎn)化為代碼為(sum-que.peek()+x')/n。其中,que為一個(gè)先進(jìn)先出的隊(duì)列,sum為當(dāng)前隊(duì)列que中的所有數(shù)之和,que.peek()為當(dāng)前隊(duì)列最先進(jìn)入的數(shù)據(jù),x'為新傳入的數(shù)據(jù),n為均值濾波設(shè)置的要被平均的數(shù)字的個(gè)數(shù)。在n個(gè)數(shù)據(jù)填充完成后,需要計(jì)算的部分只有首位和末尾,此時(shí)時(shí)間復(fù)雜度不再隨著n的增大而增加,因此不會(huì)占用過(guò)多資源。
4 虛擬3D人物模型驅(qū)動(dòng)
相較于復(fù)雜的3D人體模型,人體本身作為一個(gè)模型整體,身體關(guān)節(jié)移動(dòng)時(shí),其和中心點(diǎn)并非保持相對(duì)不變。因此,通過(guò)模仿現(xiàn)實(shí)中人體結(jié)構(gòu),在3D人物模型中需要引入骨骼[9]概念,將骨骼放于模型內(nèi)部,可以有多個(gè)骨骼,分為父級(jí)和子級(jí),類(lèi)似于人體關(guān)節(jié)。子級(jí)骨骼的移動(dòng)不會(huì)影響父級(jí)骨骼,而父級(jí)骨骼的移動(dòng)會(huì)帶動(dòng)子級(jí)骨骼。除了骨骼外,還要確定模型中有哪些頂點(diǎn)會(huì)隨著哪些骨骼的移動(dòng)而移動(dòng),又該保持多少的相對(duì)運(yùn)動(dòng),在此引入了權(quán)重。
使用渲染引擎Unity3D[10]對(duì)模型進(jìn)行渲染。Unity3D是Unity Technologies開(kāi)發(fā)的一款實(shí)時(shí)3D軟件,其提供了一整套完善的軟件解決方案,可用于創(chuàng)作、運(yùn)營(yíng)和變現(xiàn)任何實(shí)時(shí)互動(dòng)的2D、3D或AR、VR內(nèi)容,并支持多個(gè)平臺(tái)。 Unity3D引擎內(nèi)部使用C#語(yǔ)言作為主要腳本語(yǔ)言。
在配置好骨骼與權(quán)重后,通過(guò)調(diào)整骨骼的旋轉(zhuǎn)角度,便可實(shí)現(xiàn)對(duì)3D人體模型的驅(qū)動(dòng),將3D模型導(dǎo)入到Unity3D之后,Unity3D會(huì)為每根骨骼單獨(dú)生成實(shí)例,并賦予Transform組件,該組件包含物體在世界坐標(biāo)系中的三維坐標(biāo)、旋轉(zhuǎn)角度及縮放程度。在腳本中修改Transform中的旋轉(zhuǎn)角度便能實(shí)現(xiàn)對(duì)3D人體模型的驅(qū)動(dòng)。把對(duì)應(yīng)特征點(diǎn)的數(shù)據(jù)存儲(chǔ)到對(duì)應(yīng)的骨骼上,便能計(jì)算出旋轉(zhuǎn)方向,并將其添加到骨骼上。
Unity3D采用四元數(shù)來(lái)存儲(chǔ)旋轉(zhuǎn)信息,骨骼一般只進(jìn)行旋轉(zhuǎn)操作,子父級(jí)的關(guān)系用以實(shí)現(xiàn)位移。在Unity3D中,只要用子骨骼的特征點(diǎn)減去其父骨骼的特征點(diǎn),便可得到一個(gè)方向向量,將該方向向量應(yīng)用到父骨骼上,代碼為head.trans.rotation=Quaternion.LookRotation(head.child.Pos3D-head.Pos3D)。
重復(fù)這一操作,要注意的是,該方法必須從子級(jí)骨骼開(kāi)始旋轉(zhuǎn),再去旋轉(zhuǎn)該子級(jí)骨骼的父級(jí)骨骼,否則會(huì)因?yàn)楦缸蛹?jí)的特殊關(guān)系導(dǎo)致無(wú)法得到正確的旋轉(zhuǎn)結(jié)。此外,可使用上述方法同時(shí)實(shí)現(xiàn)對(duì)手部骨骼的追蹤,如圖4所示。
5 結(jié)語(yǔ)
本研究使用基于單目攝像頭的三維人體姿態(tài)估計(jì)技術(shù),配合UDP網(wǎng)絡(luò)通信技術(shù)和Unity3D引擎,成功開(kāi)發(fā)出一套人體姿態(tài)捕捉系統(tǒng)。其中,基于單目攝像頭的三維人體姿態(tài)估計(jì)技術(shù)使用的是谷歌MediaPipe框架,并使用BlazePose輕量級(jí)卷積神經(jīng)網(wǎng)絡(luò)模型,因此,能極大地減輕運(yùn)算量,降低對(duì)硬件的要求。對(duì)神經(jīng)網(wǎng)絡(luò)模型帶來(lái)的抖動(dòng)問(wèn)題,通過(guò)使用均值濾波來(lái)平滑軌跡,進(jìn)一步降低運(yùn)行所需的運(yùn)算量。配合Unity3D渲染引擎,渲染出3D虛擬人物模型,用于表現(xiàn)捕捉效果。經(jīng)過(guò)測(cè)試,該系統(tǒng)能很好地將攝像頭前的人物動(dòng)作實(shí)時(shí)映射到Unity3D的虛擬人物模型上,用來(lái)體驗(yàn)虛擬現(xiàn)實(shí)技術(shù)。在后續(xù)開(kāi)發(fā)中,可考慮將其應(yīng)用到動(dòng)畫(huà)、游戲等領(lǐng)域。
參考文獻(xiàn):
[1]馮影影,楊戟.虛擬現(xiàn)實(shí)VR中的計(jì)算機(jī)技術(shù)的應(yīng)用[J].電子技術(shù),2022(10):174-175.
[2]SUN H X,ZHANG Y Y,ZHENG Y J,et al. G2O-pose:real-time monocular 3D human pose estimation based on general graph optimization[J].Sensors,2022(21):8335.
[3]張宇,溫光照,米思婭,等.基于深度學(xué)習(xí)的二維人體姿態(tài)估計(jì)綜述[J].軟件學(xué)報(bào),2022(11):4173-4191.
[4]王仕宸,黃凱,陳志剛,等.深度學(xué)習(xí)的三維人體姿態(tài)估計(jì)綜述[J].計(jì)算機(jī)科學(xué)與探索,2023(1):74-87.
[5]劉德發(fā).基于MediaPipe的數(shù)字手勢(shì)識(shí)別[J].電子制作,2022(14):55-57.
[6]BAZAREVSKYV,GRISHCHENKO I,RAVEENDRAN K,et al.Blazepose:on-device real-time body pose tracking[J].arXiv,2020.
[7]張宜春,黃一鳴,潘達(dá).基于人體姿態(tài)估計(jì)的京劇虛擬人物互動(dòng)系統(tǒng)[J].中國(guó)傳媒大學(xué)學(xué)報(bào)(自然科學(xué)版),2022(6):43-49.
[8]江友華,曹以龍,唐忠.基于平均值算法的有源濾波器設(shè)計(jì)及應(yīng)用[J].電力電子技術(shù),2010(2):42-43.
[9]鄭一然,紀(jì)濱,陶威遠(yuǎn).基于Kinect的骨骼算法的研究[J].信息記錄材料,2020(6):163-164.
[10]朱晴.Unity3D開(kāi)發(fā)工具在3D游戲開(kāi)發(fā)中的應(yīng)用[J].電子技術(shù)與軟件工程,2019(22):58-59.
收稿日期:2023-06-05
基金項(xiàng)目:河南省科技攻關(guān)項(xiàng)目(232102210132)。
作者簡(jiǎn)介:竇朝勛(2000—),男,本科生,研究方向:計(jì)算機(jī)視覺(jué)處理。
通信作者:左志斌(1979—),男,博士,講師,研究方向:計(jì)算機(jī)網(wǎng)絡(luò)、人工智能。