简介
OpenSeeFace 是一个开放源代码项目,专注于面部表情跟踪技术的研究与实现。这项技术的主要目标是为动画模型提供准确的面部动作数据输入。需要注意的是,这个项目提供的是一个面部跟踪库,而非独立的头像操控软件。
项目功能
OpenSeeFace 的核心是一个基于 MobileNetV3 的面部标志检测模型,该模型可以识别和跟踪面部特征点。在实际应用中,它已经被用于多个项目,例如通过 OpenSeeFace 跟踪来动画化 VRM 和 VSFAvatar 3D 模型的 VSeeFace,及用于 Live2D 模型动画的 VTube Studio。
目前,由于在 Windows 系统上 Pytorch 1.3 的 CPU 推理速度较慢,OpenSeeFace 的模型已被转换为 ONNX 格式,并且通过 onnxruntime 可以实现 30 - 60 fps 的实时面部跟踪。项目中提供了四种不同的模型,可以在跟踪速度和精确度之间进行权衡。
跟踪质量
OpenSeeFace 的面部特征点标识方法与其他传统方法有所不同,因此很难直接与现有的科学文献中的方法进行数值比较。其标志更侧重于动画化应用,而非精确贴合面部图像。在实验与实际应用中,OpenSeeFace 在低光、高噪声和低分辨率的环境下表现出色,并能稳定跟踪各种复杂的头部姿态。
与其他面部跟踪技术,如 MediaPipe 相比,OpenSeeFace 的稳定性更好,特别是在嘴部姿态的表现范围更广,但对于眼部区域的跟踪准确性稍逊。
使用指南
OpenSeeFace 的实现主要依赖于 facetracker.py
脚本,用户可以通过命令行从摄像头或者视频文件中获取面部数据,并通过 UDP 发送跟踪信息。这样就可以在另一台计算机上进行跟踪,提升性能并避免摄像头画面的意外泄露。
Unity 引擎中的 OpenSee
组件可以接收这些 UDP 数据包,并通过公共字段 trackingData
提供跟踪信息。此外,OpenSeeShowPoints
组件还可以可视化检测到的面部标志,示例代码和用法请参考项目中提供的例子。
如果需要,用户也可以通过 Python 运行 OpenSeeFace,运行时可以使用多种选项:
python facetracker.py --help
表情检测
通过将 OpenSeeExpression
组件添加至同一物体,可以检测出特定的面部表情。此功能需要根据每个用户进行单独标定,通过收集每个表情的样本数据进行训练。
模型概述
OpenSeeFace 提供了四种预训练的面部特征点模型,用户可以通过 --model
参数来选择:
- 模型 -1: 极低准确性,极快速度,适用于低性能设备(213fps)。
- 模型 0: 低准确性,速度较快(68fps)。
- 模型 1: 适度的速度和平衡的准确性(59fps)。
- 模型 2: 较高准确性,较慢速度(50fps)。
- 模型 3 (默认): 最高准确性,最低速度(44fps)。
结果展示
OpenSeeFace 在面部检测和标志稳定性上表现优秀,面部大小和方向的变化对跟踪结果影响较小。项目提供了一些样本图像展示其能力和效果。
依赖与安装
OpenSeeFace 需要 Python 3.6 至 3.9 环境,及若干库的支持:ONNX Runtime、OpenCV、Pillow 和 Numpy。在项目中,用户可以通过以下命令进行安装:
pip install onnxruntime opencv-python pillow numpy
另外,也可使用 Poetry 管理项目依赖环境,并通过 poetry install
命令安装所有依赖。