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.