A tool for annotating pupil and iris in eye images
Project description
EyE Annotation Tool
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.
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-in —
eye_annotation_tool/auto_detectors/plugins/(for plugins contributed upstream). - Env-var directories —
EYE_ANNOTATION_PLUGIN_PATH(os.pathsep-separated) for drop-in.pyfiles. 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.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
eccc8db2f929e75d2cb07dde54bd77b5ce276254de45c10a37519b8d266e53ff
|
|
| MD5 |
7afcf8530e3989782479cf57dfab2c46
|
|
| BLAKE2b-256 |
144d0e54195a8d5a3163873678f7eb1a2b3dba07f65ccc3be180736ee0d75f22
|
File details
Details for the file eye_annotation_tool-1.0.2-py3-none-any.whl.
File metadata
- Download URL: eye_annotation_tool-1.0.2-py3-none-any.whl
- Upload date:
- Size: 1.4 MB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.15
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
39d481ef7363a6f9a674fb2949a220b39cb2314d2fcc2f8ec6959250c882a57f
|
|
| MD5 |
3165fc5b925494e3beebe25e0b5c3919
|
|
| BLAKE2b-256 |
e599e44401895723824bfdfe567a556070f2898cda7ebc5ff2a92d829ff5713d
|