(Python)3D人脸处理工具Face3d

2019 年 2 月 10 日 AI研习社

本文为 AI 研习社编译的技术博客,原标题 :

Face3d: Python tools for processing 3D face

作者 | YadiraF

翻译 | 小哥哥、酱番梨、zackary

校对 | 酱番梨       审核| 邓普斯•杰弗      整理 | 菠萝妹

原文链接:

https://github.com/YadiraF/face3d

注:本文的相关链接请点击文末【阅读原文】进行访问


(Python)3D人脸处理工具Face3d


  介绍

这个项目实现了一些与3D人脸相关的基本功能。

你可以使用它来处理网格数据,从可变形模型生成3D人脸,用一幅图片和几个关键点作为输入来重建3D人脸,给人脸打上不同的光照(详情请见例程)。

一开始,我是为了学习3D人脸重建以及一些个人研究才开始写这个项目的,所以所有的代码都是用Python(numpy)写的。然而,有些函数(例如rasterization光栅化)不能用向量来优化,用python实现的话运行起来会很慢,于是我决定用C++来完成这些部分(不使用别的库,如OpenCV或者eigen),然后用Cython编译以供Python调用。所以最终版本十分轻量而且运行很快。

此外,考虑到初学者可以关注于算法本身,研究者可以快速的尝试并验证自己的想法,numpy版本也被保留了。为了你们能学习到基础知识并理解代码,我会尽力在每个函数中添加引用和公式。

想要了解更多3D人脸的消息和研究,你可以看看这里。

请阅读吧。^_^


  架构

# 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 rendermesh_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


  案例

cd ./examples
  • 3dmm. python 2_3dmm.py

上面这张图:由3dmm随机生成的案例

下面这张图:使用68个关键点由3dmm拟合的人脸

  • 转化. python 3_transform.py

上面这张图:

修复了相机位置&使用正交投影(常使用于重建)

然后转换了人脸:比例,改变俯仰角度,改变下巴角度,改变侧倾角度等

下面这张图:

修复了物体位置&使用透视投影(fovy = 30)(模拟真实视图)  。

然后改变相机位置,旋转相机:从远到近,从下到上,从左到右。

  • light. python 4_light.py

单点投光:从左到右,从上到下,从近到远。

  • image map python 6_image_map.py

渲染图像像素中的不同属性。 例如深度,pncc,uv坐标 

  • uv map python 7_uv_map.py

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


  开始吧!

必要条件

  • Python 2 or Python 3

  • Python packages:

  1. numpy

  2. skimage (为了读取&编辑图像)

  3. scipy (为了加载mat)

  4. matplotlib (为了展示)

  5. Cython (为了编译 c++ 文件)

使用

1.克隆库

git clone https://github.com/YadiraF/face3dcd face3d

2.编译 c++ 文件为了在Python中使用(如果你用的是numpy版本的话就忽略吧)

cd face3d/mesh/cython
python setup.py build_ext -i

3.准备BFM数据(如果你不使用3dmm的话就忽略吧)

请看                      https://github.com/YadiraF/face3d/blob/master/examples/Data/BFM/readme.md

4.运行例子

cd examples
python 1_pipeline.py

(示例使用cython版本,您可以将mesh更改为mesh_numpy以使用numpy版本) 

对于想要继续研究3D面部的初学者,我强烈建议您先按顺序运行示例,然后在mesh_numpy中查看代码并阅读每个文件中开头写的注释。希望这可以对你有所帮助!  

此外,我是计算机图形学的新手,所以如果你能指出我的一些错误的表达方式,我们将非常感激。谢谢! 


更新日志

2018/10/08 改变结构、添加评论、添加介绍、添加收藏。

2018/07/15 第一个版本



想要继续查看该篇文章相关链接和参考文献?

长按链接点击打开或点击底部【阅读原文】:

https://ai.yanxishe.com/page/TextTranslation/1280


AI研习社每日更新精彩内容,观看更多精彩内容:

盘点图像分类的窍门

深度学习目标检测算法综述

生成模型:基于单张图片找到物体位置

AutoML :无人驾驶机器学习模型设计自动化


等你来译:

如何在神经NLP处理中引用语义结构 

你睡着了吗?不如起来给你的睡眠分个类吧! 

高级DQNs:利用深度强化学习玩吃豆人游戏

深度强化学习新趋势:谷歌如何把好奇心引入强化学习智能体 

2月2日至2月12日,AI求职百题斩之每日挑战限时升级,赶紧来答题吧!

0210期  答题须知

请在公众号菜单【每日一题】→【每日一题】进入,或发送【0210】即可答题并获取解析。


点击阅读原文,查看更多内容

登录查看更多
7

相关内容

3D是英文“Three Dimensions”的简称,中文是指三维、三个维度、三个坐标,即有长、有宽、有高,换句话说,就是立体的,是相对于只有长和宽的平面(2D)而言。
Python地理数据处理,362页pdf,Geoprocessing with Python
专知会员服务
110+阅读 · 2020年5月24日
【实用书】Python技术手册,第三版767页pdf
专知会员服务
229+阅读 · 2020年5月21日
一份循环神经网络RNNs简明教程,37页ppt
专知会员服务
168+阅读 · 2020年5月6日
《深度学习》圣经花书的数学推导、原理与Python代码实现
Keras François Chollet 《Deep Learning with Python 》, 386页pdf
专知会员服务
143+阅读 · 2019年10月12日
开源书:PyTorch深度学习起步
专知会员服务
49+阅读 · 2019年10月11日
人脸专集3 | 人脸关键点检测(下)—文末源码
计算机视觉战队
19+阅读 · 2019年4月8日
「Awesome」3D机器学习资源汇总
专知
7+阅读 · 2019年3月14日
用PyTorch做物体检测和追踪
AI研习社
12+阅读 · 2019年1月6日
实战 | 用Python做图像处理(二)
七月在线实验室
17+阅读 · 2018年5月25日
Python | 50行代码实现人脸检测
计算机与网络安全
3+阅读 · 2018年1月23日
用Python制作3D动画
Python程序员
30+阅读 · 2018年1月17日
【推荐】用Python/OpenCV实现增强现实
机器学习研究会
14+阅读 · 2017年11月16日
3D Deep Learning on Medical Images: A Review
Arxiv
11+阅读 · 2020年4月1日
3D Face Modeling from Diverse Raw Scan Data
Arxiv
5+阅读 · 2019年2月13日
3D-LaneNet: end-to-end 3D multiple lane detection
Arxiv
7+阅读 · 2018年11月26日
Arxiv
5+阅读 · 2018年5月22日
VIP会员
相关VIP内容
相关资讯
人脸专集3 | 人脸关键点检测(下)—文末源码
计算机视觉战队
19+阅读 · 2019年4月8日
「Awesome」3D机器学习资源汇总
专知
7+阅读 · 2019年3月14日
用PyTorch做物体检测和追踪
AI研习社
12+阅读 · 2019年1月6日
实战 | 用Python做图像处理(二)
七月在线实验室
17+阅读 · 2018年5月25日
Python | 50行代码实现人脸检测
计算机与网络安全
3+阅读 · 2018年1月23日
用Python制作3D动画
Python程序员
30+阅读 · 2018年1月17日
【推荐】用Python/OpenCV实现增强现实
机器学习研究会
14+阅读 · 2017年11月16日
Top
微信扫码咨询专知VIP会员