景 智
(北京信息科技大學計算機學院,北京 100192)
影視特效和游戲娛樂的制作要求日新月異,虛擬角色成為熱點之一,并迅速得到應用。虛擬角色,是盡可能根據(jù)真實人體的形態(tài)去構建虛擬人體,并根據(jù)真實人身體和面部運動特點去驅動計算機三維虛擬角色模型運動。真人演員不需要親自去扮演電影和游戲中的人物,而是穿戴特殊的運動捕捉設備,將自己的動作映射到虛擬角色動作上,從而完成拍攝和錄制工作。
近年來,隨著計算機硬件性能迅速提高,以及計算機圖形渲染技術不斷提升,虛擬角色的渲染效果已經接近于真實人體的皮膚質感,在普通的家用計算機上就可以制作和實時呈現(xiàn)。但是,運動捕捉和面部捕捉的實現(xiàn)方法依然需要穿戴復雜的傳感器設備,并且需要在專業(yè)的、昂貴的攝影棚中完成。
在攝影棚中,運動捕捉是通過排布在攝影棚空間中的多個視頻捕捉設備來捕捉人體佩戴的反光標記點,或者通過穿戴在身體上的慣性傳感器設備,將人體各個關節(jié)的運動狀況估算并記錄下來。這就需要真人演員預先穿上緊身的動捕服裝,或者通過軋帶和魔術貼等方式將設備固定在自己身體的指定位置。有些運動捕捉設備還需要演員做幾個標準動作來進行設備初始坐標系的標定。
對于非專業(yè)人員來說,這些繁復的工作無疑會帶來額外的攝制成本。人們迫切需要一種更為簡便的方式來完成身體姿態(tài)和運動數(shù)據(jù)的捕捉。本文提出一種基于深度學習的單攝像頭無標記點運動捕捉方法:首先,基于OpenPose等算法實時計算得到目標的2D關節(jié)位置;然后,推算得到3D骨骼信息,并反饋為虛擬角色的身體運動。還研究了無標記點面部捕捉的方法和數(shù)據(jù)平滑遷移算法,進行了功能和性能測試,取得了良好的輸出效果。
目前,有人研究了一種基于多相機的無標記點運動捕捉方法,需要8-12臺RGBD相機來完成拍攝空間的布置。每臺RGBD相機可以同時采集高分辨率的可見光圖像以及深度圖像,通過深度圖像中的信息,系統(tǒng)可以分析得到演員的基本身體輪廓并預測他的骨骼關節(jié)位置;通過多臺相機的數(shù)據(jù)融合,可以實時構建演員的身體三維模型并記錄所有的運動數(shù)據(jù),全程不需要演員穿戴專門的設備,只需要穿貼身舒適的服裝即可。
但是,這種方法依然需要專門的拍攝空間布置工作,而且,深度圖像的拍攝采用紅外散斑數(shù)據(jù)采集和融合而成,該技術具有較大局限性,容易受到外界干擾、測量距離較短、數(shù)據(jù)精度較差等問題。因此,沒有得到推廣和應用。
本文研究使用一臺單目相機作為運動捕捉的核心設備。第一步,基于著名的OpenPose庫進行編譯和修改,實現(xiàn)實時的2D關節(jié)點捕捉與記錄。
傳統(tǒng)的姿態(tài)識別算法采用了自頂而下的方法:首先找到目標人體,然后再進行姿態(tài)估計;因此對于多人識別的支持不夠理想,主要原因在于人數(shù)規(guī)模和人的具體位置無法固定,并且人與人之間存在遮擋關系。這導致無法抽取出獨立的單人個體,也無法保證人數(shù)較多的情況下系統(tǒng)的實時性。
OpenPose是專為多人姿態(tài)識別和捕捉而設計的人工智能算法庫,它采用了自下而上的設計思想:先檢測得到每個關節(jié)點,然后將它們與人的個體聯(lián)系起來,最終實現(xiàn)對多人姿態(tài)的實時檢測和估計。關節(jié)檢測和關聯(lián)的過程采用了獨創(chuàng)的部分關聯(lián)場(Part Affinity Fields,簡稱PAF)算法。
原始圖像被輸入到并列的兩個CNN神經網絡中,居上的網絡負責計算置信度,居下的網絡負責計算得到PAF數(shù)據(jù)(即可能的關節(jié)2D位置,以及2D方向向量)。如圖1所示。

