AngioEye is the cohort-analysis engine for retinal Doppler holography. It browses EyeFlow .h5 outputs, reads per-segment metrics, applies QC, compares models, and aggregates results at eye/cohort level (including artery–vein summaries) to help design biomarkers. It exports clean CSV reports for stats, figures, and clinical models.
- Python 3.10 or higher.
- It is highly recommended to use a virtual environment.
This project uses a pyproject.toml to describe all requirements needed. To start using it, it is better to use a Python virtual environment (venv).
# Creates the venv
python -m venv .venv
# To enter the venv
# If you are using Windows PowerShell, you might need to activate the "Exceution" policy
./.venv/Scripts/activateYou can easily exit it with the command
deactivatepip install -e .
# Installs pipeline-specific dependencies (optional)
pip install -e ".[pipelines]"# Install all dependencies including dev tools (ruff, pre-commit, pyinstaller)
pip install -e ".[dev,pipelines]"
# Initialize pre-commit hooks (optionnal)
pre-commit installNote
The pre-commit is really usefull to run automatic checks before pushing code, reducing chances of ugly code being pushed.
If a pre-commit hook fails, it will try to fix all needed files, so you will need to add them again before recreating the commit.
Tip
You can run the linter easily, once the dev dependencies are installed, with the command:
# To only run the checks
lint-tool
# To let the linter try to fix as much as possible
lint-tool --fixLaunch the main application to process files interactively:
The GUI handles batch processing for folders, single .h5/.hdf5 files, or .zip archives and lets you run multiple pipelines at once. Batch outputs are written directly into the chosen output directory (one combined .h5 per input file).
# Via the entry point
angioeye
# Or via the script
python src/angio_eye.pyThe CLI is designed for batch processing in headless environments or clusters.
# Via the entry point
angioeye-cli
# Or via the script
python src/cli.pyPipelines are the heart of AngioEye. To add a new analysis, create a file in src/pipelines/ with a class inheriting from ProcessPipeline.
To register it to the app, add the decorator @register_pipeline. You can define any needed imports inside, as well as some more info.
To see more complete examples, check out src/pipelines/basic_stats.py and src/pipelines/dummy_heavy.py.
from pipelines import ProcessPipeline, ProcessResult, registerPipeline
@registerPipeline(
name="My Analysis",
description="Calculates a custom clinical metric.",
required_deps=["torch>=2.2"],
)
class MyAnalysis(ProcessPipeline):
def run(self, h5file):
import torch
# 1. Read data using h5py
# 2. Perform calculations
# 3. Return metrics
metrics={"peak_flow": 12.5}
# Optional attributes applied to the pipeline group.
attrs = {
"pipeline_version": "1.0",
"author": "StaticExample"
}
return ProcessResult(
metrics=metrics,
attrs=attrs
)