張宇辰

【摘? 要】 隨著虛擬現實(VR)和增強現實(AR)技術的不斷發展,實時面部捕捉已成為一個重要的研究方向。文章致力于探索利用基于Python編程的Open Face庫來實現實時面部捕捉,并將捕捉到的數據導入虛幻引擎以創建動態面部動畫。文章發現,通過結合靈巧的OpenFace庫和虛幻引擎平臺,可以創建一個高效、靈活且低成本的實時面部捕捉系統,為VR和AR應用開辟了新的可能性,尤其是在創建更自然和真實的虛擬角色方面。
【關鍵詞】 OpenFace;Python;虛幻引擎;動畫
一、研究背景
過去幾年,虛擬數字人通過不斷學習,以龐大的數據庫作支撐,最終成為完全和真人相似的虛擬人物,可以在某些方面替代真人完成相應的工作。 而面部捕捉技術已經成為這部分的核心組成部分,包括但不限于電影制作、視頻游戲開發和虛擬現實(VR)。它允許創建者捕捉和復制現實世界中的復雜和微妙的面部表情,從而大大提高虛擬角色的真實感和沉浸感。OpenFace 是一個開源的工具,可以對面部表情進行非常詳細的分析,它可以捕捉到眼球移動,眉毛上升等微小變化,這使它成為實時面部捕捉的理想選擇。虛幻引擎提供了一個高度靈活和強大的平臺來創建實時3D模擬,使其成為實現和測試實時面部捕捉解決方案的理想平臺。
本研究旨在探索使用基于Python的OpenFace來捕捉面部表情,并將這些數據實時傳輸到虛幻引擎,以創建動態和實時的面部動畫。文章將詳細介紹如何從設置和配置OpenFace開始,通過Python腳本來處理和傳輸數據,最終在虛幻引擎中實現面部捕捉動畫。
通過這種方式,旨在創建一個可行的解決方案,為開發人員和創建者提供工具來輕松、快速和低成本地實現高質量的實時面部動畫。
二、相關技術概述
過去幾年,面部捕捉技術取得了顯著的進步。這一節將探討現有的面部捕捉技術和工具,以及OpenFace、虛幻引擎和Python在這一領域的應用。
(一)現有的面部捕捉技術和工具
面部動作捕捉(Facial Motion Capture)是運動捕捉技術的一部分。面部捕捉是使用機械裝置、傳感器、相機等設備來記錄人類面部肌肉和表情動作,然后,將它轉換為一系列參數數據的過程。早期的技術依賴于物理傳感器和高成本的硬件設備。隨著時間的推移,軟件解決方案逐漸成為主流,它們利用計算機視覺和機器學習算法來捕捉和解析面部表情。近年來,許多商業解決方案,如Face Ware和Dynamixyz已成為行業標準,但它們通常伴隨著昂貴的許可費用。這導致市場對開源和低成本解決方案的需求擴大,從而促使OpenCV的發展及Open Face等工具的開發。
(二)OpenFace在面部捕捉中的應用
OpenFace提供了一個開源的面部捕捉解決方案,它使用計算機視覺技術來識別和跟蹤面部特征點。這個庫被廣泛用于學術研究和小型項目,由于其開源性質,它為社群提供了一個可定制和可擴展的面部捕捉工具。對于OpenFace中的dlib庫,可以從人物面部檢測出68個特征點,這些特征點可以涵蓋大多數表情所產生的點的運動,如喜、怒、哀、樂、眨眼及說話、歌唱嘴部運動明顯的表情。
(三)虛幻引擎在實時渲染和動畫中的角色
虛幻引擎(UE)是一個強大的游戲開發引擎,它也被用于創建高質量的3D動畫和虛擬現實應用。UE提供了一套完整的工具來創建復雜的動畫,包括基于物理的渲染和面部動畫系統。與傳統的線性動畫流程不同,UE允許實時渲染,這意味著動畫可以在運行時動態生成和調整,從而為創建者提供更多的靈活性和控制力。同時,虛幻引擎適配的Metahuman平臺,可以快速創建高精度的虛擬人。本研究利用Metahuman平臺創建了用于實驗的虛擬人。
(四)Python在實時動畫和數據處理中的應用
Python因其簡潔和易用性而成為數據科學和機器學習的首選語言。在面部捕捉領域,Python可以用于快速開發和測試新的算法和工具。通過結合Python和OpenFace,研究人員和開發人員可以創建自動化的流程來捕捉和分析面部數據,從而簡化動畫創建流程并降低成本。
本研究主要使用虛幻引擎中插件VaRest,來實現Python的Http傳輸,將OpenFace所捕獲的面部數據實時導入虛幻引擎。
三、技術實現
(一)OpenFace的工作原理
在項目中使用OpenFace庫來實現面部捕捉。OpenFace集成多種計算機視覺和機器學習技術,包括深度學習、幾何變換、最優化技術等來實現其功能。這是一個概述,具體實現涉及很多復雜的數學和算法。
其中眼睛長寬比(EAR):計算EAR通常涉及以下公式:
EAR=‖p2-p6‖+‖p3-p5‖/2·‖p1-p4
其中p1,p2…p6是眼睛的特征點。
OpenFace庫相比于OpenCV基礎庫來說功能更加強大,利于實時面部識別的應用。
本研究利用OpenFace主要捕獲頭部姿態(head pose)、眼部視角(Eye gaze)、嘴唇坐標(Lips)、眉部坐標(Brows)、眼寬(Eye Wide)以及鼻部細節(Nose Wrinkle)。其中最值得關注的是左右眼部的特征點,由于眼部除了眼球的旋轉角度以外還需要考慮眼部肌肉的變化,在OpenFace中一共有12個特征點來完成眼部整體的動態最終,這在實驗后期導入虛幻引擎時與Metahuman中人物面部特征點的數量及位置一致,這確保了方案的可行性。
(二)數據處理和格式化
捕捉面部數據后,使用Python來處理和格式化數據。可以創建一個Python腳本,利用FaceLandmarkImg-f指令來協助該腳本讀取OpenFace輸出的數據,然后將它轉換為CSV格式,并使用Python中Http庫實現Web傳輸,以便能夠輕松地將數據導入到虛幻引擎中。
這里較為重要的部分是數據映射部分,數據映射是將從OpenFace獲得的特征點數據與虛幻引擎中的人物模型的骨骼或混合形狀相對應。
這里使用Python創建一個映射字典或表,其中定義了OpenFace特征點與虛幻引擎人物模型的骨骼或混合形狀之間的對應關系,代碼示例如下:
mapping_dict = {
BrowDownRight:feature_point_21,
BrowDownLeft:feature_point_22,
# ...
}
(三)虛幻引擎的配置和數據接收
在虛幻引擎中創建一個模塊來接收和處理從Python腳本發送過來的數據。利用虛幻引擎的強大功能來創建一個動態的面部動畫系統,該系統可以實時響應捕捉到的面部數據,并利用藍圖將數據實時傳輸給人物骨骼動畫。
通過虛幻引擎中的腳本,應用上述創建的映射來控制人物模型的骨骼或混合形狀。這里腳本主要的架構為:
Openface_data = ...
for ue4_bone,openface_feature in mapping_dict. items():
# 獲取OpenFace特征點的值
feature_value = feature_data[openface_feature]
# 在虛幻引擎中設置相應的骨骼或混合形狀
的值
ue4.set_bone_value(ue4_bone,feature_value)
...
在處理這些映射數據的時候,部分數據由于視頻角度問題會有一定的偏移,這稱之為噪點,這導致虛擬人面部表情會有不自然的抖動,需要做數據平滑的處理。在這部分問題中,經研究決定使用指數移動平均算法來處理,可參考如下數學公式:
EMAt=(1-α)·EMAt-1+α·Xt
其中,
EMAt? — 當前時間步(t)的指數移動平均值。
EMAt-1 — 上一個時間步(t-1)的指數移動平均值。
Xt — 當前時間步(t)的原始數據點。
α — 平滑因子,其值介于0和1之間。
在數據導入映射之前,對數據進行指數移動平滑處理,算法如下:
def exponential_moving_average(data,alpha=0.1):
ema_data = []
ema = data[0]
for i in range(len(data)):
ema = (1-alpha)*ema + alpha*data[i]
ema_data.append(ema)
return ema_data
(四)實時動畫渲染
依托虛幻引擎的動畫藍圖系統,創建一系列的面部混合動畫,并利用動畫藍圖將映射數據給已經設置好的64個姿勢權重值。
虛幻引擎中,混合動畫基于不同的動畫剪輯或動畫資產進行混合,以創造出更加自然和復雜的動畫效果。通常是通過權重來混合多個動畫,從而在不同的動畫之間創建平滑的過渡或將多個動畫層疊在一起來產生新的動畫效果。實驗中基于Metahuman已生成的人物骨骼及動畫進行修改,并重新編寫了動畫藍圖邏輯。
四、結果與討論
本研究通過OpenFace的面部捕捉及虛幻引擎Python腳本的嘗試,探索如何利用這些實時面部數據來創建更自然和真實的動畫,并成功在Metahuman的工作流程中應用。
目前數字虛擬人技術應用已非常成熟,依托Metahuman便捷豐富的材質和高精度模型及虛幻引擎真實的燈光渲染,目前虛擬人在實時演繹方面已經逼近真人,也無須費用高昂的專用設備。
在本次研究中更多是嘗試優化虛幻引擎數字虛擬人實時面部捕捉的工作流程,研究中所使用的應用及算法均為開源的,且無須傳統深度實感相機等專用設備即可實現,簡化了實時面部捕捉的工作流程,進一步降低了虛擬人制作的設備成本。
在本次研究中,仍有一些有待優化的問題,例如數據偏移問題,由于沒有使用深度實感相機,在測量面部特征點時存在個別特征點由于面部角度問題而導致的數據偏移,這部分的問題在Apple的ARkit設備中表現得會更加穩定一些,后續需要優化OpenFace算法來解決。
參考文獻:
[1] 李金桓,康莊. 虛擬數字人與虛擬演播室結合應用案例淺析[J]. 現代電視技術,2022(05):86-90.
[2] 顧乃林,申閆春. 實時面部捕捉技術在虛擬演播室中的應用研究[J]. 計算機仿真,2021,38(09):168-172.
[3] 鄭立國,于宏偉. 無標記點面部表情捕捉及動畫在Unity3D上的實現[J]. 中國高新科技,2019(02):82-86.