趙 威,李毅
(四川大學(xué)計(jì)算機(jī)學(xué)院,成都 610065)
人體姿態(tài)估計(jì)是捕捉人體姿態(tài)序列,輸出關(guān)節(jié)點(diǎn)坐標(biāo)反映姿態(tài)特征的技術(shù),在動(dòng)畫、影視、行為識(shí)別、人機(jī)交互等場(chǎng)景有廣闊的應(yīng)用前景。近年來(lái)虛擬偶像文化異軍突起,捕捉和映射人體動(dòng)作的體驗(yàn)需求也隨之蓬勃增長(zhǎng),人們也希望以較低成本獲得虛擬替身和三維動(dòng)畫。
常見(jiàn)的運(yùn)動(dòng)估計(jì)方法有基于物理和基于視覺(jué)的方法。基于物理的人體運(yùn)動(dòng)估計(jì)常借助于動(dòng)作捕捉系統(tǒng),通過(guò)追蹤人體上附著的傳感器信息來(lái)推斷世界場(chǎng)景中的人體關(guān)節(jié)坐標(biāo)和運(yùn)動(dòng)情況,Vicon 和OptiTrack 是目前應(yīng)用廣泛的商業(yè)動(dòng)作捕捉系統(tǒng),精度可以達(dá)到20 μm。這種方法往往需要布置多個(gè)捕捉攝像頭和穿戴捕捉服裝,對(duì)人體具備一定的侵入性和不便性,高精度的代價(jià)是費(fèi)時(shí)又耗力,實(shí)驗(yàn)場(chǎng)地要求較高且成本昂貴?;谝曈X(jué)的人體運(yùn)動(dòng)估計(jì)技術(shù)具備設(shè)備要求低、人體無(wú)害性的特點(diǎn)。微軟Kinect 深度攝像機(jī)能夠從單個(gè)深度圖像中預(yù)測(cè)人體關(guān)節(jié)的3D 位置,在用戶級(jí)別的動(dòng)作捕捉游戲中得到了廣泛的應(yīng)用,由于環(huán)境遮擋、自遮擋問(wèn)題,應(yīng)用場(chǎng)景僅局限于正對(duì)攝像頭的一定區(qū)域且在較強(qiáng)環(huán)境光下容易受限。隨著深度學(xué)習(xí)的發(fā)展,姿態(tài)估計(jì)問(wèn)題得到廣泛的討論,雖然在數(shù)據(jù)集上得到了良好的驗(yàn)證,但實(shí)際應(yīng)用中仍存在一定的不穩(wěn)定性,因此如何提高姿態(tài)估計(jì)的應(yīng)用穩(wěn)定性和魯棒性,生成流暢的人物動(dòng)畫是人體運(yùn)動(dòng)估計(jì)和仿真領(lǐng)域研究的一大熱點(diǎn)。
本文使用單個(gè)Kinect 設(shè)備采集人體三維姿態(tài),旨在以較低采集成本條件下,優(yōu)化姿態(tài)估計(jì)效果,驅(qū)動(dòng)虛擬人物模型生成自然流暢的虛擬人動(dòng)畫,主要工作包括:
1)提出了一種時(shí)空優(yōu)化的骨骼點(diǎn)數(shù)據(jù)處理方法,平滑并進(jìn)行骨長(zhǎng)約束,提高單目人體姿態(tài)估計(jì)的穩(wěn)定性。
2)提出了一種融合Kinect 和遮擋魯棒姿勢(shì)圖(Occlusion-Robust Pose-Maps,ORPM)[1]三維姿態(tài)估計(jì)方法,結(jié)合基于骨骼追蹤與深度信息的傳統(tǒng)算法和基于深度學(xué)習(xí)的ORPM 單目估計(jì)方法進(jìn)行姿態(tài)估計(jì),解決了Kinect 設(shè)備采集人體姿態(tài)存在的遮擋問(wèn)題,擴(kuò)大了適用范圍。
3)研制了虛擬人動(dòng)畫系統(tǒng),使用優(yōu)化處理后的三維人體骨骼點(diǎn)數(shù)據(jù),實(shí)時(shí)驅(qū)動(dòng)虛擬人模型運(yùn)動(dòng),生成自然流暢的人物動(dòng)畫。
基于視覺(jué)的運(yùn)動(dòng)估計(jì)方法主要有基于骨骼追蹤和基于深度學(xué)習(xí)的方法。前者往往需要借助于RGBD 攝像頭,Shotton 等[2]將人體運(yùn)動(dòng)和姿態(tài)估計(jì)問(wèn)題映射為分類問(wèn)題,其算法成功應(yīng)用在Kinect V1 和Kinect V2 設(shè)備上,可滿足室內(nèi)動(dòng)作捕捉游戲的基本要求。人體姿態(tài)估計(jì)問(wèn)題在深度學(xué)習(xí)的廣泛應(yīng)用下取得了巨大的進(jìn)步和突破,其中單目人體姿態(tài)估計(jì)是計(jì)算機(jī)視覺(jué)中最基本和最具挑戰(zhàn)性的問(wèn)題之一,其旨在基于性能優(yōu)良的深度神經(jīng)網(wǎng)絡(luò)和強(qiáng)大的數(shù)據(jù)集,得到視頻、圖像和攝像頭中的人體坐標(biāo)信息。Cao 等[3]設(shè)計(jì)并開源了人體姿態(tài)估計(jì)檢測(cè)和分析工具Open Pose。文獻(xiàn)[4]中先后進(jìn)行了2D 多人姿態(tài)估計(jì)的研究并進(jìn)一步提高了精度。Li等[5]首次將深度學(xué)習(xí)的方法應(yīng)用于單張圖片的3D 姿態(tài)估計(jì)。Metha 等[1,6]提出了基于連續(xù)RGB 圖像的3D 姿態(tài)估計(jì)方法,適用于單目RGB 攝像頭并滿足實(shí)時(shí)性,在遮擋和較快速運(yùn)動(dòng)情況下,也能進(jìn)行全身姿態(tài)的恢復(fù)。以上方法都是基于單幀推理的方法進(jìn)行的,沒(méi)有充分利用連續(xù)的運(yùn)動(dòng)序列數(shù)據(jù)之間的相關(guān)性,會(huì)出現(xiàn)一定的抖動(dòng)跳變和不穩(wěn)定性。
在解決遮擋問(wèn)題,提高Kinect 的通用性方面,研究者也開展了很多工作:Yeung 等[7]采用雙Kinect 進(jìn)行雙視角數(shù)據(jù)的融合,解決關(guān)節(jié)位置不一致和自閉塞問(wèn)題;Moon 等[8]采用5 臺(tái)Kinect 傳感器進(jìn)行180°范圍內(nèi)人體跟蹤;李琪等[9]對(duì)兩臺(tái)Kinect 攝像機(jī)計(jì)算的關(guān)節(jié)角數(shù)據(jù)進(jìn)行融合,實(shí)現(xiàn)了相對(duì)穩(wěn)定的人體姿態(tài)追蹤系統(tǒng)。以上的工作均采用融合多視角數(shù)據(jù)的方法進(jìn)行算法改進(jìn),當(dāng)一個(gè)傳感器出現(xiàn)錯(cuò)誤情況時(shí),可以采用另一個(gè)傳感器進(jìn)行修正,然而由于Kinect 視野范圍的局限性,當(dāng)兩臺(tái)Kinect 均出現(xiàn)自遮擋或環(huán)境遮擋的情況時(shí),仍會(huì)出現(xiàn)表現(xiàn)關(guān)節(jié)丟失的情況,而布置5 個(gè)視角以上的攝像機(jī)的標(biāo)定成本和計(jì)算成本會(huì)顯著增加。
本文首先采用單個(gè)Kinect 進(jìn)行運(yùn)動(dòng)序列的采集,獲取Kinect 測(cè)量數(shù)據(jù)并對(duì)實(shí)時(shí)彩色信息進(jìn)行ORPM 單目估計(jì)算法推理;其次針對(duì)單目估計(jì)方法的不穩(wěn)定性,提出了一種時(shí)空優(yōu)化的骨骼點(diǎn)數(shù)據(jù)處理方法,對(duì)運(yùn)動(dòng)序列中的人體姿態(tài)進(jìn)行骨長(zhǎng)約束,保證人體關(guān)鍵肢節(jié)的空間一致性,采用動(dòng)態(tài)適應(yīng)中值濾波算法在時(shí)間維度上平滑運(yùn)動(dòng)序列,將偏離的坐標(biāo)數(shù)據(jù)進(jìn)行替換,同時(shí)又不會(huì)對(duì)運(yùn)動(dòng)曲線過(guò)度平滑;然后采用卡爾曼濾波對(duì)兩種算法的測(cè)量值加權(quán)融合得到最終的姿態(tài)估計(jì)結(jié)果;最后采用四元數(shù)向量插值和逆向運(yùn)動(dòng)學(xué)約束方法,研制了虛擬人動(dòng)畫系統(tǒng),利用優(yōu)化融合的數(shù)據(jù),實(shí)時(shí)驅(qū)動(dòng)虛擬人物模型生成動(dòng)畫。
基于深度學(xué)習(xí)的三維人體姿態(tài)估計(jì)快速發(fā)展,但總體仍囿于局限的室內(nèi)數(shù)據(jù)集,在泛化性和實(shí)際應(yīng)用上表現(xiàn)不足。本章的核心任務(wù)是對(duì)ORPM 單目估計(jì)算法的骨骼點(diǎn)進(jìn)行處理,提高其穩(wěn)定性,以便更好地與Kinect 數(shù)據(jù)進(jìn)行融合。通過(guò)對(duì)單目估計(jì)數(shù)據(jù)添加骨長(zhǎng)約束,保證人體運(yùn)動(dòng)過(guò)程中骨骼的空間一致性;采用動(dòng)態(tài)適應(yīng)中值濾波,自適應(yīng)進(jìn)行濾波窗口的擴(kuò)展和縮放,在時(shí)間維度上對(duì)骨骼數(shù)據(jù)進(jìn)行優(yōu)化。
Kinect V2 采用25 個(gè)關(guān)節(jié)點(diǎn)表示人體某一時(shí)刻的姿態(tài),單目估計(jì)OPRM 算法的編碼結(jié)構(gòu)則為15 個(gè)節(jié)點(diǎn),為了后續(xù)更好地進(jìn)行虛擬人動(dòng)畫系統(tǒng)仿真實(shí)驗(yàn),本文以最契合Unity 3D 引擎角色動(dòng)畫系統(tǒng)的Human3.6M[10]關(guān)節(jié)順序和結(jié)構(gòu)為基準(zhǔn),對(duì)兩者進(jìn)行一致性映射處理。對(duì)于Kinect 人體骨架,刪除手腳末端的手指和腳趾關(guān)節(jié),對(duì)于ORPM 人體骨架,取左肩和右肩的中點(diǎn)作為胸部節(jié)點(diǎn),取胸部節(jié)點(diǎn)和髖節(jié)點(diǎn)的中點(diǎn)作為脊椎節(jié)點(diǎn),統(tǒng)一為Human3.6M 人體骨骼結(jié)構(gòu),反映人體運(yùn)動(dòng)姿態(tài)。采用以髖節(jié)點(diǎn)為根節(jié)點(diǎn)的樹型結(jié)構(gòu)表示人體骨架,表明層次關(guān)系。人體骨架樹型編碼和順序如圖1 所示。
圖1 人體骨架樹型編碼和順序Fig.1 Human skeleton tree coding and sequence
人體結(jié)構(gòu)中骨骼的長(zhǎng)度是固定的,但在檢測(cè)過(guò)程中,人體運(yùn)動(dòng)過(guò)快或環(huán)境噪聲等影響,輸出的姿態(tài)估計(jì)結(jié)果的骨骼長(zhǎng)度有波動(dòng),這是姿態(tài)估計(jì)效果不穩(wěn)定的原因之一。因此本文將約束各個(gè)肢節(jié)長(zhǎng)度的位置,以求得更符合人體運(yùn)動(dòng)規(guī)律的姿態(tài)估計(jì)信息。采集表演者T-Pose 的穩(wěn)定序列,每一段骨長(zhǎng)可由相鄰節(jié)點(diǎn)之間的歐氏距離表示,采用穩(wěn)定序列的樣本均值作為表演者的平均骨骼長(zhǎng)度。如式(1)所示,其中j表示人體關(guān)節(jié)點(diǎn),L為骨骼長(zhǎng)度均值,ε為誤差參數(shù),當(dāng)肢體長(zhǎng)度在范圍[L-ε,L+ε]內(nèi)時(shí),認(rèn)為該節(jié)點(diǎn)長(zhǎng)度沒(méi)有發(fā)生較大的誤差。節(jié)點(diǎn)長(zhǎng)度發(fā)生變化時(shí),對(duì)下位節(jié)點(diǎn)進(jìn)行恢復(fù)。由于不同采集者的體型、位置不同,平均骨骼長(zhǎng)度和誤差范圍也有一定的差距。
以膝關(guān)節(jié)點(diǎn)pi(xi,yi,zi)和足關(guān)節(jié)點(diǎn)pj(xj,yj,zj)為例,關(guān)節(jié)定長(zhǎng)的約束過(guò)程為:
1)建立膝蓋節(jié)點(diǎn)為圓心、肢體長(zhǎng)度為半徑的球體,當(dāng)肢體長(zhǎng)度一定時(shí),踝關(guān)節(jié)一定位于以膝蓋節(jié)點(diǎn)為球心、以肢體長(zhǎng)度為半徑的球面上。
2)求解球心到腳部節(jié)點(diǎn)的空間直線,與球面的交點(diǎn)即為最終肢體定長(zhǎng)后的節(jié)點(diǎn)位置。球心OC=(xi,yi,zi),球面公式如式(2)所示:
3)求解空間直線與球面的交點(diǎn),可以得到兩個(gè)與球面相交點(diǎn)P1、P2,選擇距離足關(guān)節(jié)更近的交點(diǎn)作為最終求解點(diǎn)。經(jīng)過(guò)關(guān)節(jié)長(zhǎng)度限制后,輸出的三維姿態(tài)估計(jì)數(shù)據(jù)骨骼長(zhǎng)度一致,更符合人體運(yùn)動(dòng)規(guī)律。
對(duì)姿態(tài)估計(jì)中的抖動(dòng)情況進(jìn)行討論,運(yùn)動(dòng)過(guò)程中,人體運(yùn)動(dòng)狀態(tài)隨時(shí)間平穩(wěn)變化,某一時(shí)刻的運(yùn)動(dòng)狀態(tài)是上一時(shí)態(tài)運(yùn)動(dòng)的拓展,同時(shí)也是下一時(shí)態(tài)運(yùn)動(dòng)的基準(zhǔn)。基于算法逐幀處理的過(guò)程,抖動(dòng)情況往往是由于某一幀或幾幀數(shù)據(jù)的錯(cuò)誤處理引起的突變。為了保證運(yùn)動(dòng)過(guò)程中的時(shí)間一致性,需要對(duì)關(guān)節(jié)點(diǎn)數(shù)據(jù)進(jìn)行平滑處理,篩去偏移點(diǎn)使數(shù)據(jù)峰值趨于平緩,從而優(yōu)化突變情況。
姿態(tài)估計(jì)的平滑效果與窗口大小逆相關(guān):窗口越大,平滑效果越明顯;反之,平滑效果越接近于原始值,對(duì)不同偏差的幀數(shù)據(jù)應(yīng)采取不同的平滑窗口。因此提出動(dòng)態(tài)適應(yīng)的中值濾波方法,平滑窗口能夠自適應(yīng)地?cái)U(kuò)展和縮放。對(duì)于連續(xù)噪聲或偏移量較大的幀,采用較大的窗口。對(duì)于噪聲較小的幀,采用較小的窗口,在抑制強(qiáng)噪聲的同時(shí)也能最大限度保留運(yùn)動(dòng)細(xì)節(jié),算法過(guò)程包括以下幾個(gè)步驟:
1)對(duì)運(yùn)動(dòng)序列進(jìn)行窗口補(bǔ)齊操作,從x、y、z三個(gè)維度順序計(jì)算每一幀在滑動(dòng)窗口范圍內(nèi)的最大值、最小值和中值。分別代表第s幀第i個(gè)骨骼點(diǎn)坐標(biāo)的測(cè)量值、最大值、最小值和中值。
2)判斷中值是否與最大值或最小值相等,如果滿足條件說(shuō)明樣本不足,對(duì)窗口進(jìn)行2 倍擴(kuò)展;反之,對(duì)窗口進(jìn)行2倍縮放,直到下一次縮放不滿足條件或到達(dá)窗口閾值。窗口穩(wěn)定后進(jìn)入3)。
3)判斷測(cè)量值是否介于最小值和最大值中間,如果滿足條件,說(shuō)明測(cè)量值偏差較小,接近于穩(wěn)定,將測(cè)量值作為返回結(jié)果;否則返回中值。
4)如果增大或縮放后的窗口大小達(dá)到閾值,將測(cè)量值作為該幀的返回結(jié)果。
Kinect 捕獲到的人體姿態(tài)估計(jì)結(jié)果以深度攝像頭為坐標(biāo)原點(diǎn),單目估計(jì)算法的坐標(biāo)原點(diǎn)則為Kinect 設(shè)備的彩色攝像頭,因此采用張氏標(biāo)定法[11]標(biāo)定兩個(gè)攝像頭并求解內(nèi)外參數(shù),確定兩個(gè)攝像頭之間的位姿關(guān)系,保證人體姿態(tài)的空間一致性,雙攝像頭的相對(duì)旋轉(zhuǎn)矩陣R和平移向量T如式(3)和式(4)所示:
其中:R0、R1分別為彩色攝像頭和深度攝像頭的外參中的旋轉(zhuǎn)矩陣,T0、T1為平移向量。
不同算法的采樣頻率不同,模塊處理能力存在差異,在時(shí)間上需要進(jìn)行同步對(duì)齊處理,因此采用時(shí)間配準(zhǔn)的方法將Kinect 和單目估計(jì)算法的采集數(shù)據(jù)對(duì)齊至同一時(shí)刻,減少時(shí)間誤差。雙算法的采集序列如圖2 所示。
圖2 不同算法的采樣序列Fig.2 Sampling sequences of different algorithms
內(nèi)插外推法[12]利用已有的采樣情況預(yù)估目標(biāo)時(shí)刻的狀態(tài),將高頻采樣數(shù)據(jù)同步至低頻采樣率的姿態(tài)估計(jì),實(shí)現(xiàn)雙算法的時(shí)間對(duì)齊,雙算法的采樣頻率保持一致在24 FPS。假設(shè)姿態(tài)估計(jì)采集在ti-1、ti、ti+1時(shí)刻下的真實(shí)值記錄為αi-1、αi、αi+1,則在插值點(diǎn)tj處的值表示為式(5):
本節(jié)介紹實(shí)現(xiàn)基于卡爾曼濾波的數(shù)據(jù)融合方法,使用Kinect 和ORPM 算法的測(cè)量值以測(cè)量噪聲協(xié)方差矩陣R的逆矩陣為權(quán)重因子生成融合結(jié)果。人體運(yùn)動(dòng)可抽象為線性運(yùn)動(dòng),通過(guò)離散時(shí)間下的狀態(tài)空間模型對(duì)運(yùn)動(dòng)系統(tǒng)進(jìn)行建模,如式(6)[8]所示:
其中:yk為k時(shí)刻的測(cè)量向量,xk為狀態(tài)向量,vk為測(cè)量噪聲向量,Hk為測(cè)量轉(zhuǎn)移矩陣。
卡爾曼濾波過(guò)程包括預(yù)測(cè)和更新兩個(gè)階段。預(yù)測(cè)階段包括計(jì)算出當(dāng)前運(yùn)動(dòng)時(shí)刻的預(yù)測(cè)狀態(tài)向量值和誤差協(xié)方差矩陣兩步驟,如式(7)和式(8)所示:
其中:是基于k-1 時(shí)刻之前的觀測(cè)值在時(shí)間k的測(cè)量值先驗(yàn)狀態(tài)估計(jì);Pk|k-1是基于k-1 時(shí)刻之前的觀測(cè)值在時(shí)間k的誤差協(xié)方差矩陣先驗(yàn)估計(jì);Fk為k時(shí)刻的線性狀態(tài)轉(zhuǎn)移矩陣;Gk為輸入控制矩陣;uk為輸入控制向量;Qk為協(xié)方差對(duì)角矩陣,表示外界環(huán)境過(guò)程噪聲。
更新階段首先計(jì)算卡爾曼增益Kk,如式(9)所示,其中和分別為混合后的測(cè)量矩陣和測(cè)量噪聲協(xié)方差矩陣;然后計(jì)算經(jīng)過(guò)線性狀態(tài)轉(zhuǎn)移矩陣得到的狀態(tài)向量估計(jì),如式(10)所示,最后估計(jì)誤差協(xié)方差矩陣Pk|k,如式(11)所示:
在卡爾曼濾波的過(guò)程中,測(cè)量向量呈現(xiàn)為在樣本均值周圍高斯分布,測(cè)量噪聲與測(cè)量值和樣本均值的距離成正相關(guān)關(guān)系:噪聲越大表明測(cè)量值偏移樣本均值越遠(yuǎn),則獲得的權(quán)重越小;噪聲越小則測(cè)量值偏移樣本均值越小,則獲得的權(quán)重越大。因此卡爾曼濾波的加權(quán)融合策略為:以測(cè)量噪聲協(xié)方差逆矩陣為權(quán)重,對(duì)兩種算法結(jié)果進(jìn)行加權(quán)平均融合,如式(12)所示:
其中為融合后的測(cè)量向量。
虛擬人物運(yùn)動(dòng)驅(qū)動(dòng)方法包括四元數(shù)向量插值和逆向運(yùn)動(dòng)學(xué)約束。四元數(shù)向量是三維旋轉(zhuǎn)的一種表達(dá)形式,具備計(jì)算量小、適應(yīng)性強(qiáng)的特性。由于數(shù)據(jù)獲取模塊的速率只能達(dá)到24 FPS,為了更好地展示運(yùn)動(dòng)情況,采取球形插值的方式獲得更平滑的動(dòng)畫效果。逆向運(yùn)動(dòng)學(xué)是基于末端節(jié)點(diǎn)約束中間節(jié)點(diǎn)的技術(shù),可以對(duì)四元數(shù)向量驅(qū)動(dòng)方法進(jìn)行修正,使運(yùn)動(dòng)過(guò)程更符合規(guī)律。
四元數(shù)向量插值方法可以控制虛擬角色運(yùn)動(dòng),同時(shí)避免歐拉角方法的萬(wàn)向鎖問(wèn)題和提高計(jì)算效率?;谇拔慕⒌娜梭w骨骼模型,節(jié)點(diǎn)自由度的更新是由父節(jié)點(diǎn)傳遞下去的,父節(jié)點(diǎn)的旋轉(zhuǎn)平移會(huì)影響子節(jié)點(diǎn),而子節(jié)點(diǎn)的變化不會(huì)影響父節(jié)點(diǎn)。四元數(shù)向量驅(qū)動(dòng)方法包括以下幾個(gè)步驟:
1)計(jì)算當(dāng)前幀每個(gè)肢干的特征矢量,矢量由子節(jié)點(diǎn)減去父節(jié)點(diǎn)坐標(biāo)得到,如式(13)所示:
其中:i、j為樹型編碼中具備父子關(guān)系的節(jié)點(diǎn)索引;P為特征矢量。
2)定義t時(shí)刻的四元數(shù)旋轉(zhuǎn)向量qt,如式(14)所示:
其中:w表示相鄰幀中剛體肢干的旋轉(zhuǎn)角度;v表示垂直于qt-1、qt方位向量的旋轉(zhuǎn)軸單位向量;i,j,k 為虛數(shù)單位。
3)采用四元數(shù)三維旋轉(zhuǎn)公式表示運(yùn)動(dòng)過(guò)程,如式(15)所示:
4)采用球面插值對(duì)t和t-1 幀中的虛擬角色骨骼特征矢量進(jìn)行插值操作,過(guò)程可描述為式(16):
其中λ∈[0,1]表示平滑程度:數(shù)值越接近0 表示兩幀之間插值點(diǎn)越多,表現(xiàn)越平滑;數(shù)值越接近1 表示兩幀之間插值點(diǎn)越少,平滑程度越低。
采用四元數(shù)向量插值方法可以得到平滑運(yùn)動(dòng)的虛擬人動(dòng)畫,然而存在不滿足人體運(yùn)動(dòng)規(guī)律的現(xiàn)象,仍需要采用運(yùn)動(dòng)學(xué)方法進(jìn)行修正和約束。逆向運(yùn)動(dòng)學(xué)的原理為基于人體樹型結(jié)構(gòu)的特點(diǎn),根據(jù)子節(jié)點(diǎn)帶動(dòng)父節(jié)點(diǎn),逐層傳遞運(yùn)動(dòng)約束。給出末端關(guān)節(jié)位置V時(shí),可求解該關(guān)節(jié)的旋轉(zhuǎn)角度R,如式(17)所示:
循環(huán)坐標(biāo)下降法(Cyclic-Coordinate Descent,CCD)是逆向運(yùn)動(dòng)學(xué)求解的一種數(shù)值方法,通過(guò)反復(fù)迭代和逼近,找到人體運(yùn)動(dòng)的穩(wěn)定狀態(tài)。CCD 方法在迭代的過(guò)程中,需要由末端節(jié)點(diǎn)調(diào)節(jié)直至根節(jié)點(diǎn)的所有節(jié)點(diǎn)旋轉(zhuǎn)信息,求解復(fù)雜度較大。實(shí)際運(yùn)動(dòng)過(guò)程中,末端節(jié)點(diǎn)的位姿關(guān)系并不會(huì)影響所有節(jié)點(diǎn)的狀態(tài)。例如手腕的變化會(huì)影響肩部和肘部的狀態(tài),但不會(huì)影響髖節(jié)點(diǎn)的自由度。
因此在CCD 方法的基礎(chǔ)上添加約束項(xiàng),使得求解過(guò)程更符合人體運(yùn)動(dòng)規(guī)律。定義節(jié)點(diǎn)J,當(dāng)前關(guān)節(jié)點(diǎn)旋轉(zhuǎn)角度θi的運(yùn)動(dòng)范圍為[α,β],運(yùn)動(dòng)約束過(guò)程可表示為式(18)。如果當(dāng)前幀的計(jì)算結(jié)果符合人體生理特征范圍,無(wú)須進(jìn)行運(yùn)動(dòng)學(xué)約束;反之,則將當(dāng)前肢節(jié)旋轉(zhuǎn)角度約束至區(qū)間內(nèi)。
為了驗(yàn)證時(shí)空優(yōu)化的骨骼點(diǎn)數(shù)據(jù)處理方法對(duì)單目三維姿態(tài)估計(jì)的有效性,采集了一段包含異常狀態(tài)的連續(xù)序列,其中圖3(a)為交叉雙臂動(dòng)作中連續(xù)的6 幀。圖3(b)為處理前單目估計(jì)算法處理的三維姿態(tài),紅色圓圈標(biāo)注的位置為骨骼變形和塌陷的情況,可以看出在第3、第4 和第6 幀中,人體骨架出現(xiàn)了較為明顯的骨長(zhǎng)變化,第6 幀中人體胸部附近出現(xiàn)了關(guān)節(jié)錯(cuò)位的情況。圖3(c)為骨長(zhǎng)約束后的三維姿態(tài)圖,可以看出處理后的骨架之間的間距變大,塌陷和變形的情況得到解決,具有良好的穩(wěn)定性。
圖3 運(yùn)動(dòng)序列處理Fig.3 Motion sequence processing
空間中任意兩個(gè)三維點(diǎn)集的誤差可由最小二乘距離[13]表示。當(dāng)最小二乘距離越小時(shí),證明兩幀之間的相關(guān)度越高,未發(fā)生突變,反之表明幀之間很可能出現(xiàn)了異常,需要進(jìn)行空間約束?;谌梭w運(yùn)動(dòng)的平穩(wěn)性和連續(xù)性,相鄰幀三維點(diǎn)集的最小二乘距離值應(yīng)趨向于較小值。針對(duì)該序列處理前后的最小二乘距離對(duì)比情況如表1 所示,可以看出處理后的幀間誤差更小,證明處理后的人體運(yùn)動(dòng)更平穩(wěn)。
表1 幀間最小二乘距離Tab.1 Least squares distance between frames
平滑濾波對(duì)單目姿態(tài)估計(jì)過(guò)程中的時(shí)間一致性具有一定作用。對(duì)整個(gè)采集的運(yùn)動(dòng)序列進(jìn)行可視化展示,表現(xiàn)了使用不同平滑算法處理的對(duì)比結(jié)果,自上而下分別為原始姿態(tài)估計(jì)結(jié)果、中值濾波優(yōu)化結(jié)果和本文方法的結(jié)果,如圖4 所示。紅色藍(lán)色和綠色曲線分別表示17 組三維骨骼點(diǎn)在x、y、z三個(gè)維度的位置隨時(shí)間變化情況。可以看出中值濾波的平滑效果有限,在500 幀后發(fā)生連續(xù)跳變和抖動(dòng)時(shí),不能很好地進(jìn)行平滑。動(dòng)態(tài)適應(yīng)中值濾波方法在解決抖動(dòng)問(wèn)題上具有明顯的優(yōu)勢(shì):具有更強(qiáng)的平滑效果、能消除大部分劇烈的抖動(dòng)、對(duì)異常數(shù)據(jù)進(jìn)行修復(fù)、更符合人體運(yùn)動(dòng)規(guī)律。
圖4 運(yùn)動(dòng)序列中關(guān)節(jié)點(diǎn)坐標(biāo)變化情況Fig.4 Coordinate changes of joint points in motion sequence
為了驗(yàn)證融合算法的有效性,使用微軟Kinect V2 和三維人體動(dòng)作捕捉系統(tǒng)OptiTrack 同時(shí)采集運(yùn)動(dòng)序列,實(shí)驗(yàn)場(chǎng)景如圖5 所示。其中OptiTrack 包括8 個(gè)前視紅外攝像頭,架于采集室上方四周,實(shí)驗(yàn)人員穿戴包含37 個(gè)光學(xué)標(biāo)定點(diǎn)的捕捉服裝。Kinect 正對(duì)人體,在距離2 m、離地1.5 m 的區(qū)域范圍內(nèi)進(jìn)行動(dòng)作和姿態(tài)數(shù)據(jù)的采集。
圖5 實(shí)驗(yàn)場(chǎng)景Fig.5 Experimental scene
由表演者在正對(duì)Kinect 采集范圍內(nèi)進(jìn)行揮手、行走、蹲下和雙臂交叉、側(cè)身?yè)羧葎?dòng)作。在實(shí)驗(yàn)對(duì)象前方置放高腳椅,保證在采集序列中關(guān)節(jié)存在環(huán)境遮擋情況。圖6 從左到右依次為采用Kinect V2、本文融合方法和OptiTrack 設(shè)備數(shù)據(jù)生成的動(dòng)畫效果,從整體來(lái)看,虛擬人動(dòng)畫能準(zhǔn)確反映出實(shí)驗(yàn)人員的肢體動(dòng)作,在動(dòng)畫應(yīng)用上具備可行性;同時(shí)仍存在一定的不足,如綠色圓圈標(biāo)注的位置,虛擬人物末端關(guān)節(jié)動(dòng)畫出現(xiàn)了不協(xié)調(diào)的情況,這是骨骼點(diǎn)的數(shù)量較少造成的,頭部、手腕、腳踝的部位僅用一個(gè)點(diǎn)去表示,存在二義性旋轉(zhuǎn)問(wèn)題。
圖6 生成的動(dòng)畫效果Fig.6 Generated animation effects
動(dòng)畫效果反映了姿態(tài)估計(jì)算法數(shù)據(jù)的準(zhǔn)確性。將錯(cuò)誤之處用紅色圓圈進(jìn)行標(biāo)注,當(dāng)身體全部關(guān)節(jié)都出現(xiàn)在視野中時(shí),Kinect 數(shù)據(jù)和融合方法都能準(zhǔn)確展現(xiàn)運(yùn)動(dòng)姿態(tài),在雙臂交叉和下蹲動(dòng)作中,Kinect 出現(xiàn)了關(guān)節(jié)推斷不準(zhǔn)確和關(guān)節(jié)錯(cuò)亂的情況,融合算法能夠基本反映運(yùn)動(dòng)姿態(tài)。此外,當(dāng)出現(xiàn)人物遮擋時(shí),Kinect 傾向于優(yōu)先識(shí)別距離較近的實(shí)驗(yàn)對(duì)象,原本追蹤的人體丟失,動(dòng)畫展現(xiàn)為前面人物的動(dòng)作;本文方法并未丟失目標(biāo)人體的檢測(cè),更接近動(dòng)捕設(shè)備的動(dòng)畫效果。
人體姿態(tài)估計(jì)的變化情況可由每個(gè)關(guān)節(jié)的自由度變化表示。以右臂為例,右肩有3 個(gè)旋轉(zhuǎn)自由度,右肘有兩個(gè)旋轉(zhuǎn)自由度。圖7、8 分別為在揮手和側(cè)身?yè)羧瓌?dòng)作序列中右肩和右肘的變化情況。可以看出,在揮手動(dòng)作中,由于并未存在遮擋情況,Kinect V2、文獻(xiàn)[14]方法以及均值融合方法和本文方法在表現(xiàn)上較為一致,均與動(dòng)捕系統(tǒng)的結(jié)果相差無(wú)幾。在側(cè)身?yè)羧瓌?dòng)作中,由于存在右臂對(duì)左臂的遮擋情況,Kinect的變化趨于平緩,沒(méi)有較大的周期性變化,波峰和波谷較小,不能準(zhǔn)確反映側(cè)身?yè)羧膭?dòng)作變化;文獻(xiàn)[14]方法在波峰和波谷的位置出現(xiàn)了較多的鋸齒狀抖動(dòng),僅能在一定程度上反映防遮擋情況;而采用均值融合的方法距離真實(shí)值仍存在較大的偏差,如圖8(a)、(d)、(e)所示。本文方法獲取的關(guān)節(jié)角度在多數(shù)關(guān)節(jié)角的波峰和波谷位置更接近于OptiTrack 系統(tǒng),這說(shuō)明融合方法在處理遮擋中具備一定的有效性。
圖7 揮手動(dòng)作中右肩和右肘的角度變化情況Fig.7 Changes in angles of right shoulder and right elbow during waving motion
圖8 側(cè)身?yè)羧瓌?dòng)作中右肘和右腕的角度變化情況Fig.8 Changes in angles of right elbow and right wrist in sideways punching motion
虛擬人動(dòng)畫系統(tǒng)包括場(chǎng)景生成、數(shù)據(jù)捕獲、數(shù)據(jù)優(yōu)化和處理以及人物運(yùn)動(dòng)驅(qū)動(dòng)模塊,如圖9 所示,其中場(chǎng)景生成包括虛擬人物模型與環(huán)境的搭建,SMPL(Skinned Multi-Person Linear)人體模型[14]是一個(gè)基于深度學(xué)習(xí)的層次結(jié)構(gòu)虛擬角色模型,包括頂點(diǎn)、球形骨骼點(diǎn)、紋理貼圖和骨骼蒙皮,可以省去較為繁雜的建模工作。場(chǎng)景建模包括外觀設(shè)計(jì)、材質(zhì)貼圖和場(chǎng)景渲染步驟。
圖9 虛擬人動(dòng)畫系統(tǒng)流程Fig.9 Flowchart of virtual human animation system
將SMPL 模型導(dǎo)入U(xiǎn)nity3D 游戲引擎,然后用腳本系統(tǒng)建立模型關(guān)節(jié)節(jié)點(diǎn)和表演者運(yùn)動(dòng)控制節(jié)點(diǎn)的映射關(guān)系,通過(guò)傳輸控制協(xié)議(Transmission Control Protocol,TCP)將融合數(shù)據(jù)傳輸至引擎中,映射給角色模型。數(shù)據(jù)捕獲模塊包括Kinect 數(shù)據(jù)以及ORPM 單目估計(jì)算法推理數(shù)據(jù)的獲??;數(shù)據(jù)處理優(yōu)化模塊以及人物運(yùn)動(dòng)驅(qū)動(dòng)模塊的流程在前面章節(jié)已經(jīng)介紹。表演者可以在攝像頭前表演身體姿態(tài),系統(tǒng)將進(jìn)行三維人體姿態(tài)估計(jì)和優(yōu)化處理,驅(qū)動(dòng)虛擬人物生成動(dòng)畫,場(chǎng)景更新。
圖10 為表演者在T-Pose、舉手、踢腿、下蹲和夜間抬手的采集場(chǎng)景以及不同動(dòng)畫生成方法的對(duì)比。從圖10 可以看出:文獻(xiàn)[14]方法僅能在光照良好的條件下使用,在夜晚并未檢測(cè)出抬手動(dòng)作,模型呈現(xiàn)為初始動(dòng)作;歐拉角方法未進(jìn)行逆向運(yùn)動(dòng)學(xué)約束,在抬手、踢腿和下蹲中均出現(xiàn)了一定的腳部下陷進(jìn)地面的情況,并容易出現(xiàn)萬(wàn)向鎖問(wèn)題,如抬腿動(dòng)作的動(dòng)畫。
圖10 表演者部分動(dòng)作與動(dòng)畫效果Fig.10 Part of performer’s actions and corresponding animation effects
從表2 的客觀指標(biāo)來(lái)看,本文方法使用了四元數(shù)向量插值的運(yùn)動(dòng)方法,動(dòng)畫達(dá)到60 FPS,相比文獻(xiàn)[14]提高了兩倍,并且環(huán)境適應(yīng)性更好。因此證明,虛擬人運(yùn)動(dòng)系統(tǒng)能滿足動(dòng)畫和游戲場(chǎng)景的基本需求。
表2 不同動(dòng)畫生成方法對(duì)比Tab.2 Comparison of different animation generation methods
本文采用Kinect 設(shè)備捕獲人體運(yùn)動(dòng)序列,針對(duì)單目估計(jì)算法的不穩(wěn)定性,提出了時(shí)空優(yōu)化的骨骼點(diǎn)處理方法,針對(duì)Kinect 的遮擋問(wèn)題,提出了結(jié)合ORPM 單目估計(jì)算法和Kinect 測(cè)量數(shù)據(jù)融合的方法,最后基于四元數(shù)向量插值和逆向運(yùn)動(dòng)學(xué)約束,研制了虛擬人動(dòng)畫系統(tǒng),與傳統(tǒng)Kinect 算法相比,本文算法能夠良好應(yīng)對(duì)部分遮擋情況,無(wú)額外成本、易架設(shè),在動(dòng)畫應(yīng)用方面具備可行性。
同時(shí)也存在一些不足:基于深度學(xué)習(xí)的姿態(tài)估計(jì)算法精度和適用廣度還有待提升,但采用深度學(xué)習(xí)方法輔助傳統(tǒng)方法進(jìn)行適用性拓展是一個(gè)可行的探究方法。除此之外,由于關(guān)節(jié)點(diǎn)數(shù)量限制,末端關(guān)節(jié)存在二義性旋轉(zhuǎn)問(wèn)題,而良好的角色動(dòng)畫除了要求肢體動(dòng)作流暢外,還需要兼顧真實(shí)的面部表情和手部動(dòng)作,同時(shí)這也是近年來(lái)計(jì)算機(jī)視覺(jué)領(lǐng)域的熱點(diǎn)問(wèn)題,一種可能的方案是建立精細(xì)的角色模型,采用基于深度學(xué)習(xí)的方法進(jìn)行手部和面部表情數(shù)據(jù)獲取,將人體骨骼動(dòng)畫、面部動(dòng)畫和手部細(xì)節(jié)動(dòng)畫進(jìn)行混合,獲得更高精度的動(dòng)畫,這也是未來(lái)工作需要考慮的。