Pupil Capture, Player, and Service release
We are pleased to announce the release of Pupil v1.8!
Download the latest bundle and let us know what you think via the #pupil channel on Discord 😄
We have been working hard to significantly reduce the memory usage of Pupil Capture and Player. See incremental data serialization and deferred deserialization for details.
Features
Capture
Auto-exposure mode -- #1210
We have added an auto-exposure mode for the 200Hz Pupil cameras. You can enable it in the UVC Source
menu of the eye windows.
Incremental data serialization -- #1141
Prior to this release, data was cached in memory during recordings and written to disk after the recording had finished. This resulted in large memory consumption during recording.
Starting in v1.8
, Pupil Capture will store data directory to the disk as it becomes available during the recording. This reduces the memory footprint and improves reliability of Pupil Capture. See the New Recording Format section on our documentation.
Automatic recording stop on low disk space
The recorder will show a warning if less than 5GB of disk space is available to the user. Recordings will be stopped gracefully as soon as less than 1GB of disk space is available.
Fingertip Calibration -- #1218
We introduced a proof-of-concept fingertip calibration with Pupil Capture v1.6
. It was based on traditional computer vision approaches and the fingertip detection was not very stable.
Now, we are releasing a revised version that uses convolutional neural networks (CNN) for the hand and fingertip detection. For details checkout our documentation.
Note - The current bundle support CPU inference only. If you install from source and have an NVIDIA GPU with CUDA 9.0 drivers installed, you can install pytorch and our fingertip detector will use your GPU!
Player
Deferred Deserialization
Before v1.8
, opening a recording in Pupil Player would read the entire pupil_data
file and deserialize the data into Python objects. This enabled fast processing of the data but also used excessive amounts of memory. This led to software instabilities for users who were trying to process recordings with long durations.
Starting with v1.8
, Pupil Player only deserializes data if required. This reduces memory consumption dramatically and improves software stability.
Please be aware that the initial upgrade of recordings to the new format can take a bit of time. Please be patient while the recording is converted.
Temporally disabled features
We had to disable the following features due to changes on how we handle data within Pupil Player:
Vis Scan Path
- Manual gaze correction for
Gaze From Recording
We are working on a solution and will hopefully by able ro re-enable these with in the next release.
Bugfixes
- Fixed a bug were Player crashed if
info.csv
included non-ASCII chracters -- #1224 - Correctly reset the last known reference location after stopping the manual marker calibration in Capture -- #1206
Developers notes
New dependencies
We have added PyTorch to our dependencies. If you want to make use of GPU acceleration you will have to run Pupil Capture from source and install the GPU version of PyTorch. We will work on bundling GPU supported versions in the future.
New recording format
We had to make changes to our recording format in order to make the incremental serialization and deferred deserialization features possible. Please, see our documentation for more details on the New Recording Format.
API changes
zmq_tools.Msg_Streamer.send()
has been reworked. The previous required two arguments: topic
, payload
. The new version only accepts the payload
argument and expects the payload to have a topic
field instead.
Real-time fixation format changes -- #1231
Online fixations are published in a high frequency. Each fixation has a base_data
field that includes gaze data related to this fixation. In turn, gaze data has a base_data
field on its own including pupil data. As a result, recordings grew unreasonably fast in size if the Online Fixation Detector
was enabled. E.g. for an eleven minute long recording, the pupil_data
file grew to 1.4GB of which 1.1GB were fixations alone.
As a consequence, we are replacing each gaze datum in the base_data
field of online fixations with (topic, timestamp)
tuples. These uniquely identify their corresponding gaze datum within the gaze data stream.
We are hiring developers!
Hey - you're reading the developer notes, so this is for you!
Pupil Core Contributors - We're hiring 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.
Full Stack Developers - We are also looking for full stack developers that have experience with one ore more of the following tools/platforms: kubernetes, docker, vue.js, and flask.
Send an email to [email protected]
with a CV to start a discussion. We look forward to hearing from you.