圖1 OpenPose的PAF預測神經網絡

其中c表示某段肢體名稱,k表示某個單人個體。據(jù)此可以得到這兩個關節(jié)之間是否真正連接的置信度信息,并求取所有相連關節(jié)點的最優(yōu)匹配方案。
有了全部的候選關節(jié)連接圖譜之后,就可以將共享同一個候選關節(jié)的連接數(shù)據(jù)整合到一起,形成對于每個個體的全身姿勢檢測數(shù)據(jù),也就是人員的2D關節(jié)點位置數(shù)據(jù)。如圖2所示。

圖2 OpenPose的2D識別結果
OpenPose可以返回穩(wěn)定可靠的多人實時運動捕捉數(shù)據(jù),但是它只存在于2D圖像空間內,因此無法映射到3D的虛擬角色身體上,也就無法用作后續(xù)的業(yè)務使用。為了解決這個問題,需要引入第二個神經網絡來解決2D人體關節(jié)到3D人體關節(jié)的預測問題。
這個神經網絡采用兩個線性連接層,每個連接層都依次經過了線性回歸,數(shù)據(jù)平滑和歸一化(Batch Normalization),數(shù)據(jù)激活(Rectified Linear Units,即ReLu),以及數(shù)據(jù)舍棄(dropout)的過程。
基于檢測的模型對于2D關節(jié)點檢測的表現(xiàn)更好,而在3D空間下,由于數(shù)據(jù)的非線性程度高,輸出空間大,所以適合采用基于回歸的模型。采用了Human3.6M提供的數(shù)據(jù)進行3D關節(jié)數(shù)據(jù)訓練,它包含了大約210萬張同時帶有2D和3D姿態(tài)標簽的圖像數(shù)據(jù),其中部分可以用作測試集使用。基于該方法計算得到的3D關節(jié)點數(shù)據(jù)如圖3所示。

圖3 從2D到3D關節(jié)點的過程
在將輸出的3D關節(jié)點數(shù)據(jù)應用于虛擬角色之前,還需要考慮多人識別時的目標跟蹤問題。因為,OpenPose本身并不記錄某個連續(xù)運動的角色信息,它所返回的個體ID完全取決于當前幀圖像的識別結果。同一個角色在一段時間的視頻畫面中對應的ID很可能是反復變化的,這無法滿足對運動捕捉和映射的基本需求。
引入Yolo4作為目標識別和跟蹤的輔助工具,采用CNN神經網絡領域中最優(yōu)秀的各種優(yōu)化策略,包括:數(shù)據(jù)處理、主干網絡、網絡訓練、激活函數(shù)、損失函數(shù)等各個方面,都有著不同程度的優(yōu)化。基于Yolo4進行個體目標跟蹤的流程如下:
1) 讀取當前幀圖像,進行行人目標檢測;
2) 獲取目標檢測框的位置,及各檢測框圖像塊的深度特征;
3) 根據(jù)置信度參數(shù)對檢測框進行過濾,刪除置信度不高的檢測框,留下最佳的目標檢測框;
4) 使用Kalman濾波器,預測目標在當前幀的位置;
5) 更新Kalman追蹤器的參數(shù)及特征,追蹤并發(fā)聵目標ID和運動情況;
6) 對于目標消失,以及新目標出現(xiàn)等情況進行獨立的判斷和反饋。
整個多人跟蹤和運動捕捉系統(tǒng)的運行流程,如下圖4所示。

圖4 多人跟蹤和運動捕捉系統(tǒng)流程圖
采用單獨的面部捕捉攝像頭和頭盔支架來近距離采集人的面部圖像信息。該設備帶有獨立的補光系統(tǒng),適合獨立使用或者與其它系統(tǒng)結合使用。
雖然身體識別所用的攝像頭也可以用于面部識別,但是,該攝像頭的位置需要固定在場地的角落,與演員的位置關系無法確定,也很容易出現(xiàn)臉部被遮擋的情形;又因為面部的特征點遠多于身體特征點,如果無法準確和完整的觀察,是很容易丟失或者抖動的,所以,還是采用獨立的采集系統(tǒng)為宜。如圖5所示。

圖5 面部捕捉專用攝像頭和支架
采用OpenCV或者dlib等開源的人臉圖像識別算法,可以得到人臉的68個控制點(landmark)數(shù)據(jù),各個控制點在3D人臉上的位置,如圖6所示。

