Releases: pupil-labs/pupil
Pupil Capture, Player, and Service release
We are pleased to announce the release of Pupil Core software v2.2!
Download the latest bundle (scroll down to the end of the release notes and see Assets).
Please feel free to get in touch with feedback and questions via the #pupil channel on Discord 😄
Motivation
With v2.2, we have focused on improving the user experience when using Pupil on high-pixel-density displays. Now, Pupil scales and layouts its content correctly based on the content-scaling factor set in your operating system's settings.
Improvements
Support For High-Pixel-Density Displays - #1976
On displays with a high pixel density, content looks much smaller than expected. Operating systems have the option to scale its content appropriately. Until now, Pupil only supported content-scaling on macOS. With this release, we have added support for content-scaling on Windows and Linux as well.
Smaller Improvements
- Better user feedback when
Accuracy Visualizer
reportsnan
values - #1974 - Disabled
Duplicate
andDelete
buttons for read-only post-hoc calibrations - #1972 - Use a square default eye window aspect ratio, matching the latest default cameras - #1987
Changes
Remove Option To Manually Change The Interface Size - #1988
With native support for content scaling on the operating system level, there is no need to scale the UI manually anymore. Therefore, we have removed this feature to further simplify the user interface.
Bug Fixes
- Fixed non-monotonic progress visualization for post-hoc gaze mapping - #1965
- Fixed flickering on macOS when resetting the window size - #1973
- Fixed an empty side-menu when restarting Capture after using HMD-Eyes - #1979
- Fixed a crash when attempting to log any non-string object - #1980
- Fixed 2D monocular gaze calibration not working - #1983
Developer Notes
Changed Requirements
pyglui v1.28
- #1972
We updated the pyglui dependency to v1.28. On Linux and macOS, you can update with:
pip install -U git+https://github.com/pupil-labs/pyglui
On Windows, please download and install the latest wheel from GitHub.
glfw 3.3
- #1976
In order to support content-scaling across all three platforms, we make use of the glfwGetWindowContentScale
function which has been introduced in glfw 3.3
.
We recommend installing the latest glfw 3.3
release via https://www.glfw.org/download.html.
Removed g_pool.gui_user_scale
- #1976, #1988
With the removal of the Interface Size
setting, the g_pool.gui_user_scale
variable has been removed as well. If you draw custom UI content in your plugins without using pyglui, you should now instead use g_pool.gui.scale
to scale the content appropriately for different native display scaling settings.
Removed Legacy Plugin Base Classes - #1971
The following legacy plugin base classes have been removed. All plugins inheriting from them now just inherit from Plugin
:
Visualizer_Plugin_Base
Analysis_Plugin_Base
Producer_Plugin_Base
Experimental_Plugin_Base
Downloads
To open the RAR-archive on Windows, you will need to use decompression software, e.g. WinRAR.
Pupil Capture, Player, and Service release
We are pleased to announce the release of Pupil Core software v2.1!
Download the latest bundle (scroll down to the end of the release notes and see Assets).
Please feel free to get in touch with feedback and questions via the #pupil channel on Discord 😄
Motivation
With v2.1, we have continued to focus on making Pupil Core more core. We were able to resolve a lot of stability and user experience issues, especially regarding post-hoc calibrations.
Bug Fixes
- Fixed that recorded calibration were displayed as being editable - #1932, #1938
- Fixed that recorded calibration were duplicatable - #1933
- Fixed that immutable calibration could be deleted - #1934
- Fixed inconsistencies in the naming of recorded calibrations - #1935, #1944
- Fixed minimum confidence slider for post-hoc calibration - #1942
- Ensured correct validation is run even when a different calibration is selected - #1921
- Removed UI for heatmaps across surfaces in Capture (only available in Player) - #1917
- Fixed incorrect warning about deprecated surface definitions - #1923
- Prevented crashes when rendering invalid eyeball outline - #1947, #1954
- Fixed that restarting background tasks would not clear already running ones - #1939
- Fixed frozen eye videos in HMD-Eyes - #1949
- Disabled automatic reference location detection again in post-hoc gaze - #1951
- Fixed crash when opening recording with unavailable gazer - #1922
- Fixed crashes of the timeline for very short recordings - #1958
- Fixed crash when deleting a running post-hoc calibration multiple times - #1955
- Fixed crashing post-hoc gaze mapping for an HMD-Eyes recording - #1961
- Fixed Service crashing when requesting a non-existing plugin - #1962
- Fixed Capture crashing when finishing a calibration without reference data - #1960
- Prevented starting gaze mappers on calibration fail - #1963
- Fixed an issue when running Pupil Capture bundle on macOS 10.14 Mojave - #1919
Developer Notes
Customizing Screen Marker Positions - #1953
Using custom marker positions for the screen marker calibration choreography might be a common use case. Previously this was not easy to achieve with a custom plugin, as the relevant function was a private method. We have now made it public so that you can more easily implement custom calibration choreographies.
Black Formatting Checks on Travis - #1956
We are internally using Black as automatic Python formatter for our codebase. This helps us ensure that PRs only contain relevant changes and no formatting/whitespace changes. To enforce this more strictly, we added a black formatting check to our Travis integration, which will run on all commits and PRs. Please make sure to format your code with black before submitting a PR to ensure that all Travis checks pass.
Downloads
To open the RAR-archive on Windows, you will need to use decompression software, e.g. WinRAR.
Pupil Capture, Player, and Service release (updated)
We are pleased to announce the release of Pupil Core software v2.0!
Download the latest bundle (scroll down to the end of the release notes and see Assets).
Please feel free to get in touch with feedback and questions via the #pupil channel on Discord 😄
Motivation
With v2.0 and beyond, we will be focusing on making Pupil Core more core.
Our vision for Pupil Core emerged early on: we wanted to make eye tracking hardware and software that was accessible. Accessibility is a useful keyword for us because it encourages us to think about the diverse group of researchers that use Pupil. Pupil Core strives for the following:
- Transparency: Open source is key here. Enable researchers to introspect into the algorithms. Be explicit about the methods and biases built into the software. Inspire others to make improvements and catch bugs.
- Modularity: Make it easy for users to develop and run their own custom code - plugin architecture.
- Connectivity: Make it easy to connect to other software - network API.
- Diversity: Pupil core is flexible. Pupil Core strives to accommodate a diverse range of research and applications. Pupil Core enables researchers who want to use it as a desktop app with GUI, researchers who want to integrate with other software and sensors via Network API and plugins, and developers who want to tinker with the source code directly.
Over the years, Pupil Core software grew organically to support the community, new hardware, and novel applications. With v2.0 took a few steps back to look at the big picture and to think about the future of Pupil Core. If we want Pupil Core to continue to be a useful platform for researchers and developers, then we need to boil it down to its essentials.
How are we making Pupil Core more core? By focusing on making essential (or core) parts of Pupil Core work really well. Here are the steps we have taken with v2.0:
- Restructuring the core pipeline: We have made changes to the application architecture that allows it to run multiple pupil detectors in parallel as well as easily add custom gaze mapping algorithms via user plugins.
- Removing hard to maintain features: We had to make some tough decisions. We decided to remove audio capture and native Intel RealSense support. These components were too much work to maintain.
- Simplifying the user interface: Over the years we have added many features and the UI has grown organically in the process. We have decided to streamline and improve the UI. Be it merging of menus or more sane default settings, we felt that new users need a bit more help getting started with Pupil Capture and Player.
Improvements
Parallel 2D and 3D Pupil Detection
To allow for using different pupil detection algorithms, we have decoupled our existing pipeline of 2D and 3D detection. Instead of running either of those, both will now run as separate plugins with only minimal overhead. This will enable researchers (including our own R&D team) to test, optimize and replace parts of the pipeline much more conveniently in the future.
Additionally this change has allowed for the following improvements to other parts of the system:
Pupil Diameter Timelines - #1854
With 3D pupil data always available we can always display the meaningful 3D pupil diameter in the timelines. Additionally, we added outlier removal and included the range for a more expressive visualization.
Blink Detection - #1900
With 2D pupil data always available we can run a more reliable blink detection in all circumstances.
Calibration Choreography and Gazer Plugins
By far the biggest change in this release was the refactoring of calibration and gaze mapping part of the core pipeline into separate, extendable components that are easy to swap with custom implementations.
Calibration Plugin in Pupil Capture
When running Pupil Capture, in the plugin list you can find the unified Calibration plugin, which is responsible for configuring both the calibration method (with the Choreography
selector), and the gaze mapping method (with the Method
selector).
Extending Calibration and Gaze Mapping with User Plugins
Now users can implement their own calibration routines and gaze mapping methods. These will automatically show up in the Choreography
and Method
selectors.
To do this, users must subclass CalibrationChoreographyPlugin
and GazerBase
respectively. See the Developer Notes section below for a code example.
Improved Installation Workflow on Windows - #1853
We have wrapped Pupil in a Windows Installer package (MSI) in order to simplify the Windows workflow.
By default, all 3 apps (Capture, Player, and Service) will be installed in C:\Program Files (x86)\Pupil-labs\Pupil v<version>\
. All apps will also get a start-menu entry, making it much easier to open Pupil. Installed versions of Pupil can be removed in the Windows Uninstall Settings.
New versions of Pupil will be installed alongside older versions and you can choose which to start. Switching versions will still overwrite your user settings as previously.
Changes
Fixation and Blink Detection by Default - #1870
In order to make Pupil Core even more useful with out-of-the-box settings, we have enabled the Fixation Detector and Blink Detector by default.
Simplified System Graphs - #1869
We have removed the configuration menu for the System Graphs plugin in order to simplify the user interface. The optional display of live graphs for the pupil diameter has been removed as well.
The confidence graphs will now always display the confidence of the 2D pupil detection, as this is a better indicator for correct positioning of the Pupil Core eye tracking headset.
Single Marker Calibration: Physical Markers - #1897
The single marker calibration is mostly intended for calibration with physical (printed) calibration markers, as opposed to the screen marker calibration. For sake of clarity, we changed the default mode for the single marker calibration to Physical Marker (previously this was called Manual).
Removed Manual Marker Calibration
With the restructuring of the calibration workflow, we have removed the deprecated Manual Marker Calibration. The Single Marker Calibration is a more general version and additionally allows for VOR-based choreographies. If you previously used the Manual Marker Calibration, try the Single Marker Calibration in Physical Marker mode (the new default)!
Parallel Pupil Detector Visualization - #1873
We have changed the color of the 2D ellipse visualization in all eye videos to blue in order to differentiate between 2D and 3D detection. You will now always see 3 ellipses on the eyes when the visualization is enabled:
Color Description
- blue: 2D pupil detection result
- red: 3D pupil detection result
- green: 3D eye model
Flip Eye 0 Display - #1844
The eye 0 (right eye) camera sensor is physically flipped, which results in an upside-down eye image for the right eye. This is by design and does not negatively affect pupil detection or gaze estimation. However, the upside-down eye 0 image repeatedly led users to believe that something was broken or incorrect with Pupil Core headsets. We flipped the eye 0 image now by default to better match user expectations with a right-side-up eye image.
Deprecated Audio Capture - #1868
Recording synchronized audio on 3 different operating systems (macOS, Linux, Windows) has always been a challenge for Pupil Capture. (See our motivation section above.)
Unified Network API Plugin - #1881
The previous plugins Pupil Remote and Frame Publisher were commonly used to interact with Pupil Core's Network API. For the sake of simplicity and clarity, we merged both plugins into the new Network API plugin.
Removed Blink Detector Visualization - #1901
The visualization of the blink detector (brief dark flashing on the screen) could interfere with other plugins and cause visual bugs. We have removed this feature.
Bug Fixes
- Fixed Player crashing when exporting while computing gaze history - #1843
- Fixed Player crashing when disabling the Surface Tracker while exporting - #1848
- Fixed wrong default camera selection in some cases - #1857
- Fixed a rare crash in the Surface Tracker - #1879
- Fixed deprecated RealSense cameras showing up in the camera selection - #1877
- Fixed that offline gaze mappers without data would show as completed - #1889
- Fixed corrupted gaze data when deactivating one of multiple gaze mappers - #1888
- Fixed new offline pupil data not being correctly announced sometimes - #1890
- Fixed a few small issues in offline pupil detection - [#1899](https://github.com/...
Pupil Capture, Player, and Service release
We are pleased to announce the release of Pupil v1.23!
Download the latest bundle (scroll down to the end of the release notes and see Assets).
Please feel free to get in touch with feedback and questions via the #pupil channel on Discord 😄
Improvements
Windows Driver Installation Stability - #1833
We have greatly improved the driver installation workflow on Windows. You should not experience problems with spaces or non-english characters in the path to your Pupil installation anymore. Additionally, you do no longer have to run the application as administrator. You still need an administrator to authorize the driver installation.
Changes
On-demand Loading of Multi-part Recordings - #1835
Multiple users have reported problems when opening Pupil Mobile recordings with a large number of video parts. We were able to fix this issue by loading the video parts on demand instead of opening them all at once. As a result, Pupil Player will open Pupil Mobile or Pupil Invisible recordings with multiple parts much quicker than before.
As a side-effect, during playback in Pupil Player, you might experience short frame jumps when a new video part needs to be loaded. This does not affect the underlying data or any exports.
Bug Fixes
- Fixed a crash when changing the ROI without a connected headset - #1827
- Fixed a crash when opening recordings with empty video parts - #1832
- Gracefully stop recordings when receiving non-monotonic timestamps - #1829
- Fixed an issue with calibration file storage on macOS - #1836
- Fixed an issue with gaze history settings restoration from session settings - #1836
Developer Notes
Changed Requirements - #1834
We updated the pyndsi
dependency on v1.3. On Linux and macOS, you can update with:
pip install -U git+https://github.com/pupil-labs/pyndsi
On Windows, please download and install the latest wheel from GitHub.
Removed All Direct C++ Dependencies - #1828
After the latest rework of the calibration codebase to remove C++ dependencies in v1.22, we have re-evaluated all dependencies for Pupil Core software -- especially on Windows. We are very pleased to announce that we have finally externalized or gotten rid of all C++ dependencies! 🎉
This greatly simplifies the developer setup on Windows. The biggest changes include:
- You no longer have to install Visual Studio to run from source
- You no longer need to download OpenCV
- You are no longer bound to a fixed path
C:\work
We have updated the developer docs with the updated setup instructions. We hope that this simplifies your setup and enables you to develop awesome plugins for Pupil Capture and Pupil Player that can be shared with the community!
Release Note Updates
30.03.2020 14:00: Fix driver installation issue in Windows bundle - #1842
In Pupil v1.23-4
, we fixed an issue that prevented users from installing the camera drivers on Windows.
06.04.2020 11:50: Include missing libuvc.dylib
in macOS bundle
In Pupil v1.23-5
, we have included missing library files for Pupil Player and Pupil Service on macOS.
08.04.2020 17:00: Include missing libusb.dylib
in macOS bundle
In Pupil v1.23-5-fix0
, we have included missing library files for Pupil Player and Pupil Service on macOS.
24.04.2020 14:00: Improve driver installation stability on Windows - #1856
In Pupil v1.23-10
, we have made changes to the driver installation procedure that ensure a successful installation on a larger variety of Windows setups.
Downloads
Pupil Capture, Player, and Service release (Updated)
We are pleased to announce the release of Pupil v1.22!
Download the latest bundle (scroll down to the end of the release notes and see Assets).
Please feel free to get in touch with feedback and questions via the #pupil channel on Discord 😄
Features and Changes
Video Source Rework - #1792
We have reworked the video source input system to greatly improve stability, user experience, and maintainability of the related features:
Single Plugin UI
All previous plugins for managing the video source (managers and sources) have been unified under a single plugin menu: Video Source, which handles device/camera selection as well as adjusting camera settings.
Automatic vs Manual Camera Selection
The new source system offers two ways for selecting cameras: automatic and manual:
- In automatic mode (default) you can activate source devices, e.g. Local USB or Pupil Mobile. Activating a device selects the best matching available cameras as input for all windows in Pupil Capture.
- Enabling manual mode allows you to select cameras individually for every window.
UI Cleanup
The following non-essential user interface elements have been removed to provide a better overall user experience:
- The UI for selecting a file source has been removed. Starting a file source via network notification or via drag-and-drop is still possible.
- Manually selecting HMD-Eyes as input source has been removed, as the plugin is started from Unity via network notification.
- The Capture plugin UI in the eye windows has been removed entirely from Pupil Player as the displayed information was incomplete and the interactivity was limited.
- The Test Image source has been removed as it was only intended for development use.
Removed Built-in RealSense Video Backend
Intel RealSense sensors are designed as a prototyping/development platform. Intel deprecates RealSense hardware frequently. Driver support is appropriate for a prototyping tool, but it is not sufficient for a production ready tool.
We have tried to build our tools around Intel's changing APIs and patchwork driver support, but this became difficult and confusing for users.
You can still use RealSense Video Backend as a custom plugin. You can load it directly in the plugin folder of Pupil Capture. Check it out here.
Player: Add Gaze History to Polyline Visualization - #1785
We decided to use the Polyline Visualization as a replacement for the previously removed Scan Path Plugin. You can now visualize past gaze points up to a certain duration by adjusting the duration slider in the Vis Polyline
Plugin. When first dragging the slider, the history for all frames will be computed, which will take some time. Afterwards you can see the gaze history and adjust the duration instantly.
Capture: Improved Region of Interest (ROI) selection - #1788
The ROI selector for the eye windows has been improved for better stability and better user experience. In doing so, we standardized the format of ROI boundaries across Pupil to the following order: (minx, miny, maxx, maxy)
. Please note that this changes the format for adjusting the ROI via network messages.
Player: Add 3D Eyeball Visualization - #1810
We have added the green circle overlay for the 3D eyeball to Player. The overlay will be added to the Eye Overlay
and Eye Video Exporter
plugins, when 3D pupil data is available. You can disable the visualization (including the pupil outline) via the corresponding plugin menus.
Bug Fixes
- Changed Windows disconnection log-level from warning to debug - #1786
- Fixed some of small bugs in the ROI selector - #1788
- Fixed mixed up export columns for monocular
eye_center
andgaze_normal
- #1805 - Prevent a crash caused by incorrect UVC timestamps - #1812
Developer Notes
Getting Rid of C++ Dependencies - #1789
We have made the next step towards an easier installation process of Pupil. After the externalization of the Pupil Detectors in v1.20, we have been able to replace the last remaining C++ module with a Scipy re-implementation. This means that you do not have to compile any Python Extension Modules when starting Pupil.
As a result, you can now run Pupil from source on Windows without having to go through the trouble of setting up CERES. While the pupil-detectors still depend on CERES, we offer prebuilt wheels for Windows that you can install without having to set up the dependencies.
Changed Requirements
We updated the pyglui
dependency to v1.27. Please update with:
pip install -U git+https://github.com/pupil-labs/pyglui
We Are Hiring Python & DevOps Engineers!
Hey - you're reading the developer notes, so this is for you! We're looking to hire developers to contribute to Pupil source code. If you love Python and enjoy writing code that is a joy to read, get in touch. Experience with the scientific Python stack is a plus, but not required. We have a lot of exciting projects in the pipeline.
We are also looking for Senior Full Stack/DevOps engineers that have experience with kubernetes, docker, and server-side Python.
Send an email to [email protected] with a CV to start a discussion. We look forward to hearing from you.
Release Notes Update
25.02.2019 v1.22.3
- #1817 - Fixed a regression which caused all frames to be dropped after changing Pupil Capture's time base.
27.02.2019 v1.22.7
- Commit bcfbf7d - Fixed a typo that caused the
v1.22.3
fix to not work correctly.
Downloads
Pupil Capture, Player, and Service release
We are pleased to announce the release of Pupil v1.21!
Download the latest bundle (scroll down to the end of the release notes and see Assets). Please feel free to get in touch with feedback and questions via the #pupil channel on Discord 😄
Features and Changes
Support for Pupil Invisible Audio Recordings - #1748
Pupil Player now supports audio playback and audio export for Pupil Invisible recordings with audio recordings.
Stream Head Pose over Network - #1774
You can now subscribe to the the topic head_pose
to receive live data from the Online Head Pose Tracker plugin.
Bug Fixes
- Fixed eye processes always displayed the algorithm view - #1766
- Fixed potential crash when changing the eye video size - #1770
- Made pyrealsense warning a debug-level message in order to be less obtrusive - #1768
- Fixed broken interactivity of the ROI mask in the eye windows - #1778
- Fixed multiple stability issues with the fullscreen calibration window - #1767
Developer Notes
Changed Requirements
We updated the PyAV
dependency to v0.4.4 for the PI audio support. On Linux and macOS, you can update with:
pip install -U git+https://github.com/pupil-labs/PyAV
On Windows, download and install the latest wheel from GitHub.
We Are Hiring Python & DevOps Engineers!
Hey - you're reading the developer notes, so this is for you! We're looking to hire developers to contribute to Pupil source code. If you love Python and enjoy writing code that is a joy to read, get in touch. Experience with the scientific Python stack is a plus, but not required. We have a lot of exciting projects in the pipeline.
We are also looking for Senior Full Stack/DevOps engineers that have experience with kubernetes, docker, and server-side Python.
Send an email to [email protected] with a CV to start a discussion. We look forward to hearing from you.
Downloads
Pupil Capture, Player, and Service release
We are pleased to announce the release of Pupil v1.20!
Download the latest bundle (scroll down to the end of the release notes and see Assets). Please feel free to get in touch with feedback and questions via the #pupil channel on Discord 😄
Features and Changes
Deprecated Fingertip Calibration - #1753, #1757
We removed the fingertip calibration method.
The fingertip calibration method was rarely used and provided lower accuracy compared to other calibration methods. Additionally, dependencies needed for the fingertip detection required some work to set up correctly and accounted for almost 50% of the size of our application bundles.
Bug Fixes
- Fixed a crash when trying to open empty (but existing) recordings - #1751
- Fixed a crash on Windows when missing the latest Visual Studio redistributables - #1756
- Fixed visualization of circle markers in offline calibration for recordings with gaps - #1758
- Fixed broken combination of
--hide-ui
and--profile
CLI flags - #1760
Developer Notes
Externalized Pupil Detectors - #1642
We have extracted the Pupil Detectors into their own repository: https://github.com/pupil-labs/pupil-detectors
This will make it very easy to use our pupil detectors in any standalone application or experimental setup without having to deal with all of Pupil's intricacies.
Additionally this will make it much easier to run Pupil from source (especially on Windows), since we are distributing pupil-detectors as package via PyPI and even provide precompiled binaries for Windows!
OpenGL Debugging - #1752
We occasionally receive crash reports involving error messages from PyOpenGL, which we cannot reproduce on our machines. We wrapped the PyOpenGL errors to prevent crashes and log additional messages in these cases. This can result in visual UI errors (instead of a crash) when there are OpenGL issues. If you notice any weird UI behavior, please save the log file and report back to us.
We Are Hiring Python & DevOps Engineers!
Hey - you're reading the developer notes, so this is for you! We're looking to hire developers to contribute to Pupil source code. If you love Python and enjoy writing code that is a joy to read, get in touch. Experience with the scientific Python stack is a plus, but not required. We have a lot of exciting projects in the pipeline.
We are also looking for Senior Full Stack/DevOps engineers that have experience with kubernetes, docker, and server-side Python.
Send an email to [email protected] with a CV to start a discussion. We look forward to hearing from you.
Downloads
Pupil Capture, Player, and Service release (Updated)
We are pleased to announce the release of Pupil v1.19!
Download the latest bundle (at the end of the release notes under Assets) and let us know what you think via the #pupil channel on Discord 😄
Features and Changes
Improved Fixation Detector - #1743
We made improvements to the Fixation Detector to improve detection accuracy:
- We were able to get rid of large gaps in between detected fixations. Now there will be more sequential fixations detected.
- We decreased the false-positive detection rate by omitting low-confidence data.
- We fixed a bug that would sometimes result in wrong fixations on 3D gaze data.
API Changes
Due to the improvements mentioned above, the Fixation Detector now requires calibrated gaze in both 2D and 3D mode. To reflect these changes, the method
field of a fixation datum now contains either 2d gaze
or 3d gaze
(previously pupil
vs gaze
). This effects both the real-time fixations published through the network API and the fixations.csv
export file.
Removed Fixation-Boosted Calibration - #1744
Since the Fixation Detector now requires calibrated gaze, it will not be used anymore to speed up the calibration process.
Improved Binocular Gaze Mapping - #1731
We improved the mapping of monocular gaze data streams by using a dynamic windows size dependent on the frame rate. This will result in better temporal accuracy when matching binocular gaze data for eyes with frequent low-confidence phases.
We also investigated some other variants of binocular gaze mapping, but chose to stick with this simple improvement. For a full evaluation and discussion, see this jupyter notebook.
Bug Fixes
- Add/remove markers for legacy square markers works again - #1737
- Fixed some bad UX with switching surface detection modes - #1738
- Player is now able to load recordings with square brackets in the name - #1740
- Fixed a crash when setting 2D detector properties via network API - #1742
- Improved inconsistent background process behavior - #1741
Developer Notes
Automated Testing - #1721, #1724, #1730, #1735
We have done some work to consolidate old tests in the codebase and set it all up nicely with pytest. You can run the test suite from the repository root with:
pip install pytest
pytest
We set up a travis-ci integration to run pytest on all commits and pull requests. Now you will get feedback if you break something 😄 The test coverage is currently low. But from this point on, we - and you - are encouraged to write tests when adding new features and when fixing bugs.
We Are Hiring Python & DevOps Engineers!
Hey - you're reading the developer notes, so this is for you! We're looking to hire developers to contribute to Pupil source code. If you love Python and enjoy writing code that is a joy to read, get in touch. Experience with the scientific Python stack is a plus, but not required. We have a lot of exciting projects in the pipeline.
We are also looking for Senior Full Stack/DevOps engineers that have experience with kubernetes, docker, and server-side Python.
Send an email to [email protected] with a CV to start a discussion. We look forward to hearing from you.
Release Notes Update
27.11.2019 17:00: v1.19.2
We have fixed an issue in v1.19.0
where multi-part Pupil Mobile and Pupil Invisible recordings were not displayed correctly in Pupil Player - #1747. If you have opened such a recording in Pupil Player v1.19.0
then delete all *_lookup.npy
files and reopen the recording in Pupil Player v1.19.2
.
Downloads
Pupil Capture, Player, and Service release (Updated)
We are pleased to announce the release of Pupil v1.18!
Download the latest bundle and let us know what you think via the #pupil channel on Discord 😄
Features and Changes
Player: Deprecated Recordings - #1711
We have removed support for opening recordings made with:
- Pupil Core < v1.3 or
- Pupil Mobile < r0.21.0
If you need to open a recording made with one of these versions, you will have to open it once in Pupil Player v1.16 or v1.17. This will upgrade the recording format to the new version. You can find more information about this in the v1.16 release notes.
Surface Tracker Export: Distorted Image <-> Surface Coordinates - #1678
We added the homographies to the surface tracker export, which can be used to convert pixel positions between surface coordinates and coordinates of the original camera image. You can use these to crop the surface from the distorted scene image, and get something similar to our surface debug view.
The homographies are exported as two additional columns in the surf_positions_<name>.csv
export file:
dist_img_to_surf_trans
surf_to_dist_img_trans
Exporting Frame PTS - #1682
We added a column pts
to the timestamps export in <name>_timestamps.csv
. This information can be used to seek to and retrieve single frames from the exported video file without the need for sequentially iterating over the entire video.
Service: Start Binocular - #1714
For consistency with Pupil Capture, Pupil Service will now start in binocular mode.
Pupil Remote Plugin: Port No Longer Saved - #1715
The selected port for the Pupil Remote Plugin will no longer be stored in the Capture/Service settings. The default port is always 50020. If the port is already in use, Capture will choose a random other port, while Service will shut down again. You can choose a different port on startup with the -P
command line flag.
Bug Fixes
- Eye movements overlayed in Player will now be correctly exported - #1675
- Shutting down eye processes while recording will correctly finish the recording - #1677
- Fixed some UX issues with the Head Pose Tracker visualization window - #1669
- Improved performance of apriltag detection for the Head Pose Tracker - #1669
- Fixed Pupil Service UI showing port
None
- #1715 - Pupil Service will now be shut down correctly if the selected port is already in use - #1716
- Windows run*.bat files will now correctly forward CLI arguments - #1717
- Fixed Pupil Invisible recordings displaying erroneous gaze positions at (0,0) - #1719
Developer Notes
Eye-Process Plugin List - #1674, #1681
The Eye processes are now using the Plugin_List
class that we are already using in Capture, Player and Service. It takes care of managing the plugin lifecycle and makes it easier to add, remove or change plugins on the Eye process.
Command Line Interface Overhaul
We improved the handling of the Command Line Interface (CLI) of Pupil apps and added some additional start flags:
App Arguments Only - #1709
We changed the general structure of Pupil command line invocation to:
python main.py [-h] {Capture,Player,Service} [app-specific-arguments]
For the full list of arguments, see the README of the Pupil repository.
main.py
takes no arguments except -h/--help
; resulting in an info message. The <app>
argument has been made required and will not default to Capture
.
Version Flag - #1679
You can start any Pupil App with the --version
flag. This will display the current version and exit the program afterwards.
Hide UI Flag - #1712
You can now start Pupil Capture and Pupil Service with the --hide-ui
flag. This will suppress all UI creation while running the program. Use remote messages to control the behavior of the program. To stop the app gracefully, you can either send a SIGTERM signal or (when running via console) hit CTRL-C
to send a SIGINT signal (see point below for additional info).
CTRL-C Shutdown - #1708, #1713
We added support for gracefully shutting down all apps (Capture, Player, Service) via hitting CTRL-C
in the console from where it is running. All running operations and processes will be correctly finalized and terminated.
Recording Version 2.1
The info.player.json
meta-version has been bumped to 2.1. This was necessary to reverse the effects of a bug that corrupted some recordings (#1719).
We Are Hiring Python & DevOps Engineers!
Hey - you're reading the developer notes, so this is for you! We're looking to hire developers to contribute to Pupil source code. If you love Python and enjoy writing code that is a joy to read, get in touch. Experience with the scientific Python stack is a plus, but not required. We have a lot of exciting projects in the pipeline.
We are also looking for Senior Full Stack/DevOps engineers that have experience with kubernetes, docker, and server-side Python.
Send an email to [email protected] with a CV to start a discussion. We look forward to hearing from you.
Release Note Updates
06.11.2019 11:10: Fix opening Pupil Mobile recordings - #1722
In Pupil v1.18-4
, we fixed an issue that prevented users from opening newly created Pupil Mobile recordings in Pupil Player.
11.11.2019 13:10: Fix Offline Pupil Detection on Windows - #1727
In Pupil v.1.18-35
, we fixed an issue that caused Pupil Player to crash when running the Offline Pupil Detection on Windows.
Pupil Capture, Player, and Service release
We are pleased to announce the release of Pupil v1.17!
Download the latest bundle and let us know what you think via the #pupil channel on Discord 😄
Features & Changes
Surface Tracker Updates
We have fixed stability issues with surfaces defined with AprilTag markers. See issue #1696 for more information.
We now support more AprilTag marker types (#1700)! Checkout the docs for more info about tag types and settings.
Legacy Square Markers
If you have recordings with Legacy Markers, and would like to use the latest release to redefine surfaces, please get in touch with us via chat.
Heatmap Image Export Size - #1702
Heatmap images are now exported with a minimum size of 2000px. This will make it easier to use them out of the box without having to upscale them manually.
Streaming Pupil Invisible into Pupil Capture- #1693
You can now stream live video and gaze data from Pupil Invisible to Pupil Capture!
Streaming Scene Video
Select Pupil Mobile backend in Pupil Capture's Backend Manager. Select your Companion Device as Remote Host. Note that the Pupil Invisible Companion Device and Pupil Capture need to be connected to the same network and recording is not supported.
Streaming Gaze Data
Install the PI Preview Plugin.
Removed NSLR Eye-Movement Classifier - #1698
We found that the library did not perform well enough to be usefull and removed it from Pupil Player and Capture. Let us know if you need it back!
Bug Fixes
- Fixed Eye Movement Visualizations not being exported every time - #1675
- Fixed broken recordings when closing the eye windows while recording - #1677
- Fixed inaccurate UI when editing surface corners - #1692
- Fixed unresponsive UI for the gaze history length of online heatmaps - #1697
- Fixed an error with loading some Pupil Invisible recordings - #1704
- Fixed that surfaces would not get saved to recordings when they had never been modified - #1706
Developer Notes
We Are Hiring Python Developers!
Hey - you're reading the developer notes, so this is for you! We're looking to hire developers to contribute to Pupil source code. If you love Python and enjoy writing code that is a joy to read, get in touch. Experience with the scientific Python stack is a plus, but not required. We have a lot of exciting projects in the pipeline.
We are also looking for Senior Full Stack/DevOps engineers that have experience with kubernetes, docker, and server-side Python.
Send an email to [email protected] with a CV to start a discussion. We look forward to hearing from you.