Releases: patrikhuber/eos
v0.12.0
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'scv::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 (4662c59)
This introduces a breaking change: If you're currently using thePcaModel
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!). (0fdd8a1)
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. (50c059c)
- Renamed
get_*_pca_basis(int)
toget_*_pca_basis_at_point(int)
(354deb3) - The mean, basis and eigenvalues of PcaModel are now returned by const reference (8901c11)
- Added a setup.py file for python's pip:
This means eos's python bindings can now be built and installed withpip install ./eos
, and packages can be created withpython setup.py sdist
andpython setup.py bdist_wheel
. Asetup.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 settingEIGEN3_INCLUDE_DIR
. - Added cereal as submodule, removed local copy (f38ac62)
- 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.
v0.11.1
A very small release with very minor updates.
- The BFM Matlab to binary conversion script is now much faster, thanks to @NextDesign1
- A fix that makes eos compile on clang 3.9.1 on OS X from macports, thanks @NextDesign1!
- Minor updates and clarifications in readme's
This is the last release to support the current model format. eos is switching to Eigen for the PcaModel and MorphableModel classes, which will require users to re-download the models in the new format.
The changes are already done in the devel branch and will be included in the next official release.
v0.11.0
This release contains a major modernisation of the CMake scripts. Most of it now follows a target-based approach. The release also contains improvements to the Python and Matlab bindings.
No changes to the fitting algorithm(s) in this release.
Noteworthy changes:
- Major CMake modernisation (and thank you to @ruslo for the PRs!)
- gcc-4.9 and CMake 3.1.3 are the new minimum required versions
- More Python and Matlab bindings, improvements of the bindings and the documentation
- Added a
.clang-format
file - please more or less stick to the style in there for new contributions. Most notably, we switched from tabs to 4 spaces, as it improves readability on GitHub - Moved
Mesh
tocore
namespace (this may break current code, but is easily fixed) - All CMake options are now prefixed with
EOS_
, you may need to update your configuration (e.g.BUILD_EXAMPLES
=>EOS_BUILD_EXAMPLES
).
The software renderer also got refactored into classes, with a more dynamic approach for vertex and pixel shaders, and rasterising, following the OpenGL paradigm. The code of the core renderer is exactly the same. The new code is very much experimental, I suggest sticking to the existing rendering functions, which are still there and work as before.
As before, 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. The bindings are created for Python 3.5 and Matlab R2016b.
Linux binaries are compiled with Linux Mint 18, based on Ubuntu 16.04, gcc-5.4.
v0.10.1
Minor improvements of the project infrastructure: The INSTALL
target copies less 3rd-party files (only the headers now), python bindings are now in a separate directory, and the python bindings are being built on travis and AppVeyor.
v0.10.0
Added Matlab bindings for the fitting function fit_shape_and_pose(...)
, which means the fitting can be run from Matlab. It returns a mesh and rendering_parameters (pose). A demo script (demo.m
) is included - see the Matlab bindings section of the README.md for more details.
Set GENERATE_MATLAB_BINDINGS
in CMake to build the mex file and run the INSTALL
target to install everything. CMake-3.7 is required to build the bindings.
So far, only bindings for this one fitting function exists, but it's one of the key functionalities of eos. The model and needed files have to be given as filenames, which means they have to be loaded each time you call the fit_shape_and_pose(...)
function. It works quite fast but is therefore not fast enough for real-time scenarios.
Another small limitation is that it currently only works with ibug landmarks, and only if all 68 of them are present. This limitation might be lifted in the future.
More bindings (e.g. for the MorphableModel
itself) might be added in the future.
v0.9.1
This minor release brings a large speed-up of the shape-fitting, along with a couple other small improvements.
v0.9.0
This release contains edge fitting as the main addition - this is a major improvement in the fitting quality.
- Added edge fitting from [1]
- Using the edge fitting to fit the contour landmarks in the
fit-model
app - Major rework of the
fit-model
example app: It now uses blendshapes, the new contour fitting, and iterates the different fitting stages, resulting in a major improvement in fitting quality - Added a single function to the library that iteratively fits pose, shape and blendshapes
[1]: A. Bas, W.A.P. Smith, T. Bolkart and S. Wuhrer, "Fitting a 3D Morphable Model to Edges: A Comparison Between Hard and Soft Correspondences", In Proc. ACCV 2016 Workshops, 2016.
Minor improvements/fixes:
- Started a wiki and put some example fitting results: https://github.com/patrikhuber/eos/wiki
- Added non-negative least squares blendshape fitting function
- Renamed the old
fit-model
app tofit-model-simple
: it shows simple pose and shape fitting, without blendshapes or contour-fitting - Fix: Added inline to all functions. No ODR violations anymore if the library is used from multiple translation units
- Added travis and AppVeyor CI
As before, make sure to clone the repository with git clone --recursive
, or, if you're updating, run git submodule update --init --recursive
.
Again there's some precompiled binaries and python bindings available. No guarantees that they'll work on many other systems though. The Python bindings are the same as in eos v0.8.0, no new additions yet.
Windows binaries are compiled for Windows 8.1 64bit, Visual Studio 2015.
Linux binaries are compiled for Linux Mint 18, based on Ubuntu 16.04, gcc-5.4.
v0.8.0
A major release with many new features and some minor fixes and improvements!
- Linear scaled orthographic projection camera estimate. Faster and more stable than the nonlinear and affine algorithms.
fit-model
uses this as new default. - Python bindings for parts of the library!
- Experimental: Ceres cost functions. A landmark-fitting cost function (fitting shape, expressions and pose) and an image error cost function (the latter one requires acquiring the albedo model from CVSSP). Set
-DBUILD_CERES_EXAMPLE
to build an example app.
Minor improvements/fixes:
- Faster converter script and app for the BFM (now using binary files)
- The
Mesh
type and most of the rendering now uses glm types instead of cv::Vec's - Cleaned up RenderingParameters, it now stores the rotation as a quaternion. Its documentation needs to be improved.
- Changed PcaModel getters to return references
- Lots of other small improvements and fixes!
Make sure to clone the repository with git clone --recursive
, or, if you're updating, run git submodule update --init
!
Also there's some precompiled binaries and python bindings available. No guarantees that they'll work on many other systems though. Python bindings are for python-3.5. If you want python-2.7, you need to compile them by yourself.
Windows binaries are compiled for Windows 8.1 64bit, Visual Studio 2015.
Linux binaries are compiled for Linux Mint 18, based on Ubuntu 16.04, gcc-5.4.
v0.7.1
A few minor updates:
- Changed the expression blendshape names slightly to match to Ekman's terminology: anger, disgust, fear, happiness, sadness and surprise
- Added a Matlab script to convert the Basel Face Model (BFM) to json (experimental! very slow (takes >1 hour) and results in a >1 GB file)
- Added an app to convert a json model to a cereal binary model
- Added num_coefficients_to_fit parameter to fit_shape functions
- Added an app to generate random samples from the model
v0.7.0
A major release with many new features and some minor fixes and improvements:
- Added expression blendshapes for the shape model, containing the 6 expressions angry, disgust, fear, happy, sad and surprised (77f6b8d)
- Implemented a linear blendshape fitting to fit these blendshapes to landmarks. One very notable improvement is that it allows the model to open the mouth.
- Added a function that alternates between PCA shape coefficient fitting and blendshape fitting until convergence (245d8e8)
- Added a simple contour fitting that fits the front-facing contour landmarks to the model. This results in much better correspondence.
Minor improvements/fixes:
- Added 2D-3D mappings for all 68 ibug landmarks (597aa29)
- Replaced inv() with solve() in the linear shape and blendshape fitting (b8c5f99)
- Implemented a workaround to make the small black line in the isomap disappear (see #4)
Note 1: The contour-landmarks fitting in contour_correspondence.hpp is a bit beta-quality and doesn't contain all necessary safety checks; for example, if given wrong correspondences, it may crash.
Note 2: I initially wanted to tidy up a few more things before officially tagging this, but it has been on GitHub for so long now and people are using it, so that we'll just make this v0.7.0.