Patrikhuber Eos Versions Save

A lightweight 3D Morphable Face Model library in modern C++

v0.17.0

5 years ago

This is a release with quite a few nice changes and improvements. Please read through the release notes carefully. This release was in the devel branch for a few months, and never actually left the devel branch. The MorphableModel format version was increased to 3, from adding landmark_definitions. Since there are quite a few model files with this version in circulation, it was deemed best to make it an "official" model version and release it as v0.17.0.

Major changes & improvements:

  • Added (optional) landmark definitions to the MorphableModel class (8fcc2bfa4f73d1d49388e2b72f99fc2e8c57d2a4) Models can now optionally store landmark/vertex definitions, for example mappings like "eye.right.outer_corner" <=> 177 from a generic name to vertex ids - and then a second mappings file can be used, that maps from 2D landmark identifiers (like the number 37 from ibug) to these generic names ("eye.right.outer_corner"). This separates the vertex definition from a particular set of 2D landmarks. Alternatively, users can still use direct mappings, like in the file ibug_to_sfm.txt, which map directly from 2D landmark identifiers to 3D vertex indices.
  • Added a getter to MorphableModel for landmark_definitions (e995b07821038567284bf02202feb6021289d1e0)
  • Set the vertex_idx in the fitting depending on whether the model contains landmark definitions (f123e518c3a85bb5deaf9d17e7c11931ede9225a)
  • Revamped the Image class to a better and more future-proof design (14b7f6f6d998bb30de3f2047fa7f6af374786f3c) Note: The storage order is now row-major, as opposed to col-major before. In the future, we may add means to choose the storage order.
  • Added natvis file for Image Watch for eos::core::Image (be436f4d99406cfb62addabcc45303a7aa780a66)

Fixes:

  • Fix mpark::variant compilation error on VS >=15.8; Updated pybind11 submodule to fix errors on VS 15.8 (a45a888bbf29b251f2bd472d13a06208387e6a8b, ecc626946da2cbea42623759ff09dec6ef9eba34)

Minor improvements, potentially breaking changes:

  • Renamed get_all_mappings() to get_mappings() (9e0f539652e28a8b461bde9a53a202c471b04677)
  • Created new directory eos/core/image/ and moved Image_opencv_interop.hpp there (ad06db1b9e85319e8bddbca67b52f248b4dda331)
  • Return triangle_list by const reference (a7ede7bfca5cc1929b43d629dc90db7c5c3ae14d)
  • Exposed a few more things to the Python bindings, particularly landmark-mappings related, and added some __repr__ methods.
  • Removed the unused initial_rendering_params parameter from fit_shape_and_pose (ba46285497485c1ab8f0f80722e8c09eb8b26e43)

Other minor changes/improvements:

  • Exposed some parameters of the contour fitting to callers (54ade09b95c2680d2393d4020604c569189b8a1e, abb2dd7b29944490cbffe92f77b3a5843c8bd990, 3929d0cffd004d1bfae29cde43b9f48e2f35067f)
  • Improved read_obj a bit to handle a few more cases. Still, don't rely on it to parse every .obj file, it's not meant to do that. Use your own or assimp or something like that.

And as always, various small improvements to the code style and to the documentation.

v0.16.1

5 years ago

A few minor updates and fixes:

Fixes:

  • Added missing inline to draw_sample (a6900a2)
  • Fixed constructing a 4x4 rotation matrix R instead of 3x3 in the Python bindings of ScaledOrthoProjectionParameters (5863f3b)

Updates:

  • Moved render::Rect to core namespace
  • Added Python bindings for eos::core::Rect and eos::core::Landmark<Eigen::Vector2f>. The Python bindings are now using Landmark and LandmarkCollection natively, without having to keep a separate list of landmark identifiers.
  • Added README.md as long_description for PyPI (link)
  • Minor README.me/initial_cache.cmake.template updates

v0.16.0

6 years ago

This is a major release, bringing full support for expression PCA models. MorphableModels can now either contain no expression model, a set of blendshapes, or a PCA expression model. The fit_shape_and_pose supports both as well, and calls either the _linear or _nnls solver, depending on whether a model contains blendshapes or an expression PCA model.

The main changes that go along with that:

  • Updated the MorphableModel file format to version to 2 to include an optional expression model. Version 1 models can still be read.
  • Added a flag ExpressionModelType to MorphableModel to easily query the type of the expression model.

