Software Development

The EyeWriter software is two parts — an eye-tracking software designed for use with our low-cost glasses, and a drawing software designed for drawing with eye movements. The source code for the project is currently being hosted at:

The software for both parts has been developed using openframeworks, a cross platform c++ library for creative development. In order to compile and develop the EyeWriter source code, you will need to download openframeworks (pre release v0.06). Documentation, setup guides and more information can be found at

Eye-Tracking Software

The eye-tracking software detects and tracks the position of a pupil from an incoming camera or video image, and uses a calibration sequence to map the tracked eye/pupil coordinates to positions on a computer screen or projection. Note that we use the GSL (gnu scientific library) for calibration, which is GPL, thus the eye tracking source code is GPL.

The pupil tracking relies upon a clear and dark image of the pupil. The diy glasses we designed use near-infrared leds to illuminate the eye and create a dark pupil effect. This makes the pupil much more distinguishable and, thus, easier to track. The camera setting part of the software is designed so the image can be adjusted with brightness and contrast to get an optimal image of the eye.

The calibration part of the software displays a sequence of points on the screen and records the position of the pupil at each point. It is designed so that a person wearing the glasses should focus on each point as it is displayed. When the sequence is finished, the two sets of data are used to interpolate where subsequent eye positions are located in relation to the screen.

Eye-Drawing Software

The eye-drawing software is designed to work with the EyeWriter tracking software as well as commercial eye-trackers such as the MyTobii. It is currently a separate application from the EyeTracker, but we will also post a combined version that shows the two working together.

The tool allows you to draw, manipulate and style a tag using a time-based interface so that triggering buttons or creating points for drawing is achieved by focusing on the position for a given amount of time. Tags and tag data can also be uploaded via FTP and HTTP Post.