face3d: Python tools for processing 3D face
git code: https://github.com/yfeng95/face3d
paper list: PaperWithCode
该方法广泛用于基于三维人脸关键点的人脸生成、属性检测(如位姿、深度、PNCC等),能够快速实现人脸建模与渲染。推荐!!!
目录
- face3d: Python tools for processing 3D face
- 一、介绍
- 1.1 目录
- 1.2 构建
- 1.2.1先决条件
- 1.3 使用
- 1.3.1 克隆
- 1.3.2 编译C++文件为.so文件,用于python;如果使用numpy版本,则忽略此步。
- 1.3.3 准备BFM数据(如果不使用3dmm可跳过此步)
- 1 下载原始的BFM模型
- 2 下载额外的BFM信息:
- 3 下载STN中的UV坐标
- 1.3.4 运行
- 1.4 运行例子
- 总结
相机坐标下的人脸变换
光照渲染
3DMM模型
提示:对于初学者来说,作者强烈建议按照这个顺序来运行样例,然后再看mesh_numpy中的代码和读每个文件中的注释。
一、介绍
这里尝试去实现有关三维人脸的一些基础功能,如处理网格数据mesh data、基于morphable model的人脸生成,基于单张人脸图片及其关键点的三维人脸重构,带有不同光照效果的人脸渲染等操作。
该工程大部分代码基于python,但有些功能如rasterization使用C++实现循环渲染会快很多,并使用Cython编译供python环境使用,该工具轻量而运行快。
1.1 目录
三维网络数据,是最流行的三维人脸表征方法;3DMM模型广泛用于产生和重构三维人脸。
# Since triangle mesh is the most popular representation of 3D face,
# the main part is mesh processing.
mesh/ # written in python and c++
| cython/ # c++ files, use cython to compile
| io.py # read & write obj
| vis.py # plot mesh
| transform.py # transform mesh & estimate matrix
| light.py # add light & estimate light(to do)
| render.py # obj to image using rasterization render
mesh_numpy/ # the same with mesh/, with each part written in numpy
# slow but easy to learn and modify
# 3DMM is one of the most popular methods to generate & reconstruct 3D face.
morphable_model/
| morphable_model.py # morphable model class: generate & fit
| fit.py # estimate shape&expression parameters. 3dmm fitting.
| load.py # load 3dmm data
1.2 构建
1.2.1先决条件
Python 2 or Python 3
Python packages:
numpy
skimage (for reading&writing image)
scipy (for loading mat)
matplotlib (for show)
Cython (for compiling c++ file)
%可参考pip3命令行下载国内源:
pip3 install numpy -i https://pypi.tuna.tsinghua.edu.cn/simple
pip3 install scikit-image -i https://pypi.tuna.tsinghua.edu.cn/simple
pip3 install scipy -i https://pypi.tuna.tsinghua.edu.cn/simple
pip3 install matplotlib -i https://pypi.tuna.tsinghua.edu.cn/simple
pip3 install Cython -i https://pypi.tuna.tsinghua.edu.cn/simple
1.3 使用
1.3.1 克隆
git clone https://github.com/YadiraF/face3d
cd face3d
1.3.2 编译C++文件为.so文件,用于python;如果使用numpy版本,则忽略此步。
cd face3d/mesh/cython
python setup.py build_ext -i
1.3.3 准备BFM数据(如果不使用3dmm可跳过此步)
1 下载原始的BFM模型
链接:https://faces.dmi.unibas.ch/bfm/main.php?nav=1-2&id=downloads
将所有框都勾上,填写对应的信息后会收到一个下载link,将下载后的文件拷贝:
copy 01_MorphabelModel.mat to raw/
2 下载额外的BFM信息:
链接:3DFFA
下载【face profiling】和【3DFFA】
链接:HPEN
下载HPEN
将下载好的三个压缩包解压,分别在里面找到如下文件:
model_info.mat Model_Expression.mat Model_face_contour_trimed.mat Model_tri_mouth.mat Modelplus_nose_hole.mat Modelplus_parallel.mat vertex_code.mat
然后在face3d/examples/Data/BFM目录下新建一个文件夹3ddfa,将上述文件拷贝进去。
3DDFA(Face Alignment Across Large Poses: A 3D Solution) HFPE(High-Fidelity Pose and Expression Normalization for Face Recognition in the Wild)
3 下载STN中的UV坐标
链接:BFM_UV
点击download下载后解压,在face3d/examples/Data/BFM目录下新建一个文件夹stn,再将BFM_UV.mat复制到stn/
1.3.4 运行
在BFM目录下创建Out文件夹
运行Matlab中的generate.m,产生的文件将会保存在 Out/
提示:一些空文件夹可能需要通过mkdir创建
1.4 运行例子
examples使用cython版本,如果使用numpy,将mesh替换为mesh_numpy即可
cd examples
python 1_pipeline.py
如果得到如下输出,并且在pipeline下有生产的照片说明运行成功
总结
继续读代码,重点理解如何从2D能够映射到3D。