0.6.0 (2015/11/26)

This release is another set of breaking changes for Menpo. All in_place methods have been deprecated to make the API clearer (always copy). The largest change is the removal of all widgets into a subpackage called menpowidgets. To continue using widgets within the Jupyter notebook, you should install menpowidgets.

Breaking Changes

  • Procrustes analysis now checks for mirroring and disables it by default. This is a change in behaviour.
  • The sample_offsets argument of menpo.image.Image.extract_patches() now expects a numpy array rather than a PointCloud.
  • All widgets are removed and now exist as part of the menpowidgets project. The widgets are now only compatible with Jupyter 4.0 and above.
  • Landmark labellers have been totalled refactored and renamed. They have not been deprecated due to the changes. However, the new changes mean that the naming scheme of labels is now much more intuitive. Practically, the usage of labelling has only changed in that now it is possible to label not only LandmarkGroup but also PointCloud and numpy arrays directly.
  • Landmarks are now warped by default, where previously they were not.
  • All vlfeat features have now become optional and will not appear if cyvlfeat is not installed.
  • All label keyword arguments have been removed. They were not found to be useful. For the same effect, you can always create a new landmark group that only contains that label and use that as the group key.

New Features

Github Pull Requests

  • #652 Deprecate a number of inplace methods (@jabooth)
  • #653 New features (vector dsift) (@patricksnape)
  • #651 remove deprecations from 0.5.0 (@jabooth)
  • #650 PointCloud init_2d_grid (@patricksnape)
  • #646 Add ibug_49 -> ibug_49 labelling (@patricksnape)
  • #645 Add new PCAVectorModel class, refactor model package (@patricksnape, @nontas)
  • #644 Remove label kwarg (@patricksnape)
  • #643 Build fixes (@patricksnape)
  • #638 bugfix 2D triangle areas sign was ambiguous (@jabooth)
  • #634 Fixing @patricksnape and @nontas foolish errors (@yuxiang-zhou)
  • #542 Add mirroring check to procrustes (@nontas, @patricksnape)
  • #632 Widgets Migration (@patricksnape, @nontas)
  • #631 Optional transform return on Image methods (@nontas)
  • #628 Patches Visualization (@nontas)
  • #629 Image counter-clockwise rotation (@nontas)
  • #630 Mirror image (@nontas)
  • #625 Labellers Refactoring (@patricksnape)
  • #623 Fix widgets for new Jupyter/IPython 4 release (@patricksnape)
  • #620 Define patches offsets as ndarray (@nontas)

0.5.3 (2015/08/12)

Tiny point release just fixing a typo in the unique_edge_indices method.

0.5.2 (2015/08/04)

Minor bug fixes and impovements including:

  • Menpo is now better at preserving dtypes other than np.float through common operations
  • Image has a new convenience constructor init_from_rolled_channels() to handle building images that have the channels at the back of the array.
  • There are also new crop_to_pointcloud() and crop_to_pointcloud_proportion() methods to round out the Image API, and a deprecation of rescale_to_reference_shape() in favour of rescale_to_pointcloud() to make things more consistent.
  • The gradient() method is deprecated (use menpo.feature.gradient instead)
  • Propagation of the .path property when using as_masked() was fixed
  • Fix for exporting 3D LJSON landmark files
  • A new shuffle kwarg (default False) is present on all multi importers.

Github Pull Requests

  • #617 add shuffle kwarg to multi import generators (@jabooth)
  • #619 Ensure that LJSON landmarks are read in as floats (@jabooth)
  • #618 Small image fix (@patricksnape)
  • #613 Balance out rescale/crop methods (@patricksnape)
  • #615 Allow exporting of 3D landmarks. (@mmcauliffe)
  • #612 Type maintain (@patricksnape)
  • #602 Extract patches types (@patricksnape)
  • #608 Slider for selecting landmark group on widgets (@nontas)
  • #605 tmp move to master condaci (@jabooth)

0.5.1 (2015/07/16)

