face3d: 3D人脸处理Python开源工具

简介

3D 人脸是非常有趣的研究领域。face3D (https://github.com/YadiraF/face3d) 是一个基于 Python 的开源项目,实现了 3D 人脸研究的众多功能。它可以处理网格数据,用形变模型生成 3D 人脸,从单张二维人脸图片和关键点重建三维图像,渲染不同光照条件的人脸。

face3D 非常轻量化,最开始完全是基于 Numpy 写的。但有些函数(比如光栅化)不能用向量化进行优化,在 Python 中非常慢。这部分函数作者改用 C++ 编写,没有调用 OpenCV、Eigen 等大型的库,再用 Cpython 编译以供 Python 调用。

项目作者考虑到初学者刚开始学习时应该聚焦在算法本身,同时让研究人员能够快速修改和验证他们的想法,Numpy 版本也被保留下来。此外,作者也尽量在每个函数中添加了引用的公式,以方便初学者学习基础知识、理解代码。更多的 3D 人脸研究信息,包括论文和代码,也可以在项目Github中找到。

结构

克隆项目仓库后,可以看到有examplesface3d两个文件夹。

example文件夹提供了不同例子,包括代码、图像数据。

face3D 中有mesh、mesh_numpy 和 morphable_model 3个文件夹,mesh 是网格处理的主要部分,mesh_numpy 是 mesh 的纯 Numpy 版本,morphable_model 提供了 3DMM 方法的实现。3DMM 是非常流行的3D人脸生成和重建的一个方法,具体可以参考《Regressing Robust and Discriminative 3D Morphable Models with a very Deep Neural Network》这篇论文。

开始使用

环境要求

  • Python 2 或 3
  • Python包:
    • numpy
    • skimage
    • scipy
    • matplotlib
    • Cython

开始使用

  1. 克隆仓库:
git clone https://github.com/YadiraF/face3d
cd face3d
  1. 如果不是使用numpy版,需要编译c++文件:
cd face3d/mesh/cython
python setup.py build_ext -i
  1. 如果要使用3DMM模型,需要准备 BFM 文件,可参考 https://github.com/YadiraF/face3d/blob/master/examples/Data/BFM/readme.md 。

接下来,就可以尝试一些例子。

例子

进入example文件夹,直接运行一些例子:

3DMM

直接输入python 2_3dmm.py就能看到3dmm的运行示例。

3DMM生成的随机例子:

使用了68个关键点生成的例子:

变换

python 3_transform.py

修复相机位置并使用正交投影;然后变换人脸(缩放,改变pitch、yaw、roll 姿态角):

修复obj position并使用透视投影 (fovy = 30);然后移动相机位置并旋转相机(从远到近,向下和向上,向左和向右,旋转相机):

Image map

python 4_light.py

渲染图像像素中的不同属性,深度、pncc和uv坐标:

uv map

python 7_uv_map.py

在uv坐标中渲染不同的属性,颜色(纹理贴图)、位置(2D面部图像和相应的位置图):

结语

尝试完一些例子,如果要进行更深入的研究,建议按顺序阅读例子的代码,然后阅读 mesh_numpy 的代码和原理。


欢迎关注:

© 版权声明
THE END
喜欢就支持以下吧
点赞0
分享
评论 抢沙发