Release v0.9.0

Release v0.9.0

Feb 17, 2017

Feb 17, 2017

v0.9.0 Overview

We are happy to release Pupil software v0.9.0.

There are a lot of new features and improvements that we have added to Pupil software in this release along with the great migration of the entire codebase from Python2 to Python3!

Python2 --> Python3 - The great migration

We have successfully transitioned the entire Pupil codebase from Python2 to Python3. There are many reasons why we decided to transition to Python3. While we could have comfortably continued with Python2 on macOS and Linux, it was not feasible to support Pupil and dependencies on Windows with Python2. Some of you may have noticed that with v0.8.7-w (Windows release) we already started using Python v3.5.2. This introduced a schism in the codebase, with Pupil development for Windows using Python3 and macOS and Linux using Python2.

In order to unify the codebase for cross-platform development, we decided to make the great migration to Python3. The migration hasn't been as easy as we had anticipated. But we are happy that we decided to make the move. Now the Pupil community can take advantage of all the new Python3 features, performance enhancements, and work with other Python3 supported libraries.

OpenCV2 --> OpenCV3

We have moved to OpenCV3 and will start adding new futures like fisheye lens distorion modelling in the near future.

Non-blocking capture

We have restructured the video input source logic. All video sources are now normal plugins. This means you can create your own custom video source more easily. This change has also simplified the source code.

We now allow the capture source to not return an image. This means that the application UI and app will remain responsive even if capture fails to stream images.

Note To plugin developers: This change also means that we had to relax the constraints on what data is guaranteed to be available during the plugin update loop. This resulted in two Plugin API changes:

  1. We moved the frame object into events.

  2. We introduce recent_events(events) to replace update(frame, events). You can still use update(frame, events) in your plugin for the time being but note that it is officially deprecated.

Pupil Detector 2d - Parameter Optimization

The default parameters of the 2d pupil detection algorithm have been significantly improved. We have optimized the default parameters using a grid-search approach to perform well on the challenging "Labeled pupils in the wild (LPW)" dataset, while maintaining high speed performance (>300 FPS). In particular the performance in difficult lighting scenarios (e.g. outdoors) improved over the old default parameter settings.

Blink detection

We have added a simple blink detection plugin to Pupil Capture. The plugin detects the onset of a blink via the joint and sudden falloff in pupil detection confidence in both eyes occurring when the pupils are occluded by the falling eyelids. Similarly the end of a blink can be detected via the sudden rise in pupil detection confidence when the pupils are uncovered again.

Fixation tuned calibration

We have added a real-time fixation detector to Pupil Capture. The fixation detector uses the pupil normal vector provided by the 3d model (in 3d detection and mapping mode) to measure dispersion. The fixation detector plugin is now loaded by default in Pupil Capture and is used by calibration procedures to speed up calibration.


  • macOS - bundles are coming soon

  • TODOs and Known Issues

  • Tested and fixed for Linux and Windows