Python wrapper for Gazepoint’s OpenGaze API


Gazepoint is a relatively small player on the eye-tracking market. They sell two devices: the 60 Hz GP3 at a price of $695, and the 150 Hz GP3 HD at $1995 (both of those prices exclude VAT and shipping). Because of its relatively low price, the basic GP3 is an appealing model for researchers on a budget. As of today, PyGaze supports Gazepoint’s trackers through their OpenGaze API. Download the new code from GitHub, and have fun!

Gazepoint GP3


In a blog about the affordable EyeTribe tracker calling it quits, I mentioned potential alternatives, including Gazepoint’s GP3. To be specific, I wrote that none of the PyGaze developers have access to a GP3, but that I would be open to support it if someone were to send me one. Well, Ivan Moser and his supervisor came through. They sent me a GP3, and now PyGaze supports it.

Gazepoint's GP3 eye tracker.

Gazepoint’s GP3 eye tracker.

Gazepoint’s Quality

The temporal resolution of both the GP3 and the GP3 HD is low. Too low for measuring the properties of saccades, for example. On the other hand, fixation analyses (where people looked at in an image) and measuring pupil size should be possible at sampling rates of 60 or 150 Hz. As for the spatial properties: I don’t know how good the precision (internal validity, or how consist the measurements are), and the accuracy (external validity, or how well the measurements correspond to the real world) are.

OpenGaze API

Gazepoint devices can be accessed through their OpenGaze API. Although it’s called ‘open’, I couldn’t find the actual source code. The documentation is freely available in a PDF. From this, we can learn that Gazepoint devices work with a locally running server. This server communicates directly with the tracker, and is open to clients who can communicate with it using messages in an XML format. (See the documentation PDF for specifics.)

Gazepoint in PyGaze

As with all the other trackers (SR Research’s EyeLink, SensoMotoric Instruments, Tobii, and EyeTribe), you can simply set a single constant (TRACKERTYPE) to choose the GP3. Set it to ‘opengaze’ to use Gazepoint’s OpenGaze API. See below for an example.

Now in an experiment script, you can simply use PyGaze’s common interface to get the GP3 to calibrate, to record data, and to get samples from the tracker while it’s recording data (useful for gaze-contingent displays). For an example, see below.

Independent Python wrapper

There is good news if, for some unfathomable reason, you don’t like PyGaze: I wrote a Python wrapper for the OpenGaze API too. In fact, this is what allows PyGaze to work with Gazepoint’s trackers! The wrapper is called PyOpenGaze, and you can find it on GitHub.


  1. Pingback: The EyeTribe stops and that stinks – PyGaze

  2. Oh wow, this is wonderful news! I was about to start writing a parser for the tracker and then I found this. Great work and thanks for publishing it! Will test it as soon as my tracker arrives.

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">