王志勇,王從藝,張子豪,袁銘擇,夏時洪
1(移動計算與新型終端北京市重點實驗室(中國科學院 計算技術研究所 前瞻研究實驗室),北京 100190)
2(中國科學院大學,北京 100049)
無標記虛擬人運動捕獲主要研究從彩色圖像或深度圖像中重建人體和人臉運動的方法.Xia 等人[1]對當前的人體運動捕獲與合成方法進行了整理和總結.與有標記的運動捕獲系統(tǒng)相比,無標記運動捕獲系統(tǒng)具有對演員干擾小、成本低、使用方便等優(yōu)點,可以應用于視頻直播、交互游戲以及各種其他虛擬人相關的應用中.
在演員表演或人們的日常生活者中,往往通過身體姿勢和臉部表情共同表達自己的情緒或者行為.比如,人在表達喜悅或者憤怒的表情時,往往會帶有相應的動作.同樣地,人在進行動作時,臉上也會帶有相應的表情.因此,高真實感的虛擬人動畫中往往需要同時具有面部和身體運動捕獲結果.然而,現(xiàn)有的運動捕獲系統(tǒng)大多將面部和人體的運動捕獲分開來,這就造成了需要后續(xù)再進行運動捕獲結果合并.并且,后續(xù)進行運動捕獲結果合并時,可能會出現(xiàn)面部運動中的頭部動作和人體運動中的頭部動作不匹配,或者兩次運動不能完全同步的問題.于是產生了同時進行人體和面部運動捕獲的需求.
Vicon cara[2]是一種可以同時捕獲面部運動和身體運動的捕獲系統(tǒng).這個系統(tǒng)要求場地四周架設紅外相機,用戶穿好帶有標記點的緊身衣,臉上貼好標記點的同時,戴上配有攝像機的頭盔.這些額外的要求不但大大提高了運動捕獲成本,而且難免會對演員的表演造成干擾.此外,這類方法往往還需要手工制定標記點的對應關系.雖然已有研究者[3]對自動標記點標注的方法進行了研究,但目前提供的方法需要消耗時間,并且會影響系統(tǒng)的穩(wěn)定性.
為此,我們設計了一種在無標記點的情況下進行面部捕獲和身體運動捕獲的方法.利用視場角小但分辨率較高的彩色相機捕獲面部運動,同時使用視場角大但分辨率較低的Kinect 深度相機捕獲人體運動,以實現(xiàn)面部和身體運動的協(xié)同捕獲.
在開始捕獲之前,首先對兩個相機進行時間同步和空間標定,然后開始數據捕獲.捕獲完成之后,首先把兩部分運動捕獲結果分別進行運動重建,然后根據相機標定結果把兩部分運動結合起來,并利用兩個相機的信息差異來幫助改善捕獲結果:針對身體捕獲的Kinect[4]中含有彩色圖像所不具有的真實的頭部平移參數,而針對人臉捕獲的彩色相機中具有Kinect 所不具有的高分辨率人臉形狀.通過將兩者的信息相結合,可以得到更好的捕獲結果.
實驗結果表明,我們的方法能夠同時捕獲高質量的面部和人體運動,從而得到頭部動作一致并且時間上對齊好的全身運動.同時,兩個捕獲目標互相引導的結果要明顯好于兩部分運動捕獲分別進行的結果.通過結果展示和用戶調研驗證了這一點.
本文工作的主要貢獻包括以下幾點.
(1)首次提出了一種同步捕獲身體與面部運動及其動畫的方法,并且動畫結果經過了user study 驗證;
(2)提出了一種通過賦予環(huán)境光照特征來對不同采集設備進行時間同步的方法;
(3)提出了結合面部動畫捕獲設備和身體捕獲設備各自的特點,幫助改善整體精度的方法.
人體運動捕獲和面部運動捕獲都是虛擬人運動領域重要的研究分支,目前已有很多使用不同數據源、不同建模方式的運動捕獲方法.這里,重點描述無標記點的運動捕獲方法.
Shotton 等人[5]和Girshick 等人[6]將人體姿態(tài)重建問題建模成一個回歸問題,使用隨機森林來進行回歸.這類方法可以得到很好的身體運動重建結果.但是,為了同時捕獲全身運動,Kinect 深度相機的距離必須比較遠.這就導致了在Kinect 采集到的圖像中頭部所占的像素數量很少,無論是深度圖還是彩色圖都很難分辨出頭部的姿態(tài)和表情,造成捕獲結果中頭部基本是不動的.
Ye 等人[7]和Su 等人[8,9]提出用捕獲的3D 深度點云與數據庫中標準尺寸3D 人體模型的投影深度圖像對應的 3D 深度點云進行檢索匹配,找出最優(yōu)匹配對應的 3D 人體模型,再將其與捕獲深度點云進行非剛體注冊[10-13],重建出全身人體姿態(tài).數據庫是由內嵌骨架驅動的標準3D 人體模型投影得到的深度圖像對應的3D 深度點云構成的,查詢的依據是度量當前幀3D 深度點云與數據庫中的3D 深度點云間的距離差.
Wang 等人[14]通過從若干幀深度圖像中使用非剛體ICP 進行對齊來得到人體模型,進而用來捕獲人體運動.
Cao 等人[15,16]和Wang 等人[17]利用彩色圖像來重建得到的人臉運動.由于他們只使用彩色圖像的信息,通過2D 到3D 的匹配算法來恢復3D 信息,雖然能夠得到視覺效果很好的結果,但是真實的深度信息是很難從彩色圖像中完全恢復的,因此對頭部的前后移動不可能完全真實地恢復出來.
Wang 等人[18]通過單幀圖像得到了精細的人臉模型.但是,這樣的系統(tǒng)在計算上比較復雜.同樣地,由于只使用了彩色相機,這樣的系統(tǒng)不可能獲得很好的頭部前后位置信息.
以上這些工作雖然在面部表情捕獲以及身體運動捕獲中取得了不錯的效果,但是并沒有考慮到利用兩個相機各自的特點進行人臉和人體運動的同步捕獲,如果應用在人體動畫和人臉動畫同時捕獲系統(tǒng)中,會遺漏另一相機所帶來的信息.據我們所知,本文是首次使用無標記點的方法將不同尺度的運動捕獲結果結合起來,得到一個頭部旋轉角度一致、同步的身體加面部運動捕獲結果.我們的算法流程圖如圖1 所示.
Fig.1 Pipline of our algorithm圖1 算法流程圖
對于人臉捕獲部分,我們從2D 圖像中得到特征點,然后結合Kinect 相機中得到的平移參考值解算頭部姿態(tài).對于人體捕獲部分,首先使用Kinect Fusion 掃描一個人的模型,接著手動對其嵌入骨骼,之后使用非剛體ICP進行肢體姿態(tài)恢復,然后把人臉捕獲得到的頭部姿態(tài)通過兩個相機的相對矩陣傳遞給身體捕獲空間,最后把求得的身體姿態(tài)和表情基權重重定向到另一個角色上渲染并加以展示.
如前所述,為了能夠同時采集人體和面部運動,我們使用兩個相機分別捕獲人臉和人體運動.采集設備如圖2 所示.
Fig.2 The capture equapments.Including a Kinect depth camera and a color camera of a smart phone圖2 采集設備,包括一個Kinect 深度相機和一個手機的彩色相機
為了能夠將捕獲到的運動合在一起,我們要把兩個相機的時間和空間信息對齊在一起.這一節(jié)主要描述相機的時間同步和空間標定.
為了使捕獲到的面部和人體運動數據時間同步,必須要將兩個相機拍攝的視頻進行時間同步,否則,將使后續(xù)的過程中使用相同的人臉姿態(tài)參數對不同時刻的人臉表情進行求解,產生誤差.這里,我們通過產生特定外部光照的方式來實現(xiàn)這一目標.在開始數據采集之后,首先在場景中進行幾次閃光,每次閃光持續(xù)大約0.1s,在兩個相機的視頻錄制中會同時留下閃光的記錄.我們通過在得到的視頻中統(tǒng)計高亮像素數量來找到閃光出現(xiàn)的時間,從而在兩個視頻中分別找到對應的零時刻.由于我們可以預先分別得到兩個相機的幀率,因此可以通過零時刻的對齊將兩個視頻進行時間對齊.實踐中,兩個相機的幀率都設置為30fps.這樣,通過首幀圖片的對齊,就實現(xiàn)了整個視頻序列的時間同步.在實驗中,對齊結果的時間誤差小于1 幀.
由于我們的Kinect 深度相機和彩色相機的位置、角度、焦距都不相同,因此需要在使用中進行相機標定來得到兩個相機的相對外參矩陣以完成后面的采集數據的融合.我們使用Zhang 等人[19]的方法,用兩個相機同時對棋盤格進行拍照,從而標定出兩個相機各自的相機參數.將彩色相機和Kinect 相機的外參標定結果分別記為Mcolor和Mdepth,則Kinect 深度相機與彩色相機的相對矩陣為
這個矩陣的意義是把采集面部運動的彩色相機空間中的運動數據變換到采集身體運動的Kinect 深度相機空間的變換矩陣.利用這個相對變換矩陣,可以在分別捕獲到人體運動和面部運動之后,把兩部分數據整合在一起,從而得到完整的人體運動.
為了從彩色視頻中得到高質量的面部動畫捕獲結果,我們使用基于多線性模型[15,20]的綜合分析方法.首先從彩色圖像中提取人臉特征點,然后利用多線性人臉模型進行人臉重建,最后求解人臉的姿態(tài)和表情基權重,得到人臉動畫姿態(tài)和表情基權重.
我們使用類似于Ren[21]的級聯(lián)隨機森林+線性回歸的方式來得到臉部特征點位置.在級聯(lián)的每一級中,我們從人臉圖像中提取出灰度差特征訓練隨機森林,然后把隨機森林的分類結果作為0-1 特征,建立從0-1 特征到形狀變化的回歸模型.實踐中使用的是線性回歸模型,數學描述為
其中,wt是回歸得到的線性模型的權重,Φt表示隨機森林圖提取出的特征的函數.I是長焦相機采集到的2D 圖像,St-1是前一步的形狀.整個過程的初始形狀選擇為訓練數據庫中所有形狀的平均形狀.通過這樣的逐步迭代,可以得到最終的2D 點形狀St.
我們使用多線性模型來進行人臉形狀的建模和重建,使用facewarehouse[11]人臉數據庫來進行人臉建模.我們使用多線性模型將人臉數據庫組織成一個3 階張量,3 個維度分別對應于每個模型的頂點坐標(vertex)、人臉形狀(identity)以及人臉表情(expression).通過張量分解[22],可以將數據進行壓縮,同時,基本上不損失數據庫的信息,形式為
這里,T是原始的數據集,Cr是經過壓縮的核心張量,Uid和Uexp分別是在后兩個維度上的變換矩陣.×2和×3分別表示張量在第2 個和第3 個維度上與矩陣相乘.具體可以參考文獻[22]等研究工作.實踐中,T的原始維度是34530×150×47,Cr的保留維度為34530×50×25.
然后,對于任意人臉,我們可以將其表達為數據庫中的人臉的線性插值,數學形式為
其中,wid和wexp分別是人臉形狀和人臉表情兩個維度上的權重.得到的結果face即為當前權重下重建得到的人臉的頂點坐標值.
與文獻[11,12]等工作處理的從彩色圖像重建人臉的問題不同,由于我們使用了Kinect 深度相機來捕獲人體運動,可以在深度數據的幫助下得到一個全局平移的參考值Tg.這個全局平移參考值的獲取方式如下:
我們使用特征點匹配的方法來求解人臉的姿態(tài)、形狀和表情參數,將問題描述為一個優(yōu)化問題,所使用的損失函數為
其中,第1 項是擬合的2D 點與采集到的2D 點的誤差項,第2 項意味著求解得到的平移項要與從深度圖像得到的平移參考值盡可能地接近,第3 項和第4 項分別是形狀和表情參數的先驗項.fea2d是圖像中的2D 特征點,Π是相機從3D 空間到2D 空間的投影矩陣.我們使用不考慮偏斜和畸變的針孔相機模型,則Π 的形式為
R和T是當前幀的旋轉和平移參數,wid和wexp是形狀和表情的參數.Σ是數據庫中參數的協(xié)方差矩陣.λtrans、λid、λexp分別是平移參考值、人臉形狀以及人臉表情的正則項權重,實驗中分別取為1、0.001、0.001.
這個問題是一個標準的最小二乘問題.在求解中,我們把所有的參數分為3 組:R和T一起分為一組,Wid和wexp分別作為一組,使用迭代優(yōu)化的方法來進行求解.在每一次迭代過程中,每次固定3 組參數中的兩組來優(yōu)化剩余的一組.通過不斷地迭代,可以逐漸逼近整個問題的最優(yōu)解.實踐中,我們發(fā)現(xiàn),優(yōu)化過程整體迭代3 次就可以得到收斂的結果.
對于每一步的問題,我們都使用levenberg marquardt 優(yōu)化方法[23]來進行求解.
注意,我們只在第1 幀優(yōu)化求解人臉形狀參數wid.在之后的運動捕獲中,這一項參數始終保持不變.在視頻追蹤中,第1 幀的R使用零值進行初始化,T使用深度圖像中得到的參考值來初始化,wid和wexp使用先驗的平均值進行初始化.后續(xù)的每一幀使用前一幀的優(yōu)化結果作為初始值.
這一節(jié)給出人體運動獲取方法.我們將從深度圖像中重建人體運動的問題建模為一個反向運動學問題.為此,首先利用Kinect fusion[24]來獲得標準姿態(tài)的人體模型,然后為人體模型嵌入骨骼,最后用模型匹配采集到的深度圖像來得到正確的姿態(tài).
我們使用Kinect fusion 來獲得人體模型.通過將Kinect 相機繞人體一圈,捕獲到一個粗糙的人體掃描模型,然后手動地為得到的人體模型嵌入骨骼,結果如圖3 所示.得到骨骼模型和人體模型之后,使用線性骨骼蒙皮模型[25]建立起骨骼對蒙皮的驅動關系:
其中,wj(p)是第j個骨骼對頂點的控制權重,Tj是第j個骨骼自身的局部矩陣.
Fig.3 The human body model from Kinect fusion and embedded skeleton圖3 Kinect fusion 得到的人體模型和嵌入的骨骼
本節(jié)描述得到骨骼和蒙皮之后,根據深度圖像求解當前姿態(tài)的方法.根據人體的網格模型和深度圖像,我們把求解姿態(tài)問題建模為一個反向運動學問題,并用優(yōu)化的方法來求解,目標函數為
其中,優(yōu)化自變量q是運動的關節(jié)角和根節(jié)點位置參數.目標函數中第1 項是運動數據的icp項,表示重建得到的蒙皮要盡可能地與采集到的深度數據一致.數學形式為
其中,pi(q)是在姿態(tài)q的條件下,身體的第i個頂點根據前向運動學和線性混合蒙皮(LBS)得到的3D 位置.Pi則是與身體上的第i個頂點距離最近的深度點.n→是相應的網格上的點的法線方向.
第2 項是運動平滑項,用來防止求解得到的姿態(tài)發(fā)生突變.
其中,qi-2和qi-1分別代表前兩幀和前一幀的關節(jié)角度.
第3 項是輪廓項,表示得到的蒙皮的輪廓要盡可能地與采集到的深度圖像的輪廓一致.
其中,p2d(i)是模型上的第i個輪廓點在相機平面的投影,psil(i)是深度圖中距離其最近的輪廓點2D 坐標.這一項用來進行深度圖和人體模型的輪廓對齊,保證重建得到的姿態(tài)和采集到的深度圖像之間的輪廓對應關系.
第4 項是關節(jié)角邊界項,對應于求解得到的關節(jié)角要處于合理范圍內.
最后一項是運動姿態(tài)先驗項,主要用來保證沒有深度點云約束的關節(jié)部分滿足運動數據的統(tǒng)計規(guī)律,從而避免出現(xiàn)不合理的運動姿態(tài).對這一項,我們首先把CMU 數據庫中關節(jié)角的分布建模為高斯分布,并統(tǒng)計整個分布的均值qmean和方差Σ,然后對當前姿態(tài)q,計算q在這個高斯分布中的概率,將概率的負對數作為運動先驗項.這一項的數學形式可以表示為q與qmean的馬氏距離(Mahalanobis distance).
目標函數中的w是各項目標函數的權重.實驗中依次取為1、0.01、3、20、1.
目標函數的每一項都是最小二乘形式,我們可以使用高斯牛頓法來求解.在求解中,每次迭代都需要重新為ICP 項和輪廓項找到最近點.這樣,通過迭代最終得到一個匹配結果比較好的姿態(tài)q.
由于深度圖像分辨率比較低,只能用來求解大尺度的人體姿態(tài).而頭部的姿態(tài)在深度圖中的特征不夠明顯,只使用深度圖來進行姿態(tài)重建無法得到好的結果.如圖6 中第2 列所示,重建得到的身體運動在頭部幾乎是不動的,需要使用人臉運動捕獲的結果來幫助修正頭部姿態(tài).
這樣,我們就將人臉與人體的運動結合到了一起.這里,雖然頭部運動求解可以同時得到一個平移參數,但是人的骨骼模型中頭部沒有平移自由度,強行把平移參數加入會造成模型穿刺甚至崩潰,因此不使用面部運動追蹤得到的平移參數.
得到運動捕獲結果之后,需要把運動數據和表情參數重定向到虛擬人的身體和臉上.由于用來進行運動采集的模型的骨架結構和表情基的組成方法都是與虛擬人相同的,因此只需把追蹤得到的關節(jié)角和表情基權重直接賦予虛擬人就可以得到運動重定向的結果,之后即可用來驅動虛擬人來得到動畫結果.
本文使用低成本的深度和彩色相機來捕獲全身運動.為了驗證全身運動跟蹤算法的有效性,我們在實際數據上對算法進行了測試.Kinect 深度圖像和彩色圖像的分辨率分別設置為320×240 以及640×480.經過時間同步的Kinect 數據和彩色相機如圖4 所示.
Fig.4 The captured images圖4 相機捕獲結果示例
可以看到,Kinect 采集到的圖片頭部區(qū)域像素數量較少,很難辨識頭部姿態(tài)和表情.雖然可以看到Kinect 得到的圖像能夠捕獲到整個身體,但是面部非常模糊,無法識別出人臉的姿態(tài)和表情,需要長焦的彩色相機幫助捕獲人臉.
同時,為了說明全身運動捕獲能夠得到更加自然、真實的虛擬人動畫,我們在視覺上對比了全身動畫和只跟蹤人臉或者肢體單個部分產生的動畫.實驗結果表明,本文的方法能夠得到更加真實的虛擬人動畫.
采用本文方法,人臉2D 特征點加上3D 重建時間為每幀20ms,使用的處理器是Intel i7-6700.目前,我們的方法在身體重建部分沒有進行速度優(yōu)化,在matlab 中速度為每秒3 幀.
為了驗證本文算法的有效性,我們首先用Kinect fusion 掃描一個人的模型,然后使用兩個經過同步和標定的相機采集了表演者大約2 分鐘的運動,之后按照本文的方法先分別進行運動合成,最后再將兩部分結合在一起.表演者主要在模擬和別人談話時候的一些姿態(tài)和人臉表情.我們從3 個角度展示了合成動畫的渲染結果,如圖5 所示.
可以看到,合成的動畫同時捕獲到了身體與面部的動作,包括肢體動作、頭部姿態(tài)、面部表情,由此得到了更高真實感的人體動畫捕獲結果.由圖5 可以看到,我們的方法利用彩色相機和Kinect 深度相機,真實地重建出了人臉和人體運動.
為了驗證身體和人臉捕獲結合的方法能夠得到更佳真實感的動畫結果,本節(jié)將采用我們的方法后全身動畫驅動結果與單獨的人臉動畫以及身體動畫的結果進行對比.
從圖6 結果可以看出,同時捕獲身體運動與面部運動的結果是真實、自然的,而僅僅捕獲其中任意一個的結果都會感覺不夠自然.此外,只做身體運動捕獲的結果顯示,頭部基本是不動的,通過面部運動捕獲補充得到了人的頭部姿態(tài).每一行的第1 格是人臉、人體同步捕獲的結果,第2 格是單獨捕獲肢體動作的結果,第3 格是單獨捕獲人臉動作的結果,第4 格和第5 格分別是長焦彩色相機與Kinect 的彩色相機的視頻輸入.
Fig.6 Comparison of separated body and face capture and our synchronized motion capture圖6 人體、人臉分開進行捕獲與同步捕獲的對比
為了更好地評價所捕獲到的運動質量,我們通過用戶調研得到定量的運動質量評分.我們把合成的運動渲染并錄制成視頻,然后讓18 個用戶對于全身動畫、僅肢體動畫以及僅人臉動畫進行真實感打分(1~5 分制),1 分代表最不真實,5 分代表最真實.其中,4 個用戶對動畫領域比較熟悉.
圖7 顯示了分數的均值和方差.從給出的數據可以看到,身體和人臉動畫同步捕獲的結果要明顯好于僅進行人臉動畫或者僅進行肢體動畫捕獲的結果.這也說明,我們的人體人臉同步捕獲技術能夠得到更真實的運動.圖7 中顯示了3 種不同運動捕獲結果的用戶評價,5 分對應最真實,1 分對應最不真實.
Fig.7 Result of user study圖7 用戶調研的結果
同時,我們對用戶調研結果用t 檢驗(t-Test)進行了顯著性分析[26],見表1.
Table 1 Result of user study表1 用戶調研結果
結果顯示,P<0.05,說明同時捕獲兩種運動的結果與分別進行運動捕獲的結果在用戶打分上存在統(tǒng)計學差異.也就是說,使用兩個相機進行運動捕獲的整體結果要好于分開的結果.
本文提出了一種一個Kinect 深度相機和一個長焦彩色相機同步捕獲身體與面部運動的方法.該方法具有成本低、易于架設等特點.該方法通過相機的同步和標定把兩個相機捕獲到的動畫結合起來,得到完整的全身運動.此外,兩個相機采集到的信息還可以互相補充,改善運動重建結果.通過捕獲表演者的運動的方法驗證了這一算法的有效性,并與單獨進行身體運動以及人臉運動捕獲的結果進行了對比.分別通過圖片對比和用戶調研驗證了我們的同步捕獲方法所得到的動畫結果更加真實、自然.
現(xiàn)有方法和系統(tǒng)的缺點之一是長焦彩色相機的視野較小,這限制了表演者可以使用的空間大小,不太適合需要大范圍運動的場景.一種解決方法是使用多個彩色相機,當人臉位置發(fā)生變化時,使用相應相機捕獲不同空間位置的人臉.
另一個缺點是當前的方法只具有人臉和人體的運動捕獲,距離完整的虛擬人捕獲系統(tǒng)還缺少手部的捕獲.這也是未來需要進一步提高效果的方向之一.一種可能的方式是加入幾個不同角度的Kinect 相機來進行手部運動的捕獲.
此外,如果使用一個類似于SMPL[27]的人體參數化模型,可以根據人體圖像直接得到一個人的模型,例如文獻[28],這樣得到的人體模型與現(xiàn)在的方法相比,既可以省去Kinect fusion 和手動嵌入骨骼的工作,又可以得到更精細的人體模型.
在未來的工作中,我們可以把長焦彩色相機的結果與帶marker 的運動捕獲系統(tǒng)(如Vicon Cara)進行對比.此外,還可以使用人機交互中的方法(如顯著性分析),更加詳細地對結果進行評價.