国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于Python實現(xiàn)面部動態(tài)實時捕捉的技術(shù)研究

2023-12-14 22:55:59張宇辰
電腦迷 2023年17期
關(guān)鍵詞:動畫

張宇辰

【摘? 要】 隨著虛擬現(xiàn)實(VR)和增強現(xiàn)實(AR)技術(shù)的不斷發(fā)展,實時面部捕捉已成為一個重要的研究方向。文章致力于探索利用基于Python編程的Open Face庫來實現(xiàn)實時面部捕捉,并將捕捉到的數(shù)據(jù)導(dǎo)入虛幻引擎以創(chuàng)建動態(tài)面部動畫。文章發(fā)現(xiàn),通過結(jié)合靈巧的OpenFace庫和虛幻引擎平臺,可以創(chuàng)建一個高效、靈活且低成本的實時面部捕捉系統(tǒng),為VR和AR應(yīng)用開辟了新的可能性,尤其是在創(chuàng)建更自然和真實的虛擬角色方面。

【關(guān)鍵詞】 OpenFace;Python;虛幻引擎;動畫

一、研究背景

過去幾年,虛擬數(shù)字人通過不斷學(xué)習(xí),以龐大的數(shù)據(jù)庫作支撐,最終成為完全和真人相似的虛擬人物,可以在某些方面替代真人完成相應(yīng)的工作。 而面部捕捉技術(shù)已經(jīng)成為這部分的核心組成部分,包括但不限于電影制作、視頻游戲開發(fā)和虛擬現(xiàn)實(VR)。它允許創(chuàng)建者捕捉和復(fù)制現(xiàn)實世界中的復(fù)雜和微妙的面部表情,從而大大提高虛擬角色的真實感和沉浸感。OpenFace 是一個開源的工具,可以對面部表情進(jìn)行非常詳細(xì)的分析,它可以捕捉到眼球移動,眉毛上升等微小變化,這使它成為實時面部捕捉的理想選擇。虛幻引擎提供了一個高度靈活和強大的平臺來創(chuàng)建實時3D模擬,使其成為實現(xiàn)和測試實時面部捕捉解決方案的理想平臺。

本研究旨在探索使用基于Python的OpenFace來捕捉面部表情,并將這些數(shù)據(jù)實時傳輸?shù)教摶靡?,以?chuàng)建動態(tài)和實時的面部動畫。文章將詳細(xì)介紹如何從設(shè)置和配置OpenFace開始,通過Python腳本來處理和傳輸數(shù)據(jù),最終在虛幻引擎中實現(xiàn)面部捕捉動畫。

通過這種方式,旨在創(chuàng)建一個可行的解決方案,為開發(fā)人員和創(chuàng)建者提供工具來輕松、快速和低成本地實現(xiàn)高質(zhì)量的實時面部動畫。

二、相關(guān)技術(shù)概述

過去幾年,面部捕捉技術(shù)取得了顯著的進(jìn)步。這一節(jié)將探討現(xiàn)有的面部捕捉技術(shù)和工具,以及OpenFace、虛幻引擎和Python在這一領(lǐng)域的應(yīng)用。

(一)現(xiàn)有的面部捕捉技術(shù)和工具

面部動作捕捉(Facial Motion Capture)是運動捕捉技術(shù)的一部分。面部捕捉是使用機械裝置、傳感器、相機等設(shè)備來記錄人類面部肌肉和表情動作,然后,將它轉(zhuǎn)換為一系列參數(shù)數(shù)據(jù)的過程。早期的技術(shù)依賴于物理傳感器和高成本的硬件設(shè)備。隨著時間的推移,軟件解決方案逐漸成為主流,它們利用計算機視覺和機器學(xué)習(xí)算法來捕捉和解析面部表情。近年來,許多商業(yè)解決方案,如Face Ware和Dynamixyz已成為行業(yè)標(biāo)準(zhǔn),但它們通常伴隨著昂貴的許可費用。這導(dǎo)致市場對開源和低成本解決方案的需求擴大,從而促使OpenCV的發(fā)展及Open Face等工具的開發(fā)。

(二)OpenFace在面部捕捉中的應(yīng)用

OpenFace提供了一個開源的面部捕捉解決方案,它使用計算機視覺技術(shù)來識別和跟蹤面部特征點。這個庫被廣泛用于學(xué)術(shù)研究和小型項目,由于其開源性質(zhì),它為社群提供了一個可定制和可擴展的面部捕捉工具。對于OpenFace中的dlib庫,可以從人物面部檢測出68個特征點,這些特征點可以涵蓋大多數(shù)表情所產(chǎn)生的點的運動,如喜、怒、哀、樂、眨眼及說話、歌唱嘴部運動明顯的表情。

(三)虛幻引擎在實時渲染和動畫中的角色

