Research Tool / Open Source / Eye Tracking

AREA

AR Eye-Tracking Analyser

An open toolkit for extracting eye-tracking data from AR headsets, generating heatmaps, dwell and fixation measures and other interaction event-based analysis.

Platform Unity · OpenXR · Python
Status Active development
Compatible eye-trackers HoloLens 2 · Tobii ET5
01

Overview

AREA extracts raw eye-tracking data from an AR headset and writes it to a clean, versioned CSV — one file per session, ready for analysis.

Each gaze ray is logged together with the object it lands on and its point on the scene, on a single clock shared with task events. Because the application already knows the identity and position of every object on every frame, areas of interest are exact and require no manual coding from video afterwards.

The toolkit ships with sample Python scripts that turn those CSVs into the outputs a study reports: duration-weighted heatmaps, AOI dwell and transition summaries, dispersion-based fixations, and event-aligned measures — plus a per-session data-quality report. The principle is simple: log richly once, derive everything on read.

“We can place an operator inside a live AR scene and watch them work — but the headset’s eye-tracking stays locked inside the device. To study visual attention in a safety-critical task, we need that gaze out: as heatmaps, as dwell, as a dataset we can analyse.”
The problem statement — Dr. Wen-Chin Li, Cranfield University
02

How it works

Three stages behind one interface. The capture front-end can change — a research headset, a desktop tracker, or just a mouse — without any downstream tool knowing the difference, because every source writes the same schema.

Stage 01 — Capture

Read the gaze

On device, gaze comes from Microsoft’s Extended Eye Tracking SDK on OpenXR — per-eye and combined rays at up to 90 Hz, independent of frame rate.

For screen-based development a Tobii Eye Tracker 5 feeds the same interface over a local bridge; a mouse source needs no hardware at all.

Stage 02 — Log

Write it down, once

One versioned CSV per session: gaze and task events on a single clock, each ray resolved to the object it hit and its point on the ground plane.

Coordinates are stored in the scene’s local frame, so sessions overlay regardless of where the participant stood or moved.

Stage 03 — Analyse

Derive the findings

Sample Python scripts read the schema and produce heatmaps, AOI dwell tables, fixations and event-aligned metrics — plus a per-session data-quality report.

Everything is recomputed from the log, so a new measure never needs a new recording.

03

What it measures

Heatmaps
Duration-weighted density on a chosen reference surface, with the smoothing bandwidth set in degrees of visual angle rather than arbitrary pixels — so the blur matches the tracker’s accuracy.
AOI dwell & transitions
Dwell time and proportion, visit counts, mean dwell per visit, switch rate and the transition matrix between areas of interest.
Fixations
Dispersion-based detection (I-DT), appropriate at 30–90 Hz — no velocity-based saccade claims the sample rate can’t support.
Event-aligned metrics
Whether the runway was checked in the seconds before each clearance; time from a cutoff-zone incursion to first gaze on the zone; the scan preceding an error.
Data quality
Tracking-loss percentage, effective sample rate, calibration flag and halo-ambiguity rate, reported per session.
Gaze heatmap over an airfield ground plane, produced by AREA from a real Tobii eye-tracking session.
Fig. 1 Duration-weighted gaze density from a 102-second recording (Tobii ET5, 3,405 samples, 91.6% valid), projected onto the airfield ground plane in the model’s local coordinate frame.
Area of interestCategory Dwell (s)ShareVisitsMean / visit
Airport groundSurface11.7311.5%620.19 s
RunwaySurface6.596.5%250.26 s
TaxiwaySurface1.331.3%210.06 s
ApronSurface0.880.9%130.07 s
SaabAircraft0.330.3%30.11 s
DroneAircraft0.180.2%30.06 s
BusVehicle0.030.03%10.03 s
Slingsby buttonButton0.030.03%10.03 s
Fig. 2 Per-AOI dwell from the same session, derived automatically from the log. Surfaces dominate a free-exploration development run; a controlled study would weight the task objects.
Eye Tracking HoloLens 2 OpenXR · MRTK Human Factors Visual Attention Unity Python Open Source
04

Quickstart

Drop in the package. Tag your objects. Record.

Add the Unity package by git URL, and the analysis by pip. Tag the objects you care about with GazeAOI, add one LogEvent line at each task action, build, and record.

# Unity — add the package (Packages/manifest.json)
"com.area.eyetracking": "https://github.com/madebycharles/area.git?path=unity/Packages/com.area.eyetracking"

# Python — install the analysis toolkit
$ pip install "git+https://github.com/madebycharles/area.git#subdirectory=analysis"

# Analyse a session
$ area heatmap  session.csv --bg airfield.png
$ area events   session.csv --out results/
$ area synth    demo.csv          # no headset needed
External dependencies

The repository does not bundle third-party SDKs — pull each one and AREA plugs into it:

Microsoft Extended Eye Tracking SDK
The Microsoft.MixedReality.EyeTracking NuGet package — install via NuGetForUnity. The MIT-licensed ExtendedEyeGazeDataProvider.cs is included; the binaries are not.
Mixed Reality OpenXR plugin
Add com.microsoft.mixedreality.openxr via the Mixed Reality Feature Tool or the package manager. Required on device.
Tobii ET5 bridge
A separate local WebSocket server (the enhanced-tobii-eyetracker fork) speaking the flidis-gaze-ws contract. Development only — published data should come from the HoloLens.
Python packages
numpy, pandas, scipy, matplotlib — installed automatically with the analysis package.
Open Source · MIT

AREA is an open, OpenXR-native toolkit for AR eye-tracking, built for aviation human-factors research and released for reuse. If it supports your work, please cite it.

Njoku, C. (2026). AREA — AR Eye-Tracking Analyser [software]. https://github.com/madebycharles/area