Skip to main content

A tool for annotating pupil and iris in eye images

Project description

EyE Annotation Tool

PyPI Downloads License DOI

A Qt-based desktop tool for annotating pupil, limbus (iris), eyelid, and glints in eye images. Supports monocular and binocular projects, auto-detector plugins for each annotation type, and per-eye carry-across-frames workflows.

EyE Annotation Tool Main Page

Features

  • Monocular and binocular projects; per-eye overrides for ROI, carry, and defaults.
  • Manual annotation of pupil ellipse, limbus ellipse, eyelid mask, and glints.
  • Auto-detector plugins per annotation type; live detection re-runs on image load and plugin swap.
  • Built-in auto-detectors backed by lavan (pupil, limbus, glint).
  • Project sessions with persistent defaults, undo, brightness/zoom controls, and review mode for revisiting an existing project.
  • Plugin system with three discovery channels (built-in, env-var directories, Python entry-points).
  • CLI flags for batch use: --images, --review, --auto-detectors.

Built-in auto-detectors

Annotation Detector Backend
Pupil pupil_labs_2d lavan.pupil_detector_2d (Pupil Labs 2D detector)
Pupil threshold_pupil lavan.detect (threshold + ellipse fit)
Limbus daugman_limbus lavan.boundary (Daugman integro-differential / active contour)
Glint threshold_glint lavan.detect (threshold + shape-quality gates)

See auto_detectors/README.md for the full plugin contract.

Installation

Requirements

  • Python ≥3.10

From PyPI

pip install eye_annotation_tool

Using uv

uv pip install eye_annotation_tool

Or, to add it to an existing uv project:

uv add eye_annotation_tool

From source (editable / development)

git clone https://github.com/mh-salari/eye_annotation_tool.git
cd eye_annotation_tool
uv sync

Or with pip:

git clone https://github.com/mh-salari/eye_annotation_tool.git
cd eye_annotation_tool
python3 -m pip install -e .

Usage

eye_annotation_tool

Or as a module:

python -m eye_annotation_tool

Common CLI flags:

# Open a project and load extra images on top
eye_annotation_tool --project my_project.json --images img1.png img2.png

# Re-annotate a subset of images against an existing project (read-only)
eye_annotation_tool --project my_project.json --review img1.png img2.png

# Enable only a subset of auto-detectors this session
eye_annotation_tool --auto-detectors pupil,limbus

See eye_annotation_tool --help for the full flag list.

Adding Custom Plugins

Every auto-detector is a self-contained plugin that owns its algorithm, its Qt panel, its serialization, its overlay drawing and its colour palette — adding one requires no edits to the core application. Three discovery channels are scanned at startup:

  • Built-ineye_annotation_tool/auto_detectors/plugins/ (for plugins contributed upstream).
  • Env-var directoriesEYE_ANNOTATION_PLUGIN_PATH (os.pathsep-separated) for drop-in .py files. Easiest path for a one-off plugin: write a single file, point the env var at its directory, restart the app.
  • Python entry-points[project.entry-points."eye_annotation_tool.plugins"] in any installed distribution. For pip-installable plugin packages.

The full plugin authoring guide — minimal example, the DetectorPlugin contract, optional panel signals, mask + ROI rendering — lives in the Plugin Development Guide.

Citing

If you use this software, please cite it using the following BibTeX entry:

@software{salari2025eye,
  author    = {Salari, Mohammadhossein},
  title     = {{EyE Annotation Tool}},
  year      = {2026},
  url       = {https://github.com/mh-salari/eye_annotation_tool},
  doi       = {10.5281/zenodo.18723470},
  license   = {MIT}
}

You can also click the "Cite this repository" button on the GitHub page for more citation formats.

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

License

This project is licensed under the MIT License - see the LICENSE file for details.

Acknowledgments

This project has received funding from the European Union's Horizon Europe research and innovation funding program under grant agreement No 101072410, Eyes4ICU project.

Funded by EU Eyes4ICU

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

eye_annotation_tool-1.0.2.tar.gz (1.5 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

eye_annotation_tool-1.0.2-py3-none-any.whl (1.4 MB view details)

Uploaded Python 3

File details

Details for the file eye_annotation_tool-1.0.2.tar.gz.

File metadata

  • Download URL: eye_annotation_tool-1.0.2.tar.gz
  • Upload date:
  • Size: 1.5 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.15

File hashes

Hashes for eye_annotation_tool-1.0.2.tar.gz
Algorithm Hash digest
SHA256 eccc8db2f929e75d2cb07dde54bd77b5ce276254de45c10a37519b8d266e53ff
MD5 7afcf8530e3989782479cf57dfab2c46
BLAKE2b-256 144d0e54195a8d5a3163873678f7eb1a2b3dba07f65ccc3be180736ee0d75f22

See more details on using hashes here.

File details

Details for the file eye_annotation_tool-1.0.2-py3-none-any.whl.

File metadata

File hashes

Hashes for eye_annotation_tool-1.0.2-py3-none-any.whl
Algorithm Hash digest
SHA256 39d481ef7363a6f9a674fb2949a220b39cb2314d2fcc2f8ec6959250c882a57f
MD5 3165fc5b925494e3beebe25e0b5c3919
BLAKE2b-256 e599e44401895723824bfdfe567a556070f2898cda7ebc5ff2a92d829ff5713d

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page