基于Python实现面部动态实时捕捉的技术研究

2023-12-14 22:55张宇辰
电脑迷 2023年17期
关键词:动画

张宇辰

【摘  要】 随着虚拟现实(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.

猜你喜欢
动画
Clifford hits the big screen
做个动画给你看
动画发展史
我的动画梦
动画批评融入动画教育的思考
我是动画迷