A small point release that improves the Cython code (particularly extracting patches) compatibility with different data types. In particular, more floating point data types are now supported. print_progress was added and widgets were fixed after the Jupyter 4.0 release. Also, upgrade cyvlfeat requirement to 0.4.0.

Github Pull Requests

  • #604 print_progress enhancements (@jabooth)
  • #603 Fixes for new cyvlfeat (@patricksnape)
  • #599 Add erode and dilate methods to MaskedImage (@jalabort)
  • #601 Add sudo: false to turn on container builds (@patricksnape)
  • #600 Human3.6M labels (@nontas)

0.5.0 (2015/06/25)

This release of Menpo makes a number of very important BREAKING changes to the format of Menpo’s core data types. Most importantly is #524 which swaps the position of the channels on an image from the last axis to the first. This is to maintain row-major ordering and make iterating over the pixels of a channel efficient. This made a huge improvement in speed in other packages such as MenpoFit. It also makes common operations such as iterating over the pixels in an image much simpler:

for channels in image.pixels:
    print(channels.shape)  # This will be a (height x width) ndarray

Other important changes include:

  • Updating all widgets to work with IPython 3
  • Incremental PCA was added.
  • non-inplace cropping methods
  • Dense SIFT features provided by vlfeat
  • The implementation of graphs was changed to use sparse matrices by default. This may cause breaking changes.
  • Many other improvements detailed in the pull requests below!

If you have serialized data using Menpo, you will likely find you have trouble reimporting it. If this is the case, please visit the user group for advice.

Github Pull Requests

  • #598 Visualize sum of channels in widgets (@nontas, @patricksnape)
  • #597 test new dev tag behavior on condaci (@jabooth)
  • #591 Scale around centre (@patricksnape)
  • #596 Update to versioneer v0.15 (@jabooth, @patricksnape)
  • #495 SIFT features (@nontas, @patricksnape, @jabooth, @jalabort)
  • #595 Update mean_pointcloud (@patricksnape, @jalabort)
  • #541 Add triangulation labels for ibug_face_(66/51/49) (@jalabort)
  • #590 Fix centre and diagonal being properties on Images (@patricksnape)
  • #592 Refactor out bounding_box method (@patricksnape)
  • #566 TriMesh utilities (@jabooth)
  • #593 Minor bugfix on AnimationOptionsWidget (@nontas)
  • #587 promote non-inplace crop methods, crop performance improvements (@jabooth, @patricksnape)
  • #586 fix as_matrix where the iterator finished early (@jabooth)
  • #574 Widgets for IPython3 (@nontas, @patricksnape, @jabooth)
  • #588 test condaci 0.2.1, less noisy slack notifications (@jabooth)
  • #568 rescale_pixels() for rescaling the range of pixels (@jabooth)
  • #585 Hotfix: suffix change led to double path resolution. (@patricksnape)
  • #581 Fix the landmark importer in case the landmark file has a ‘.’ in its filename. (@grigorisg9gr)
  • #584 new print_progress visualization function (@jabooth)
  • #580 export_pickle now ensures pathlib.Path save as PurePath (@jabooth)
  • #582 New readers for Middlebury FLO and FRGC ABS files (@patricksnape)
  • #579 Fix the image importer in case of upper case letters in the suffix (@grigorisg9gr)
  • #575 Allowing expanding user paths in exporting pickle (@patricksnape)
  • #577 Change to using (@patricksnape)
  • #570 Zoom (@jabooth, @patricksnape)
  • #569 Add new point_in_pointcloud kwarg to constrain (@patricksnape)
  • #563 TPS Updates (@patricksnape)
  • #567 Optional cmaps (@jalabort)
  • #559 Graphs with isolated vertices (@nontas)
  • #564 Bugfix: PCAModel print (@nontas)
  • #565 fixed minor typo in introduction.rst (@evanjbowling)
  • #562 IPython3 widgets (@patricksnape, @jalabort)
  • #558 Channel roll (@patricksnape)
  • #524 BREAKING CHANGE: Channels flip (@patricksnape, @jabooth, @jalabort)
  • #512 WIP: remove_all_landmarks convienience method, quick lm filter (@jabooth)
  • #554 Bugfix:visualize_images (@nontas)
  • #553 Transform docs fixes (@nontas)
  • #533 LandmarkGroup.init_with_all_label, init_* convenience constructors (@jabooth, @patricksnape)
  • #552 Many fixes for Python 3 support (@patricksnape)
  • #532 Incremental PCA (@patricksnape, @jabooth, @jalabort)
  • #528 New as_matrix and from_matrix methods (@patricksnape)