虛幻引擎(UE)是一個強大的游戲開發(fā)引擎,它也被用于創(chuàng)建高質(zhì)量的3D動畫和虛擬現(xiàn)實應(yīng)用。UE提供了一套完整的工具來創(chuàng)建復(fù)雜的動畫,包括基于物理的渲染和面部動畫系統(tǒng)。與傳統(tǒng)的線性動畫流程不同,UE允許實時渲染,這意味著動畫可以在運行時動態(tài)生成和調(diào)整,從而為創(chuàng)建者提供更多的靈活性和控制力。同時,虛幻引擎適配的Metahuman平臺,可以快速創(chuàng)建高精度的虛擬人。本研究利用Metahuman平臺創(chuàng)建了用于實驗的虛擬人。

(四)Python在實時動畫和數(shù)據(jù)處理中的應(yīng)用

Python因其簡潔和易用性而成為數(shù)據(jù)科學(xué)和機器學(xué)習(xí)的首選語言。在面部捕捉領(lǐng)域,Python可以用于快速開發(fā)和測試新的算法和工具。通過結(jié)合Python和OpenFace,研究人員和開發(fā)人員可以創(chuàng)建自動化的流程來捕捉和分析面部數(shù)據(jù),從而簡化動畫創(chuàng)建流程并降低成本。

本研究主要使用虛幻引擎中插件VaRest,來實現(xiàn)Python的Http傳輸,將OpenFace所捕獲的面部數(shù)據(jù)實時導(dǎo)入虛幻引擎。

三、技術(shù)實現(xiàn)

(一)OpenFace的工作原理

在項目中使用OpenFace庫來實現(xiàn)面部捕捉。OpenFace集成多種計算機視覺和機器學(xué)習(xí)技術(shù),包括深度學(xué)習(xí)、幾何變換、最優(yōu)化技術(shù)等來實現(xiàn)其功能。這是一個概述,具體實現(xiàn)涉及很多復(fù)雜的數(shù)學(xué)和算法。

其中眼睛長寬比(EAR):計算EAR通常涉及以下公式:

EAR=‖p2-p6‖+‖p3-p5‖/2·‖p1-p4

其中p1,p2…p6是眼睛的特征點。

OpenFace庫相比于OpenCV基礎(chǔ)庫來說功能更加強大,利于實時面部識別的應(yīng)用。

本研究利用OpenFace主要捕獲頭部姿態(tài)(head pose)、眼部視角(Eye gaze)、嘴唇坐標(biāo)(Lips)、眉部坐標(biāo)(Brows)、眼寬(Eye Wide)以及鼻部細(xì)節(jié)(Nose Wrinkle)。其中最值得關(guān)注的是左右眼部的特征點,由于眼部除了眼球的旋轉(zhuǎn)角度以外還需要考慮眼部肌肉的變化,在OpenFace中一共有12個特征點來完成眼部整體的動態(tài)最終,這在實驗后期導(dǎo)入虛幻引擎時與Metahuman中人物面部特征點的數(shù)量及位置一致,這確保了方案的可行性。

(二)數(shù)據(jù)處理和格式化

捕捉面部數(shù)據(jù)后,使用Python來處理和格式化數(shù)據(jù)??梢詣?chuàng)建一個Python腳本,利用FaceLandmarkImg-f指令來協(xié)助該腳本讀取OpenFace輸出的數(shù)據(jù),然后將它轉(zhuǎn)換為CSV格式,并使用Python中Http庫實現(xiàn)Web傳輸,以便能夠輕松地將數(shù)據(jù)導(dǎo)入到虛幻引擎中。

這里較為重要的部分是數(shù)據(jù)映射部分,數(shù)據(jù)映射是將從OpenFace獲得的特征點數(shù)據(jù)與虛幻引擎中的人物模型的骨骼或混合形狀相對應(yīng)。

這里使用Python創(chuàng)建一個映射字典或表,其中定義了OpenFace特征點與虛幻引擎人物模型的骨骼或混合形狀之間的對應(yīng)關(guān)系,代碼示例如下:

mapping_dict = {

BrowDownRight:feature_point_21,

BrowDownLeft:feature_point_22,

# ...

}

(三)虛幻引擎的配置和數(shù)據(jù)接收

在虛幻引擎中創(chuàng)建一個模塊來接收和處理從Python腳本發(fā)送過來的數(shù)據(jù)。利用虛幻引擎的強大功能來創(chuàng)建一個動態(tài)的面部動畫系統(tǒng),該系統(tǒng)可以實時響應(yīng)捕捉到的面部數(shù)據(jù),并利用藍(lán)圖將數(shù)據(jù)實時傳輸給人物骨骼動畫。

通過虛幻引擎中的腳本,應(yīng)用上述創(chuàng)建的映射來控制人物模型的骨骼或混合形狀。這里腳本主要的架構(gòu)為:

Openface_data = ...

for ue4_bone,openface_feature in mapping_dict. items():

# 獲取OpenFace特征點的值

feature_value = feature_data[openface_feature]

