email github twitter linkedIn
ePerceptor Eye Tracking: a Window to the Mind

2014 - 2015 • Research Project


With the ePerceptor project DAE (Digital Arts and Entertainment) Research encapsulated different state-of-the-art eye-tracking hardware and algorithms. The plug-and-play framework enables you to capture and record eye movements using serveral hardware devices (Tobii, ASL, etc.). It also supports some of the most fundamental eye prediction models. This gives game developers and other software engineers the ability to extract important data to use in games or software or to anticipate on the behaviour of the user.

The framework is mainly written in C++. There is also a managed C# library version which can be used by different third-party tools (e.g.: Unity3D). All main features are standalone (Calibration, Recording & Prediction) and are enabled on all supported devices.


Due to NDA sensitive content I am not able to share the entire code base. Through the provided link you can find the initial prototype setup, which supports the Tobii EyeX device through their public API.


Tobii EyeX Host: snippets from the Tobii EyeX integration of the prototype. I used the core C++ library of the Tobii EyeX eyetracker to have access to all the built-in functionality (eye date, calibration date, etc.). I then created an abstract layer so all eyetrackers could be supported. This implementation triggers the correct EyeX functions and links its device to my framework.

Calibrator: calibrating is a big part of an eye tracking framework as it guarantees the integrity of the received data. If the calibration is off, the data is not usable at all! A lot of eye tracking devices do not provide a good calibration method, while other only enable calibration through their own API (hence Tobii EyeX). With the calibrator, I've abstracted the procedure to calibrate a device, without changing application level code. I use a 3x3 matrix with dots to capture the initial eye data, which later can be used to correct abnormalities in the received data. This small snippets showcases the setup for such a calibration stage with the framework.

Wrapper: the C++ library can be used in a managed environment (C#) because I also provide a .NET library using a wrapper. In the wrapper I take care of all the marshalling to allocate, copy and/or convert any data from an unmanaged to a managed enviroment or vice versa. Below is a snippet of the wrapper, where data is getting pulled from the unmanaged environment.