EOS- Python绑定——现代C++ 11/14中一个轻量级的三维可变形人脸模型库
eos-p的Python项目详细描述
EOS:在现代C++11/14中,一个轻量级的头部三维可变形人脸模型拟合库。
eos是一个轻量级的三维可变形人脸模型拟合库,它提供了使用人脸模型的基本功能,以及相机和形状拟合功能。它是用现代C++11/14编写的。
目前,它主要提供以下功能:
- 可变形模型和pcamodel类来表示3dms,它们有一些基本操作,如
draw_sample()
。支持Surrey Face Model(SFM)、4D Face Model(4DFM)和Basel Face Model(BFM)2009和2017开箱即用 - 我们的低分辨率、仅形状的3D可变形人脸模型(共享/sfm_3448.bin)
- 快速线性姿势、形状和表达式拟合、边缘和轮廓拟合:
- 线性缩放正交投影相机姿态估计
- 线性形状到地标的拟合,o.aldrian&w.smith的实现,使用三维可变形模型的面逆渲染,pami 2013
- 表情拟合,6种线性表情混合:愤怒、厌恶、恐惧、快乐、悲伤、惊喜
- 边缘拟合,主要灵感来自:a.bas等人,将三维可变形模型拟合到边缘:硬对应和软对应之间的比较,accvw 2016
- isomap纹理提取以获得人脸纹理的姿势不变表示
- python绑定:eos的大部分功能都可以作为python模块使用(请尝试
pip install eos py
!) - (实验性):使用ceres对形状、相机、混合形状和颜色模型进行非线性拟合的成本函数(需要单独安装ceres)
在这里可以使用实验模型查看器来可视化三维可变形模型和混合图形。
用法
- 使用以下编译器进行测试:>;=gcc-6,>;=clang-5,>;=visual studio 2017 15.5,>;=xcode 9.2。
- 库和python绑定不需要任何外部依赖性。示例应用程序需要boost(>;=1.50.0)和opencv(>;=2.4.3)。
要在自己的项目中使用库,只需将以下目录添加到包含路径:
eos/include
EOS/3rdparty/谷类食品/包括
eos/3rdparty/glm
eos/3rdparty/nanoflann/include
eos/3rdparty/eigen/eigen
eos/3rdparty/eign3 nnls/src
eos/3rdparty/toml11
确保使用--recursive
克隆以下载所需的子模块!
构建示例和测试
- 示例应用程序所需的依赖项:cmake(对于vs2017,>;=3.8.2或>;=3.10.0)、boost系统、文件系统、程序选项(>;=1.50.0)、opencv核心、imgproc、highgui(>;=2.4.3)。
构建:
git clone --recursive https://github.com/patrikhuber/eos.git
mkdir build && cd build # creates a build directory next to the 'eos' folder
cmake -G "<your favourite generator>" ../eos -DCMAKE_INSTALL_PREFIX=../install/
make && make install # or open the project file and build in an IDE like Visual Studio
强烈建议使用vcpkg在windows上安装依赖项。
希望手动管理依赖项的用户可能会发现,将initial_cache.cmake.template
复制到initial_cache.cmake
,编辑必要的路径,并使用-c../eos/initial_cache.cmake
运行cmake
。在Linux上,您可能还需要适当地设置-dcmake_build_type=…
。
示例代码
Fit Model示例应用程序从二维图像创建三维面。
在执行make install
或运行install
目标之后,可以在install/bin/data/
中找到带有标记的示例图像。模型和必要的地标映射文件安装到install/share/
您只需运行:
适合型号
它将从./share/
目录加载面模型、地标到顶点映射、混合图形和其他所需文件,并在示例图像上运行。通过给它一个图像的-i
参数和一组ibug地标的-l
参数,它可以在其他图像上运行。通过运行fit model--help
如果您刚刚开始,建议您也查看一下fit model simple
,因为它需要的输入更少,而且只适合姿势和形状,而不需要任何混合形状或边缘拟合。它的全套参数是:
fit model simple-m../share/sfm_3448.bin-p../share/ibug_to_sfm.txt-i data/image_0010.png-l data/image_0010.pts
这两种情况下的输出都是带有形状的obj
文件和带有提取的isomap的png
文件。代码中通过API提供了估计的姿态角和形状系数。
有关完整代码,请参见examples/fit model.cpp。
萨里脸模型
该库包括一个低分辨率的萨里变形脸模型只形状版本。它是由三维人脸扫描建立的形状变化pca模型。它带有紫外线坐标来执行纹理重映射。
完整模型可在http://www.cvssp.org/facemodel" rel="nofollow">http://www.cvssp.org/facemodel
4D人脸模型(4DFM)
EOS可用于从4dface ltd加载、使用4dfm模型并进行基本拟合。该模型具有36个表达式/动作单元和不同的身份变化。
"4D面部模特彩照" src="https://warehouse-camo.cmh1.psfhosted.org/8ec2faA372570E1315942ACC637CC2B5CF68526A139/687474747470733A3222222222F172727272727267676767676772726572727265727272565656E74656E74656E74622E74656E746E742E746E742E6366E742E742E742E6366F677262626262627272722F65656F732F7676767676767676767676767676767676767677322F67676767676767677322是的6A7067"宽度="20%" /> "4D人脸模型" src="https://warehouse-camo.cmh1.psfhosted.org/bc016de29c18d5a9a5a9a5a5a5a5e5e5e5c5e5e5c5e3e3e1b/687474747470733222222f7262727262756275757575736572727272657272727272727272727272727256565656565656E74657272726262626262626262626262626262627272725667676767732f676762676767676767676767676767722f67676262626262626767676767676767732f6767676767百分比" />
有关模型的更多信息,请访问www.4dface.io/4dfm/" rel="nofollow">www.4dface.io/4dfm
python绑定
eos的一些功能包括python绑定(还可以添加更多内容!)。可以从pypi使用pip install eos py
安装。您仍然需要此存储库中的数据文件。
确保您已经将>;=g cc-7或>;=clang-5作为Linux上的默认编译器(例如,从ubuntu-toolchain-r/+archive/ubuntu/test" rel="nofollow">ubuntu-toolchain-r/test存储库中),或者执行cc=`which gcc-7`cxx=`which g++-7`pip install eos-py
。还要确保您的路径中有>;=cmake-3.8.2(或>;=vs2017的cmake-3.10.0)。
如果出现问题,也可以手动构建绑定:克隆存储库并在运行cmake时设置-deos_generate_python_bindings=on
(如果没有自动找到,还可以选择设置python_executable
,指向python解释器)。
获得绑定后,它们可以像任何python模块一样使用:
import eos
import numpy as np
model = eos.morphablemodel.load_model("eos/share/sfm_shape_3448.bin")
sample = model.get_shape_model().draw_sample([1.0, -0.5, 0.7])
help(eos) # check the documentation
有关如何运行配件的示例,请参见demo.py
。
Matlab绑定
实验(目前未维护):eos包含拟合形状和姿态(…)
函数的Matlab绑定,这意味着可以从Matlab运行拟合。在运行cmake时设置-deos_generate_matlab_bindings=on
以生成所需的mex文件,并运行install
目标以安装所有内容。(设置matlab_root_dir
以指向未自动找到的Matlab目录)。将来可能会添加更多绑定(例如可变形模型本身)。
转到install/eos/matlab
目录并运行demo.m
以了解如何运行配件。结果是网格和渲染参数(姿势)。
文档
doxygen:http://patrikhuber.github.io/eos/doc/
doxygen中的适合模型示例和命名空间列表是一个很好的起点。
许可证和贡献
此代码是在apache许可2.0版下授权的。share/sfm_3448.bin下的三维可变形人脸模型可免费用于非商业用途。出于商业目的和获取其他模型分辨率,请参见http://www.cvssp.org/facemodel" rel="nofollow">http://www.cvssp.org/facemodel
非常欢迎您的贡献!(最好以拉取请求的形式)请将github问题用于任何错误报告、想法和讨论。
如果您在自己的工作中使用此代码,请引用以下文章:一个多分辨率三维可变形人脸模型和Fitting framework,P.Huber,G.Hu,R.Tena,P.Mortazavian,W.Koppen,W.Christmas,M.R_tsch,J.Kittler,计算机视觉理论与应用国际会议(VISApp)2016,意大利罗马[pdf]