Skip to content

DigitalHolography/DopplerView

Repository files navigation

DopplerView

DopplerView is a deep-learning tool for image enhancement, vascular segmentation, and topology inference that processes HoloDoppler results into vascular maps and analysis-ready inputs for EyeFlow, using a DAG-based pipeline and a configurable model registry.

The project provides:

  • A deterministic DAG-based processing pipeline
  • Automatic dependency resolution and selective recomputation
  • A model registry with HuggingFace integration
  • CLI execution
  • A Streamlit-based GUI, for dynamic debugging
  • A tkinter-based App used for deployement, with minimal and advanced UI

Overview

DopplerView operates on Holodoppler acquisition folders.

The pipeline processes spectral moments derived from Doppler holograms and performs:

  1. Preprocessing

    • Image normalization, flat-field correction and optional registration.
  2. Optic disc detection

  3. Binary vessel segmentation

    • Deep learning–based vessel mask extraction, of retinal and choroidal vessels.
    • Using model publicly available on huggingface, trained with M0 images available on huggingface.
  4. Pulse analysis

  5. Artery/vein semantic segmentation

    • Following the strategy described in the same paper.
    • Using models publicly available on huggingface. The different models used in the pipelines are indicated in models.yaml.
    • The dataset used for training is publicly available on huggingface, with the M0 images and temporal cues already computed.
  6. Estimation of the velicity in the retinal vessels

  7. ArterialWaveformAnalysisStep

    • Per-beat signal analysis

The entire workflow is implemented as a Directed Acyclic Graph (DAG) with automatic dependency resolution and fingerprint-based cache validation.


Installation

Clone the repository:

git clone https://github.com/your-org/DopplerView.git

Create and activate a virtual environment:

python -m venv .venv
source .venv/Scripts/activate

Install in editable mode:

pip install -e .
pip install -r requirements.txt

Usage

DopplerView runs using a HoloDoppler acquisition folder, with the following structure :

measure_id.holo
measure_id/
└── measure_id_HD/
    ├── json/
    │   └── parameters.json            # The rendering parameters
    ├── mp4/                           # Video of the rendered moments
    ├── raw/
    │   └── measure_id_HD_output.h5    # The .h5 file used as input
    └── png/                           # Accumulated image of the moments

Executable (InnoSetup + TKinter)

  • Download the .exe of the latest release, and let the installer do its things.
  • Run DopplerView.exe
    • Drag and drop a folder, and click on Run the full pipeline
    • To select the steps and the models used in the pipeline, activate the Advanced view

To create your

CLI

The CLI runs the full pipeline on a Holodoppler acquisition folder.

dopplerview /path/to/holodoppler_folder --config config.json -v

Arguments

  • -h, --help show this help message and exit
  • -v, --verbose Enable verbose output
  • -c CONFIG, --config CONFIG Path to JSON configuration file
  • -b, --batch Process multiple folders. Folders are either listed in a text file (one
    folder path per line) or provided as subfolders of the specified path.
  • -t TARGETS [TARGETS ...], --targets TARGETS [TARGETS ...] List of target steps to run
  • -d, --debug Enable debug mode. In this mode, steps outputs are read from the .h5, and
    only targeted steps are re-run. This is useful for debugging specific
    steps without having to re-run the entire pipeline.

Example

dopplerview ./data/patient_01 \
    --config ./configs/default.json \
    -v

GUI

Launch the graphical interface:

streamlit run dopplerview/app.py

The GUI allows you to:

  • Load a Holodoppler folder
  • Automatically run initial preprocessing
  • Visualize M0 full-field image
  • Overlay vessel and AV segmentation masks
  • Run the full pipeline interactively

Project Structure

DopplerView/
│
├── dopplerview/
│   ├── pipeline/          # DAG engine, steps, context
│   ├── models/            # Registry, manager, wrappers
│   ├── input_output/      # Folder reading & output handling
│   ├── utils/
│   │   └── ...
│   ├── app.py             # Streamlit GUI
│   ├── cli.py/            # Command-line script
│   └── ...
│
├── README.md
├── WORKFLOW.md            # Architecture documentation
├── CONTRIBUTING.md        # Developer guide
├── pyproject.toml
└── requirements.txt

Configuration

The pipeline configuration is provided via a JSON file.

It controls:

  • Preprocessing parameters
  • Model-related parameters
  • Task-specific thresholds
  • Runtime options

Fingerprinting ensures that changing configuration only recomputes affected steps.

See WORKFLOW.md for details on how configuration impacts execution.


Output

The first execution of DopplerView creates a folder named measure_id_DV in the parent directory of the input measure_id_HDfolder, with following structure :

measure.holo
measure/
├── measure_HD/
└── measure_DV/
   ├── output/                            # Output folders used for debuging
   │   ├── output_0
   │   └── ...
   ├── config/
   │   └── doppler_view_params.json      # The pipeline configuration
   ├── h5/
   │   └── measure_id_DV.h5              # The .h5 output
   └── cache
       └── cache.h5                      # The cache used for debugging

Each pipeline run overwites the results in the .h5 file. The content of the .h5 file is decided by the h5_schema.json. It also creates an output folder, with the content produced by each step, depending on the output_config.json.


Documentation

  • Architecture and execution model → WORKFLOW.md
  • How to add steps or models → CONTRIBUTING.md

License

MIT

About

DopplerView is a deep-learning tool for image enhancement, vascular segmentation, and topology inference that processes HoloDoppler results into vascular maps and analysis-ready inputs for EyeFlow, using a DAG-based pipeline and a configurable model registry.

Resources

License

Contributing

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages