EOS- Python绑定——现代C++ 11/14中一个轻量级的三维可变形人脸模型库

eos-p的Python项目详细描述


EOS:在现代C++11/14中,一个轻量级的头部三维可变形人脸模型拟合库。

最新发布Linux主分支构建状态windows主分公司的构建状态apache license 2.0

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模型。它带有紫外线坐标来执行纹理重映射。

Surrey Face Model Shape Picture

完整模型可在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]

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
Java:不解析XML的简单XML。例外   KIE Workbench的java自定义UI   java将元素从bucket移动到LinkedList,但有一个元素被完全删除   如何将java stream collect转换为scala   java运行AsynkTask多次不工作   java组织。xml。萨克斯。SAXParseException:cvccomplextype。2.4.c:匹配的通配符是严格的   java是一种计算排序算法所需时间的合适方法   java在O(logn)时间内对排序整数数组中具有相同数字的数字进行计数   xpages从当前数据库javaAgent调用另一个数据库的javaAgent   java如何在instagram中上传特定位置的所有照片   JavaApachePOI可以有效地删除多个列   java创建的对象数   java我可以在关闭连接时关闭Oracle JDBC自动提交吗?