Note: The behaviour of MorphableModel::get_mean() has been changed: It now returns the overall shape and expression mean. (see #188)

Other small additions:

  • Updated the BFM2017 converter script to convert and save the expression PCA model too.
  • Added a fitting function for fixed, given correspondences, that runs the fitting loop without contour fitting. (see here)
  • The online doxygen documentation has been updated to v0.16.0.

As always, when updating from the GitHub repository, make sure to run git submodule update --init --recursive.

The binary files are provided for convenience only - it is recommended to build the examples from source, and use the library by cloning the GitHub repository.

Windows binaries are compiled with Windows 10 64bit, Visual Studio 2017. A .whl with python bindings for python 3.6 is available on PyPI. Linux binaries are compiled with Linux Mint 18.3, based on Ubuntu 16.04, gcc-7. Make sure to follow the instructions for how to use gcc-7 with pip if using the Python bindings on Linux.

v0.15.1

6 years ago

This release improves a few crucial things over the last release.

Support for pre-C++17 compilers should be a lot better again - eos compiles again in C++14 mode on VS 2017, and, although not officially tested in CI, likely also compiles again with the likes of g++-5:

  • eos now seemlessly uses akrzemi1::optional on all pre-C++17 compilers, not only on Apple platforms.
  • Serialisation for optional also works correctly on all platforms (pre-C++17 and C++17 compilers); and updated cereal to the latest develop branch commit.
  • optional now also works within the python bindings for pre-C++17 and C++17 compilers.
  • Added eos::cpp17::clamp, which uses std::clamp on C++17 compilers, or a fallback otherwise.

Matlab bindings:

  • Updated the eos-matlab-fitting bindings! They now work again in the latest version to use the fitting from Matlab.
  • Disabled the eos-matlab-render bindings for now, as they would be more work to update. Having the fitting bindings back should suffice for most use cases.

Other small things:

  • A few small improvements to the main CMakeLists.txt (86fbfa17cf73892196ac6f95b48ba2b67b8f66a6).
  • Fixed a missing inline, missing include, added a few consts, a couple documentation updates.

v0.15.0

6 years ago

eos is now fully working on Apple Xcode again and CI-tested with Xcode 9.2.

Main changes:

  • Use of eos::cpp17::optional throughout the code base, to support platforms that do not have <optional> yet (currently only macOS - #ifdef __APPLE__). It is a namespace alias, and will be resolved to std::optional on compilers that have <optional>.
  • akrzemi1/Optional is directly integrated into eos and used on macOS
  • Added official eigen-git-mirror as submodule at tag 3.3.4, instead of the patrikhuber/eigen fork
  • Updated Keyframe-related code to work again with the latest eos version
  • Minor other improvements and updates (see https://github.com/patrikhuber/eos/compare/v0.14.0...v0.15.0 for all the details)

v0.14.0

6 years ago

This is an update release with various small improvements throughout and two highlights: One major highlight is proper (and tested) support for the BFM2009 (and partially the BFM2017). Another highlight is that the multi_image_fit_devel branch is finally merged into master, and multi-frame fitting is thus now available in the main version.

The changes include, alongside other minor changes:

  • Merged multi-frame fitting from multi_image_fit_devel branch. Thank you very much @PhilippKopp for the contribution!
  • Added new (and correct) script to convert the BFM2009
  • Added script to convert the BFM2017
  • Updated syntax of the ibug_to_bfm*.txt files to TOML
  • Add Python and Matlab scripts to generate edge-topology files
  • Updated wiki with all BFM info & files (link)
  • Clamping the colours to [0, 1] in sample_to_mesh
  • Check find_if result for std::end in get_nearest_contour_correspondences to avoid continuing in Release builds without any error message
  • Added lots of const qualifiers where possible
  • Ran clang-format on the whole codebase
  • Added some minor useful things to the Python bindings (e.g. default c'tors for Mesh and Blendshape)
  • Updated Ceres code and example to work with the recent eos changes

v0.13.0

6 years ago

This release contains some major changes, mainly to the software-side of the library, and not to the algorithms.

  • The library is now completely free of external dependencies, it does not depend on Boost and OpenCV anymore. All dependencies are header-only and included as submodules.
  • The minimum required compilers are gcc-7, clang-5 and VS2017 Update 3.
  • Changed the configuration file format from the custom boost::property_tree format to TOML. This mainly affects share/ibug_to_sfm.txt.

All in all, these changes make using the library much easier, and they should especially enable installation of the python bindings via pip install eos-py on any system, given >=cmake-3.8.2 and a recent compiler.

The changes, alongside other minor changes, include:

  • Replacing all OpenCV vector types with Eigen::Vector
  • Replacing glm types in the Python bindings with Eigen types
  • Changed the pose fitting from OpenCV to Eigen - this could potentially be a bit of a speed-up
  • Added own Image class (very basic, just covering the barebones needed to replace cv::Mat and to represent images). There is a converter function to and from cv::Mat (eos/core/Image_opencv_interop.hpp))
  • Added functions to load and save PCA models (6c31092)
  • Added ibug to BFM landmark mappings (5dbff1e)
  • Updated all submodules to their newest versions
  • Many more small fixes and improvements (documentation fixes, added 'const' in many places, etc.)

v0.12.2

6 years ago

This is a minor release, mainly adding functionality to build PCA models (include/eos/pca/pca.hpp).

This will be the last version that supports gcc-5, clang-3.x, and VS2015. The next release will require >=gcc-7, >=clang-5 and >=VS2017U3.

Other minor changes:

v0.12.1

7 years ago

This update brings a major speed-up of the shape and blendshape fitting. Depending on the setup (model resolution used, number of coefficients fitted), the speed-up is around 3x to 50x - typically around 10x. The shape and blendshape fitting now take only around or below 1ms per iteration (previously ~10ms). This was achieved by changing all linear algebra operations from OpenCV to Eigen.

Please see also the release notes of v0.12.0 below for the latest changes and updates, some of them breaking changes. See also the release notes of v0.12.0 for information on the PyPi package (eos-py) and the provided binaries.

v0.12.0

7 years ago

This is mainly a maintenance release but contains quite a number of improvements. There are some breaking changes in this release and models have to be re-downloaded in the new format.

Major changes:

  • Changed PcaModel, MorphableModel and blendshapes to use Eigen for matrices and vectors instead of OpenCV's cv::Mat. This change was motivated by the fact that we need Eigen already anyway for solving linear systems. And since Eigen is a header-only library, the core of eos becomes more independent of OpenCV and easier to compile in the near future. This change means that the model format has changed as well, so users will have to re-download the models and blendshapes in the new model format.
  • Changed PcaModel constructor to take an orthonormal basis (4662c59c4d9ae233047d1b5130470db1ed6bf894) This introduces a breaking change: If you're currently using the PcaModel constructor and are passing it a PCA basis matrix, your code will (probably silently) break: The function now expects an orthonormal basis matrix, whereas before, it expected a rescaled basis matrix. However it makes more sense for the function to take an orthonormal basis matrix, as this is usually the result after computing a PCA on data.
  • Furthermore, "unnormalised" basis has been renamed to "orthonormal", and "normalised" basis to "rescaled", and the getters have been modified accordingly. This should clear up confusion and make the descriptions good and unambiguous ("normalised" and "unnormalised" was really not a good choice!). (0fdd8a126e82f653001452e88bf1d34210a9ba36)

Minor changes:

  • Updated all apps and utilities to reflect all the changes in this release
  • We now only store the orthonormal basis in the model files - the rescaled basis is computed when models are loaded. This halves the file size of all models. (50c059c3ff8ced6057e3a7aa15fc5943467c19df)
  • Renamed get_*_pca_basis(int) to get_*_pca_basis_at_point(int) (354deb3e962dce0e7dab7b20f1d4c5886a06e103)
  • The mean, basis and eigenvalues of PcaModel are now returned by const reference (8901c1141af0217f64b509378f9effc9e8febc23)
  • Added a setup.py file for python's pip: This means eos's python bindings can now be built and installed with pip install ./eos, and packages can be created with python setup.py sdist and python setup.py bdist_wheel. A setup.cfg.template exists to set library paths to OpenCV and Boost.
  • Added various python bindings: write_obj, save_model, functionality to construct new models, draw_sample, and more
  • Added Eigen as git submodule. This was required because Ubuntu 14.04 only ships with Eigen 3.2.2, while pybind11's new Eigen bindings requires at least 3.2.7. This way, we're also more independent with regards to Python's sdist package. An external Eigen can still be used by setting EIGEN3_INCLUDE_DIR.
  • Added cereal as submodule, removed local copy (f38ac6237e9dc372aea69d6aa43baf8f10507600)
  • Added better warnings and errors as to the use of fit-model-ceres
  • Minor documentation fixes and improvements.

eos python bindings are now available on PyPI! There's a wheel for python 3.5 on Windows, and a source dist. The source dist needs CMake's find_package to be able to find OpenCV and Boost automatically for it to work (so install it beforehand from a package manager). If there are issues, you can always clone the repo and do pip install ./eos locally, after adjusting the paths in setup.cfg.

As always, make sure to clone the repository with git clone --recursive, or, if you're updating, run git submodule update --init --recursive.

Windows binaries are compiled with Windows 8.1 64bit, Visual Studio 2015. A .whl with python bindings for python 3.5 is available on PyPI. The Matlab bindings are created for Matlab R2016b. Linux binaries are compiled with Linux Mint 18, based on Ubuntu 16.04, gcc-5.4.