无需重型神经网络框架的快速CPU面部追踪

如果你曾经尝试用普通网络摄像头实时驱动3D虚拟形象或角色动画,你可能面临过这样的困境:要么使用消耗大量显卡和处理器资源的重型模型,要么得到一个卡顿的遮罩,延迟高达半秒。对于游戏直播来说,这简直是灾难,因为GPU已经在忙着渲染画面了。
一位名为emilianavt的开发者在为VTuber创作工具时恰好遇到了这个问题,于是诞生了OpenSeeFace。这个轻量级面部和特征点追踪库针对CPU进行了优化,即使在老旧硬件上也能提供稳定的30-60 fps。
底层原理与高速运行的原因
该项目的目标并非成为一个功能完整的虚拟形象动画程序,而是一个专业追踪器。它从网络摄像头或文件捕获视频,检测人脸,计算特征点坐标,然后通过UDP发送准备好的数据。
该模型最初在PyTorch中使用MobileNetV3进行训练。但在Windows上,PyTorch的CPU推理速度很慢。作者将网络转换为ONNX格式,并将执行切换到onnxruntime。发布版本包含一个定制的ONNX Runtime构建版本,不包含不必要的遥测功能。
追踪器的架构同时解决了多个实际任务:
- 捕获和推理被分离为独立的Python脚本或二进制文件。如果主程序(例如Unity游戏)崩溃,管道不会连带关闭摄像头。
- UDP坐标传输意味着你可以在旧笔记本上运行追踪,同时在主力PC上运行游戏或3D场景。这节省了资源,也防止主播在直播中意外露出真容。
- 模型在LS3D-W、WFLW、MPIIGaze数据集和UnityEyes的合成眼睛数据上训练。损失函数使用了自适应Wing Loss的定制变体。
一个有趣的细节:作者专门为人偶动画调整了特征点,而非学术基准测试。标注接近iBUG 68,但带有准3D轮廓。即使视线向量坐标的绝对值略有偏差,算法也能准确检测到眨眼和说话时的嘴型。


与Google MediaPipe相比,OpenSeeFace追踪在快速转头、光照不佳以及廉价网络摄像头噪点干扰的情况下表现更稳定。嘴巴识别更准确,尽管眼部区域追踪略逊于某些专业解决方案。

适用于各种硬件的模型分级
仓库中包含多个预构建模型,具有不同的精度-速度权衡。可以通过 --model 参数选择:
- 模型 -1:适用于性能较弱的处理器。单核最高可达213 fps,不包含视线追踪,但追踪精度非常粗糙。
- 模型 0:快速模型,精度一般(约68 fps)。
- 模型 1:速度和质量的平衡折中(约59 fps)。
- 模型 2:良好的追踪效果,资源消耗适中(约50 fps)。
- 模型 3:默认选项,精度最高(单核约44 fps)。
实际上,面部表情捕捉很少需要超过30 fps,因此脚本可以限制帧率以节省CPU时间。
如何启动追踪器
使用代码需要Python 3.6至3.9以及一组最小依赖库:
pip install onnxruntime opencv-python pillow numpy
如果你不想处理Python环境,Releases部分有一个现成的压缩包,包含通过pyinstaller构建的 facetracker.exe。
带可视化界面的基本启动命令如下:
python facetracker.py --visualize 3 --pnp-points 1 --max-threads 4 -c 0
-c 0 标志指定网络摄像头索引。如果需要处理预录视频,请传入文件路径 video.mp4。
与Unity及其他引擎的集成
仓库中包含可直接使用的Unity C#脚本。 OpenSee 组件在后台线程监听传入的UDP数据包,并将坐标存储在公共字段 trackingData 中。
将追踪器连接到场景只需几个步骤:
- 将
OpenSee和OpenSeeShowPoints组件添加到空GameObject。 - 在Unity编辑器中运行场景。
- 启动
facetracker.py脚本。面部特征点将立即出现在场景空间中。 - 要控制角色的头部,可以同时连接
OpenSeeIKTarget组件和FinalIK。
内置的 OpenSeeLauncher 管理器可以自行启动,并通过WinAPI Job Objects正确终止追踪器二进制文件。如果你的Unity应用程序崩溃报错,子追踪器进程不会残留在内存中。
通过LIBSVM进行情绪检测
除了特征点坐标,项目还包含 OpenSeeExpression 组件。它解决的是针对特定人员的情绪分类任务(微笑、愤怒、惊讶)。
作者没有尝试训练一个适用于所有人的通用神经网络,而是使用了SVM分类器。用户自行校准系统:
- 在Unity inspector中输入情绪名称。
- 做出所需的面部表情并启用录制。
- 转动头部并说话,让模型记住动态中的表情变化。
- 点击训练。
训练好的模型保存到单独文件中,在下次应用程序启动时加载。
已有哪些应用场景
OpenSeeFace已成为多个热门动画工具的基础:
- VSeeFace:免费VTuber程序,支持VRM和VSFAvatar格式。
- VTube Studio:通过网络摄像头控制2D Live2D模型的工具。
- VPUPPR:基于Godot引擎的开源虚拟形象渲染器。
谁适合使用这个项目
该库非常适合需要快速面部捕捉但不想购买昂贵头显或配备TrueDepth的iPhone的游戏开发者和互动装置创作者。代码采用宽松的BSD 2-Clause许可证分发,因此你可以放心地将其嵌入商业项目。
如果你需要识别精细的视网膜细节或为医学目的构建亚毫米级精确的多边形3D遮罩,OpenSeeFace并不适用。但对于角色动画、头部动作交互控制以及直播来说,它是GitHub上最实用、最轻量的解决方案之一。
相关项目