# Azaion.Detections — Documentation Report

## Executive Summary

Azaion.Detections is a Python/Cython microservice for automated aerial object detection. It exposes a FastAPI HTTP API that accepts images and video, runs YOLO-based inference through TensorRT (GPU) or ONNX Runtime (CPU fallback), and returns structured detection results. The system supports large aerial image tiling with ground sampling distance-based sizing, real-time video processing with frame sampling and tracking heuristics, and Server-Sent Events streaming for live detection updates.

The codebase consists of 10 modules (2 Python, 8 Cython) organized into 4 components. It integrates with two external services: a Loader service for model storage and an Annotations service for result persistence. The system has no tests, no containerization config in this repo, and several legacy artifacts from a prior RabbitMQ-based architecture.

## Problem Statement

Automated detection of military and infrastructure objects (19 classes including vehicles, artillery, trenches, personnel, camouflage) from aerial imagery and video feeds. Replaces manual analyst review with real-time AI-powered detection, enabling rapid situational awareness for reconnaissance operations.

## Architecture Overview

**Tech stack**: Python 3 + Cython 3.1.3 | FastAPI + Uvicorn | ONNX Runtime 1.22.0 | TensorRT 10.11.0 | OpenCV 4.10.0 | NumPy 2.3.0

**Key architectural decisions**:
1. Cython for performance-critical inference loops
2. Dual engine strategy (TensorRT + ONNX fallback) with automatic conversion and caching
3. Lazy engine initialization for fast API startup
4. GSD-based image tiling for large aerial images

## Component Summary

| # | Component | Modules | Purpose | Dependencies |
|---|-----------|---------|---------|-------------|
| 01 | Domain | constants_inf, ai_config, ai_availability_status, annotation | Shared data models, enums, constants, logging, class registry | None (foundation) |
| 02 | Inference Engines | inference_engine, onnx_engine, tensorrt_engine | Pluggable ML inference backends (Strategy pattern) | Domain |
| 03 | Inference Pipeline | inference, loader_http_client | Engine lifecycle, media preprocessing/postprocessing, model loading | Domain, Engines |
| 04 | API | main | HTTP endpoints, SSE streaming, auth token management | Domain, Pipeline |

## System Flows

| # | Flow | Trigger | Description |
|---|------|---------|-------------|
| F1 | Health Check | GET /health | Returns AI engine availability status |
| F2 | Single Image Detection | POST /detect | Synchronous image inference, returns detections |
| F3 | Media Detection (Async) | POST /detect/{media_id} | Background processing with SSE streaming + Annotations posting |
| F4 | SSE Streaming | GET /detect/stream | Real-time event delivery to connected clients |
| F5 | Engine Initialization | First detection request | TensorRT → ONNX fallback → background conversion |
| F6 | TensorRT Conversion | No cached engine | Background ONNX→TensorRT conversion and upload |

## Risk Observations

| Risk | Severity | Source |
|------|----------|--------|
| No tests in the codebase | High | Verification (Step 4) |
| No CORS, rate limiting, or request size limits | Medium | Security review (main.py) |
| JWT token handled without signature verification | Medium | Security review (main.py) |
| Legacy unused code (serialize, from_msgpack, queue declarations) | Low | Verification (Step 4) |
| No graceful shutdown for in-progress detections | Medium | Architecture review |
| Single-instance in-memory state (_active_detections, _event_queues) | Medium | Scalability review |
| No Dockerfile or CI/CD config in this repository | Low | Infrastructure review |
| classes.json must exist at startup — no fallback | Low | Reliability review |
| Hardcoded 1280×1280 default for dynamic TensorRT dimensions | Low | Flexibility review |

## Open Questions

1. Where is the Dockerfile / docker-compose.yml for this service? Likely in a separate infrastructure repository.
2. Is the legacy RabbitMQ code (serialize methods, from_msgpack, queue constants in .pxd) planned for removal?
3. What is the intended scaling model — single instance per GPU, or horizontal scaling with shared state?
4. Should JWT signature verification be added at the detection service level, or is the current pass-through approach intentional?
5. Are there integration or end-to-end tests in a separate repository?

## Artifact Index

| Path | Description |
|------|-------------|
| `_docs/00_problem/problem.md` | Problem statement |
| `_docs/00_problem/restrictions.md` | System restrictions and constraints |
| `_docs/00_problem/acceptance_criteria.md` | Measurable acceptance criteria |
| `_docs/00_problem/input_data/data_parameters.md` | Input data schemas and parameters |
| `_docs/01_solution/solution.md` | Solution description and assessment |
| `_docs/02_document/00_discovery.md` | Codebase discovery (tech stack, dependency graph) |
| `_docs/02_document/modules/*.md` | Per-module documentation (10 modules) |
| `_docs/02_document/components/01_domain/description.md` | Domain component spec |
| `_docs/02_document/components/02_inference_engines/description.md` | Inference Engines component spec |
| `_docs/02_document/components/03_inference_pipeline/description.md` | Inference Pipeline component spec |
| `_docs/02_document/components/04_api/description.md` | API component spec |
| `_docs/02_document/diagrams/components.md` | Component relationship diagram |
| `_docs/02_document/architecture.md` | System architecture document |
| `_docs/02_document/system-flows.md` | System flow diagrams and descriptions |
| `_docs/02_document/data_model.md` | Data model with ERD |
| `_docs/02_document/04_verification_log.md` | Verification pass results |
| `_docs/02_document/FINAL_report.md` | This report |
| `_docs/02_document/state.json` | Documentation process state |
