社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

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

AI研习社 • 6 年前 • 1502 次点击  

本文为 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】即可答题并获取解析。


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


今天看啥 - 高品质阅读平台
本文地址:http://www.jintiankansha.me/t/SEGAaoAL7k
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/28707
 
1502 次点击