圖6 三維人臉模型的控制點
各個控制點和人臉關鍵位置的對應關系如表1所示。

表1 人臉模型控制點關系表
人臉的三維控制點可以直接用于虛擬角色面部網格的控制,本文使用了徑向基函數(shù)(Radial Basis Function,即RBF)方法來完成控制操作。
徑向基函數(shù)RBF插值,也就是對空間的一些3D離散點之間進行平滑插值。假設在3維空間中有N個離散點Xi,那么對于任意一點x,有以下函數(shù)
其中αi是一個常數(shù)項,g(x)表示徑向基函數(shù),P(x)=P(a,b,c)=c0+c1a+c2b+c3c表示一個多項式參數(shù)。根據(jù)已知的N個離散點Xi,可以構建出N個方程:Fi=F(Xi),據(jù)此構建一個N+4的線性方程組F=GA,其中F=(F1,F(xiàn)2,…,F(xiàn)N,0,0,0,0),A=(α0,α1,…,αN,c0,c1,c2,c3),G是一個(N+4,N+4)矩陣。求解這個線性方程組即可得到空間插值變換的所有必要參數(shù)。
如果預設的空間離散點即為人臉的三維控制點,那么要將面部表情遷移到虛擬人臉網格上,也就是將人臉網格上的每一點都通過RBF插值計算得到新的位置。這一方法不需要再設置虛擬角色的面部骨骼,也不需要額外的面部標記點;方便快速,運行結果穩(wěn)定可靠。
根據(jù)OpenPose的輸出骨骼數(shù)據(jù)信息來構建虛擬角色的模型骨骼。骨骼結構如圖7所示。

圖7 人體骨骼關節(jié)關系圖
各個骨骼關節(jié)點與實際人體位置的對應關系,如表2所示。

表2 人體骨骼關節(jié)點關系表
由此生成的虛擬角色的三維測試模型和骨骼,如圖8所示。

圖8 虛擬角色模型和骨骼數(shù)據(jù)
使用GTX1060Ti顯卡來運行OpenPose,2D轉3D,以及Yolo4目標跟蹤這三組神經網絡模型,并將結果轉換為三維世界坐標和姿態(tài),傳遞給Unity端顯示的三維角色骨骼,進而驅動角色進行運動。具體的運動遷移效果如圖9所示。

圖9 三維角色運動遷移
角色的面部運動則通過獨立的攝像頭采集,獲取面部控制點坐標,并通過RBF變形算法控制面部網格頂點運動。面部不需要額外再設置骨骼關節(jié)點,也不需要蒙皮操作,直接執(zhí)行頂點動畫即可。
經過測試,該角色的運動控制和面部捕捉控制算法所需時間約為50ms左右,對應系統(tǒng)實時運行的幀速率在20到25幀/秒,可以滿足一般影視特效和游戲娛樂系統(tǒng)的需求。具體的時間記錄如表3所示。

表3 系統(tǒng)運行每幀時間資源表
本文研究了一種基于單目攝像頭的運動捕捉系統(tǒng)及其實現(xiàn)方法。該方法采集多人運動的可見光圖像,使用OpenPose算法獲取每個人的2D實時運動關節(jié)點;再通過一個線性回歸神經網絡將2D關節(jié)轉換為3D關節(jié)點,并且,通過Yolo4人體識別模塊,將畫面中的角色單獨抽取出來,并賦予一個運動時的ID,輸出的運動捕捉數(shù)據(jù)已經可以直接傳遞給后續(xù)采集和渲染端軟件使用。
本文研究的另一個方法是基于單目攝像頭的面部捕捉設備。該方法負責近距離采集面部的68個控制點信息,然后,通過控制點的RBF變換來實時變換虛擬角色面部的頂點,實現(xiàn)面部表情動畫的播放。
該方法操作簡單、價格低廉、識別準確率高、運行穩(wěn)定,可以直接與多種后端游戲引擎和渲染工具對接,因此,據(jù)有較高的研究和使用價值。但是,該方法運行的幀速率不高,神經網絡識別的關節(jié)點在運動過程中依然存在不穩(wěn)定性,或者在拍攝環(huán)境復雜的情況下將關節(jié)關聯(lián)到錯誤的目標個體上,進一步的研究,優(yōu)化系統(tǒng)功能,解決和改善這些問題,是下一步主要研究方向。