# 在虛幻引擎中設(shè)置相應(yīng)的骨骼或混合形狀

的值

ue4.set_bone_value(ue4_bone,feature_value)

...

在處理這些映射數(shù)據(jù)的時候,部分?jǐn)?shù)據(jù)由于視頻角度問題會有一定的偏移,這稱之為噪點,這導(dǎo)致虛擬人面部表情會有不自然的抖動,需要做數(shù)據(jù)平滑的處理。在這部分問題中,經(jīng)研究決定使用指數(shù)移動平均算法來處理,可參考如下數(shù)學(xué)公式:

EMAt=(1-α)·EMAt-1+α·Xt

其中,

EMAt? — 當(dāng)前時間步(t)的指數(shù)移動平均值。

EMAt-1 — 上一個時間步(t-1)的指數(shù)移動平均值。

Xt — 當(dāng)前時間步(t)的原始數(shù)據(jù)點。

α — 平滑因子,其值介于0和1之間。

在數(shù)據(jù)導(dǎo)入映射之前,對數(shù)據(jù)進(jìn)行指數(shù)移動平滑處理,算法如下:

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

(四)實時動畫渲染

依托虛幻引擎的動畫藍(lán)圖系統(tǒng),創(chuàng)建一系列的面部混合動畫,并利用動畫藍(lán)圖將映射數(shù)據(jù)給已經(jīng)設(shè)置好的64個姿勢權(quán)重值。

虛幻引擎中,混合動畫基于不同的動畫剪輯或動畫資產(chǎn)進(jìn)行混合,以創(chuàng)造出更加自然和復(fù)雜的動畫效果。通常是通過權(quán)重來混合多個動畫,從而在不同的動畫之間創(chuàng)建平滑的過渡或?qū)⒍鄠€動畫層疊在一起來產(chǎn)生新的動畫效果。實驗中基于Metahuman已生成的人物骨骼及動畫進(jìn)行修改,并重新編寫了動畫藍(lán)圖邏輯。

四、結(jié)果與討論

本研究通過OpenFace的面部捕捉及虛幻引擎Python腳本的嘗試,探索如何利用這些實時面部數(shù)據(jù)來創(chuàng)建更自然和真實的動畫,并成功在Metahuman的工作流程中應(yīng)用。

目前數(shù)字虛擬人技術(shù)應(yīng)用已非常成熟,依托Metahuman便捷豐富的材質(zhì)和高精度模型及虛幻引擎真實的燈光渲染,目前虛擬人在實時演繹方面已經(jīng)逼近真人,也無須費用高昂的專用設(shè)備。

在本次研究中更多是嘗試優(yōu)化虛幻引擎數(shù)字虛擬人實時面部捕捉的工作流程,研究中所使用的應(yīng)用及算法均為開源的,且無須傳統(tǒng)深度實感相機等專用設(shè)備即可實現(xiàn),簡化了實時面部捕捉的工作流程,進(jìn)一步降低了虛擬人制作的設(shè)備成本。

在本次研究中,仍有一些有待優(yōu)化的問題,例如數(shù)據(jù)偏移問題,由于沒有使用深度實感相機,在測量面部特征點時存在個別特征點由于面部角度問題而導(dǎo)致的數(shù)據(jù)偏移,這部分的問題在Apple的ARkit設(shè)備中表現(xiàn)得會更加穩(wěn)定一些,后續(xù)需要優(yōu)化OpenFace算法來解決。

參考文獻(xiàn):

[1] 李金桓,康莊. 虛擬數(shù)字人與虛擬演播室結(jié)合應(yīng)用案例淺析[J]. 現(xiàn)代電視技術(shù),2022(05):86-90.

[2] 顧乃林,申閆春. 實時面部捕捉技術(shù)在虛擬演播室中的應(yīng)用研究[J]. 計算機仿真,2021,38(09):168-172.

[3] 鄭立國,于宏偉. 無標(biāo)記點面部表情捕捉及動畫在Unity3D上的實現(xiàn)[J]. 中國高新科技,2019(02):82-86.

猜你喜歡
動畫
做個動畫給你看
動畫發(fā)展史
我的動畫夢
文苑(2019年22期)2019-12-07 05:28:56
動畫批評融入動畫教育的思考
新聞傳播(2018年3期)2018-05-30 07:01:39
我是動畫迷
誰說GIF動畫不能縮放
南溪县| 南宫市| 江都市| 方正县| 太原市| 彭阳县| 六枝特区| 修武县| 五台县| 资阳市| 霸州市| 监利县| 仁怀市| 平乡县| 茌平县| 宜州市| 龙川县| 仙桃市| 平乐县| 北碚区| 同心县| 江达县| 茶陵县| 长宁区| 抚州市| 徐水县| 龙州县| 铜鼓县| 佳木斯市| 玉屏| 平原县| 德清县| 庄浪县| 沂源县| 凤阳县| 和平县| 和静县| 白沙| 台北县| 乌海市| 侯马市|