# immanuel-raj-e/eaglevision architecture

> Architecture diagram of the GitHub repository immanuel-raj-e/eaglevision, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-28). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/immanuel-raj-e/eaglevision
- Repository: https://github.com/immanuel-raj-e/eaglevision

## Overview

EagleVision processes drone imagery and flight telemetry into geolocated, deduplicated, urgency-ranked SAR leads, then presents evidence and tactical exports to incident commanders. The main mission runner owns the sampled processing calls; the sparse-frame selector is also exposed as a separate CLI capability. The README documents additional dashboard and audit features, but their detailed wiring is not fully visible in the excerpts, so only documented data relationships are shown.

Main entry points: [`run_mission_pipeline.py`](https://github.com/immanuel-raj-e/eaglevision/blob/main/run_mission_pipeline.py) (Mission runner), [`ui/app.py`](https://github.com/immanuel-raj-e/eaglevision/blob/main/ui/app.py) (Commander dashboard), [`src/triage/triage_engine.py`](https://github.com/immanuel-raj-e/eaglevision/blob/main/src/triage/triage_engine.py) (Scoring & evidence), [`output`](https://github.com/immanuel-raj-e/eaglevision/tree/main/output) (Mission artifacts)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_ingest["Ingestion &amp; Selection"]
  node_sparse_cli["Selector CLI<br/>[main.py]"]
  node_selector["Sparse frame selector<br/>[selector.py]"]
  node_selector_io["Frame &amp; metadata I/O<br/>[io_handler.py]"]
  node_video_sync["Video synchronizer<br/>[video_sync.py]"]
  node_telemetry["Telemetry parser"]
end

subgraph group_vision["Detection &amp; Geolocation"]
  node_detector["RGB-thermal detector<br/>[fusion_detector.py]"]
  node_tracker["Target tracker<br/>[tracker.py]"]
  node_kalman["Kalman filter<br/>[kalman_filter.py]"]
  node_raycaster["WGS84 raycaster<br/>[raycaster.py]"]
  node_dedup["Ground deduplicator<br/>[deduplicator.py]"]
end

subgraph group_triage["Triage &amp; Audit"]
  node_triage_engine["Scoring &amp; evidence<br/>[triage_engine.py]"]
  node_exports["Mission exports<br/>[triage_engine.py]"]
  node_audit["Evaluation audit<br/>[evaluate.py]"]
  node_artifacts["Mission artifacts"]
end

subgraph group_mission["Mission Experience"]
  node_mission_runner["Mission runner"]
  node_dashboard["Commander dashboard<br/>[app.py]"]
end

node_uav(("UAV media &amp; logs"))
node_commander(("Incident commander"))

node_uav -->|"provides media"| node_mission_runner
node_mission_runner -->|"queries state"| node_telemetry
node_mission_runner -->|"detects targets"| node_detector
node_mission_runner -->|"updates tracks"| node_tracker
node_tracker -->|"estimates motion"| node_kalman
node_mission_runner -->|"geolocates tracks"| node_raycaster
node_mission_runner -->|"deduplicates leads"| node_dedup
node_mission_runner -->|"scores entities"| node_triage_engine
node_triage_engine -->|"writes exports"| node_exports
node_triage_engine -->|"writes evidence"| node_artifacts
node_mission_runner -->|"evaluates mission"| node_audit
node_audit -->|"writes audit"| node_artifacts
node_uav -->|"supplies video"| node_sparse_cli
node_sparse_cli -->|"runs selection"| node_selector
node_selector -->|"saves frames"| node_selector_io
node_uav -->|"supplies streams"| node_video_sync
node_video_sync -->|"queries samples"| node_telemetry
node_commander -->|"reviews mission"| node_dashboard
node_dashboard -->|"reads results"| node_artifacts
node_dashboard -->|"starts pipeline"| node_mission_runner
node_exports -->|"feeds map"| node_dashboard

click node_mission_runner "https://github.com/immanuel-raj-e/eaglevision/blob/main/run_mission_pipeline.py"
click node_sparse_cli "https://github.com/immanuel-raj-e/eaglevision/blob/main/main.py"
click node_selector "https://github.com/immanuel-raj-e/eaglevision/blob/main/sparse_frame_selector/selector.py"
click node_selector_io "https://github.com/immanuel-raj-e/eaglevision/blob/main/sparse_frame_selector/io_handler.py"
click node_video_sync "https://github.com/immanuel-raj-e/eaglevision/blob/main/src/ingest/video_sync.py"
click node_telemetry "https://github.com/immanuel-raj-e/eaglevision/blob/main/src/ingest/telemetry_parser.py"
click node_detector "https://github.com/immanuel-raj-e/eaglevision/blob/main/src/detection/fusion_detector.py"
click node_tracker "https://github.com/immanuel-raj-e/eaglevision/blob/main/src/tracking/tracker.py"
click node_kalman "https://github.com/immanuel-raj-e/eaglevision/blob/main/src/tracking/kalman_filter.py"
click node_raycaster "https://github.com/immanuel-raj-e/eaglevision/blob/main/src/geoloc/raycaster.py"
click node_dedup "https://github.com/immanuel-raj-e/eaglevision/blob/main/src/tracking/deduplicator.py"
click node_triage_engine "https://github.com/immanuel-raj-e/eaglevision/blob/main/src/triage/triage_engine.py"
click node_exports "https://github.com/immanuel-raj-e/eaglevision/blob/main/src/triage/triage_engine.py"
click node_audit "https://github.com/immanuel-raj-e/eaglevision/blob/main/src/evaluation/evaluate.py"
click node_artifacts "https://github.com/immanuel-raj-e/eaglevision/tree/main/output"
click node_dashboard "https://github.com/immanuel-raj-e/eaglevision/blob/main/ui/app.py"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_sparse_cli,node_selector,node_selector_io,node_video_sync,node_telemetry toneBlue
class node_detector,node_tracker,node_kalman,node_raycaster,node_dedup toneAmber
class node_triage_engine,node_exports,node_audit,node_artifacts toneMint
class node_mission_runner,node_dashboard toneRose
class node_uav,node_commander toneIndigo
```

## Components

### Ingestion & Selection

- [Selector CLI](https://github.com/immanuel-raj-e/eaglevision/blob/main/main.py): `main.py`
- [Sparse frame selector](https://github.com/immanuel-raj-e/eaglevision/blob/main/sparse_frame_selector/selector.py): `sparse_frame_selector/selector.py`
- [Frame & metadata I/O](https://github.com/immanuel-raj-e/eaglevision/blob/main/sparse_frame_selector/io_handler.py): `sparse_frame_selector/io_handler.py`
- [Video synchronizer](https://github.com/immanuel-raj-e/eaglevision/blob/main/src/ingest/video_sync.py): `src/ingest/video_sync.py`
- [Telemetry parser](https://github.com/immanuel-raj-e/eaglevision/blob/main/src/ingest/telemetry_parser.py): `src/ingest/telemetry_parser.py`

### Detection & Geolocation

- [RGB-thermal detector](https://github.com/immanuel-raj-e/eaglevision/blob/main/src/detection/fusion_detector.py): `src/detection/fusion_detector.py`
- [Target tracker](https://github.com/immanuel-raj-e/eaglevision/blob/main/src/tracking/tracker.py): `src/tracking/tracker.py`
- [Kalman filter](https://github.com/immanuel-raj-e/eaglevision/blob/main/src/tracking/kalman_filter.py): `src/tracking/kalman_filter.py`
- [WGS84 raycaster](https://github.com/immanuel-raj-e/eaglevision/blob/main/src/geoloc/raycaster.py): `src/geoloc/raycaster.py`
- [Ground deduplicator](https://github.com/immanuel-raj-e/eaglevision/blob/main/src/tracking/deduplicator.py): `src/tracking/deduplicator.py`

### Triage & Audit

- [Scoring & evidence](https://github.com/immanuel-raj-e/eaglevision/blob/main/src/triage/triage_engine.py): `src/triage/triage_engine.py`
- [Mission exports](https://github.com/immanuel-raj-e/eaglevision/blob/main/src/triage/triage_engine.py): `src/triage/triage_engine.py`
- [Evaluation audit](https://github.com/immanuel-raj-e/eaglevision/blob/main/src/evaluation/evaluate.py): `src/evaluation/evaluate.py`
- [Mission artifacts](https://github.com/immanuel-raj-e/eaglevision/tree/main/output): `output`

### Mission Experience

- [Mission runner](https://github.com/immanuel-raj-e/eaglevision/blob/main/run_mission_pipeline.py): `run_mission_pipeline.py`
- [Commander dashboard](https://github.com/immanuel-raj-e/eaglevision/blob/main/ui/app.py): `ui/app.py`

### Other components

- **UAV media & logs**
- **Incident commander**

## Connections

- UAV media & logs → Mission runner: provides media
- Mission runner → Telemetry parser: queries state
- Mission runner → RGB-thermal detector: detects targets
- Mission runner → Target tracker: updates tracks
- Target tracker → Kalman filter: estimates motion
- Mission runner → WGS84 raycaster: geolocates tracks
- Mission runner → Ground deduplicator: deduplicates leads
- Mission runner → Scoring & evidence: scores entities
- Scoring & evidence → Mission exports: writes exports
- Scoring & evidence → Mission artifacts: writes evidence
- Mission runner → Evaluation audit: evaluates mission
- Evaluation audit → Mission artifacts: writes audit
- UAV media & logs → Selector CLI: supplies video
- Selector CLI → Sparse frame selector: runs selection
- Sparse frame selector → Frame & metadata I/O: saves frames
- UAV media & logs → Video synchronizer: supplies streams
- Video synchronizer → Telemetry parser: queries samples
- Incident commander → Commander dashboard: reviews mission
- Commander dashboard → Mission artifacts: reads results
- Commander dashboard → Mission runner: starts pipeline
- Mission exports → Commander dashboard: feeds map