0.4.4 (2015/03/05)

A hotfix release for properly handling nan values in the landmark formats. Also, a few other bug fixes crept in:

  • Fix 3D Ljson importing
  • Fix trim_components on PCA
  • Fix setting None key on the landmark manager
  • Making mean_pointcloud faster

Also makes an important change to the build configuration that syncs this version of Menpo to IPython 2.x.

Github Pull Requests

  • #560 Assorted fixes (@patricksnape)
  • #557 Ljson nan fix (@patricksnape)

0.4.3 (2015/02/19)

Adds the concept of nan values to the landmarker format for labelling missing landmarks.

Github Pull Requests

  • #556 [0.4.x] Ljson nan/null fixes (@patricksnape)

0.4.2 (2015/02/19)

A hotfix release for landmark groups that have no connectivity.

Github Pull Requests

  • #555 don’t try and build a Graph with no connectivity (@jabooth)

0.4.1 (2015/02/07)

A hotfix release to enable compatibility with

Github Pull Requests

  • #551 HOTFIX: remove incorrect tojson() methods (@jabooth)

0.4.0 (2015/02/04)

The 0.4.0 release (pending any currently unknown bugs), represents a very significant overhaul of Menpo from v0.3.0. In particular, Menpo has been broken into four distinct packages: Menpo, MenpoFit, Menpo3D and MenpoDetect.

Visualization has had major improvements for 2D viewing, in particular through the use of IPython widgets and explicit options on the viewing methods for common tasks (like changing the landmark marker color). This final release is a much smaller set of changes over the alpha releases, so please check the full changelog for the alphas to see all changes from v0.3.0 to v0.4.0.

Summary of changes since v0.4.0a2:

  • Lots of documentation rendering fixes and style fixes including this changelog.
  • Move the LJSON format to V2. V1 is now being deprecated over the next version.
  • More visualization customization fixes including multiple marker colors for landmark groups.

Github Pull Requests

  • #546 IO doc fixes (@jabooth)
  • #545 Different marker colour per label (@nontas)
  • #543 Bug fix for importing an image, case of a dot in image name. (@grigorisg9gr)
  • #544 Move docs to Sphinx 1.3b2 (@patricksnape)
  • #536 Docs fixes (@patricksnape)
  • #530 Visualization and Widgets upgrade (@patricksnape, @nontas)
  • #540 LJSON v2 (@jabooth)
  • #537 fix BU3DFE connectivity, pretty JSON files (@jabooth)
  • #529 BU3D-FE labeller added (@jabooth)
  • #527 fixes paths for pickle importing (@jabooth)
  • #525 Fix .rst doc files, auto-generation script (@jabooth)

v0.4.0a2 (2014/12/03)

Alpha 2 moves towards extending the graphing API so that visualization is more dependable.


  • Add graph classes, PointUndirectedGraph, PointDirectedGraph, PointTree. This makes visualization of landmarks much nicer looking.
  • Better support of pickling menpo objects
  • Add a bounding box method to PointCloud for calculating the correctly oriented bounding box of point clouds.
  • Allow PCA to operate in place for large data matrices.

Github Pull Requests

  • #522 Add bounding box method to pointclouds (@patricksnape)
  • #523 HOTFIX: fix export_pickle bug, add path support (@jabooth)
  • #521 add pickle support, move to pathlib (@jabooth)
  • #520 Documentation fixes (@patricksnape, @jabooth)
  • #518 PCA memory improvements, inplace dot product (@jabooth)
  • #519 replace wrapt with functools.wraps - we can pickle (@jabooth)
  • #517 (@jabooth)
  • #514 Remove the use of triplot (@patricksnape)
  • #516 Fix how images are converted to PIL (@patricksnape)
  • #515 Show the path in the image widgets (@patricksnape)
  • #511 2D Rotation convenience constructor, Image.rotate_ccw_about_centre (@jabooth)
  • #510 all menpo io glob operations are now always sorted (@jabooth)
  • #508 visualize image on MaskedImage reports Mask proportion (@jabooth)
  • #509 path is now preserved on image warping (@jabooth)
  • #507 fix rounding issue in n_components (@jabooth)
  • #506 is_tree update in Graph (@nontas)
  • #505 (@nontas)
  • #504 explicitly have kwarg in IO for landmark extensions (@jabooth)
  • #503 Update the README (@patricksnape)

v0.4.0a1 (2014/10/31)

This first alpha release makes a number of large, breaking changes to Menpo from v0.3.0. The biggest change is that Menpo3D and MenpoFit were created and thus all AAM and 3D visualization/rasterization code has been moved out of the main Menpo repository. This is working towards Menpo being pip installable.


  • Fixes memory leak whereby weak references were being kept between landmarks and their host objects. The Landmark manager now no longer keeps references to its host object. This also helps with serialization.
  • Use pathlib instead of strings for paths in the io module.
  • Importing of builtin assets from a simple function
  • Improve support for image importing (including ability to import without normalising)
  • Add fast methods for image warping, warp_to_mask and warp_to_shape instead of warp_to
  • Allow masking of triangle meshes
  • Add IPython visualization widgets for our core types
  • All expensive properties (properties that would be worth caching in a variable and are not merely a lookup) are changed to methods.

Github Pull Requests

  • #502 Fixes pseudoinverse for Alignment Transforms (@jalabort, @patricksnape)
  • #501 Remove menpofit widgets (@nontas)
  • #500 Shapes widget (@nontas)
  • #499 spin out AAM, CLM, SDM, ATM and related code to menpofit (@jabooth)
  • #498 Minimum spanning tree bug fix (@nontas)
  • #492 Some fixes for PIL image importing (@patricksnape)
  • #494 Widgets bug fix and Active Template Model widget (@nontas)
  • #491 Widgets fixes (@nontas)
  • #489 remove _view, fix up color_list -> colour_list (@jabooth)
  • #486 Image visualisation improvements (@patricksnape)
  • #488 Move expensive image properties to methods (@jabooth)
  • #487 Change expensive PCA properties to methods (@jabooth)
  • #485 MeanInstanceLinearModel.mean is now a method (@jabooth)
  • #452 Advanced widgets (@patricksnape, @nontas)
  • #481 Remove 3D (@patricksnape)
  • #480 Graphs functionality (@nontas)
  • #479 Extract patches on image (@patricksnape)
  • #469 Active Template Models (@nontas)
  • #478 Fix residuals for AAMs (@patricksnape, @jabooth)
  • #474 remove HDF5able making room for h5it (@jabooth)
  • #475 Normalize norm and std of Image object (@nontas)
  • #472 Daisy features (@nontas)
  • #473 Fix from_mask for Trimesh subclasses (@patricksnape)
  • #470 expensive properties should really be methods (@jabooth)
  • #467 get a progress bar on top level feature computation (@jabooth)
  • #466 Spin out rasterization and related methods to menpo3d (@jabooth)
  • #465 ‘me_norm’ error type in tests (@nontas)
  • #463 goodbye ioinfo, hello path (@jabooth)
  • #464 make mayavi an optional dependency (@jabooth)
  • #447 Displacements in fitting result (@nontas)
  • #451 AppVeyor Windows continuous builds from condaci (@jabooth)
  • #445 Serialize fit results (@patricksnape)
  • #444 remove pyramid_on_features from Menpo (@jabooth)
  • #443 create_pyramid now applies features even if pyramid_on_features=False, SDM uses it too (@jabooth)
  • #369 warp_to_mask, warp_to_shape, fast resizing of images (@nontas, @patricksnape, @jabooth)
  • #442 add rescale_to_diagonal, diagonal property to Image (@jabooth)
  • #441 adds constrain_to_landmarks on BooleanImage (@jabooth)
  • #440 pathlib.Path can no be used in (@jabooth)
  • #439 Labelling fixes (@jabooth, @patricksnape)
  • #438 extract_channels (@jabooth)
  • #437 GLRasterizer becomes HDF5able (@jabooth)
  • #435 import_builtin_asset.ASSET_NAME (@jabooth)
  • #434 check_regression_features unified with check_features, classmethods removed from SDM (@jabooth)
  • #433 tidy classifiers (@jabooth)
  • #432 aam.fitter, clm.fitter, sdm.trainer packages (@jabooth)
  • #431 More fitmultilevel tidying (@jabooth)
  • #430 Remove classmethods from DeformableModelBuilder (@jabooth)
  • #412 First visualization widgets (@jalabort, @nontas)
  • #429 Masked image fixes (@patricksnape)
  • #426 rename ‘feature_type’ to ‘features throughout Menpo (@jabooth)
  • #427 Adds HDF5able serialization support to Menpo (@jabooth)
  • #425 Faster cached piecewise affine, Cython varient demoted (@jabooth)
  • #424 (@nontas)
  • #378 Fitting result fixes (@jabooth, @nontas, @jalabort)
  • #423 name now displays on constrained features (@jabooth)
  • #421 Travis CI now makes builds, Linux/OS X Python 2.7/3.4 (@jabooth, @patricksnape)
  • #400 Features as functions (@nontas, @patricksnape, @jabooth)
  • #420 move IOInfo to use pathlib (@jabooth)
  • #405 import menpo is now twice as fast (@jabooth)
  • #416 Badge (@waffle-iron)
  • #415 export_mesh with .OBJ exporter (@jabooth, @patricksnape)
  • #410 Fix the render_labels logic (@patricksnape)
  • #407 Exporters (@patricksnape)
  • #406 Fix greyscale PIL images (@patricksnape)
  • #404 LandmarkGroup tojson method and PointGraph (@patricksnape)
  • #403 Fixes a couple of viewing problems in fitting results (@patricksnape)
  • #402 Landmarks fixes (@jabooth, @patricksnape)
  • #401 Dogfood landmark_resolver in (@jabooth)
  • #399 bunch of Python 3 compatibility fixes (@jabooth)
  • #398 throughout Menpo. (@jabooth)
  • #397 Performance improvements for Similarity family (@jabooth)
  • #396 More efficient initialisations of Menpo types (@jabooth)
  • #395 remove cyclic target reference from landmarks (@jabooth)
  • #393 Groundwork for dense correspondence pipeline (@jabooth)
  • #394 weakref to break cyclic references (@jabooth)
  • #389 assorted fixes (@jabooth)
  • #390 (@jabooth)
  • #387 Adds landmark label for tongues (@nontas)
  • #386 Adds labels for the ibug eye annotation scheme (@jalabort)
  • #382 BUG fixed: block element not reset if norm=0 (@dubzzz)
  • #381 Recursive globbing (@jabooth)
  • #384 Adds support for odd patch shapes in function extract_local_patches_fast (@jalabort)
  • #379 imported textures have ioinfo, docs improvements (@jabooth)

v0.3.0 (2014/05/27)

First public release of Menpo, this release coincided with submission to the ACM Multimedia Open Source Software Competition 2014. This provides the basic scaffolding for Menpo, but it is not advised to use this version over the improvements in 0.4.0.

Github Pull Requests

  • #377 Simple fixes (@patricksnape)
  • #375 improvements to importing multiple assets (@jabooth)
  • #374 Menpo’s User guide (@jabooth)