4.3 KiB
Azaion.Detections — Data Model
Entity-Relationship Diagram
erDiagram
AnnotationClass {
int id PK
string name
string color
int max_object_size_meters
}
Detection {
double x
double y
double w
double h
int cls FK
double confidence
string annotation_name
}
Annotation {
string name PK
string original_media_name
long time
bytes image
}
AIRecognitionConfig {
int frame_period_recognition
double frame_recognition_seconds
double probability_threshold
double tracking_distance_confidence
double tracking_probability_increase
double tracking_intersection_threshold
int big_image_tile_overlap_percent
int model_batch_size
double altitude
double focal_length
double sensor_width
}
AIAvailabilityStatus {
int status
string error_message
}
DetectionDto {
double centerX
double centerY
double width
double height
int classNum
string label
double confidence
}
DetectionEvent {
string mediaId
string mediaStatus
int mediaPercent
}
Annotation ||--o{ Detection : contains
Detection }o--|| AnnotationClass : "classified as"
DetectionEvent ||--o{ DetectionDto : annotations
Core Domain Entities
AnnotationClass
Loaded from classes.json at startup. 19 base classes × 3 weather modes = up to 57 entries in annotations_dict.
| Field | Type | Description |
|---|---|---|
| id | int | Unique class ID (0-18 base, +20 for winter, +40 for night) |
| name | str | Display name (e.g. "ArmorVehicle", "Truck(Wint)") |
| color | str | Hex color for visualization |
| max_object_size_meters | int | Maximum physical size — detections exceeding this are filtered out |
Detection
Normalized bounding box (0..1 coordinate space).
| Field | Type | Description |
|---|---|---|
| x, y | double | Center coordinates (normalized) |
| w, h | double | Width and height (normalized) |
| cls | int | Class ID → maps to AnnotationClass |
| confidence | double | Model confidence score (0..1) |
| annotation_name | str | Back-reference to parent Annotation name |
Annotation
Groups detections for a single frame or image tile.
| Field | Type | Description |
|---|---|---|
| name | str | Unique name encoding media + tile/time info |
| original_media_name | str | Source media filename (no extension, no spaces) |
| time | long | Timestamp in ms (video) or 0 (image) |
| detections | list[Detection] | Detected objects in this frame |
| image | bytes | JPEG-encoded frame (set after validation) |
AIRecognitionConfig
Runtime configuration for inference behavior. Created from dict (API) or msgpack (internal).
AIAvailabilityStatus
Thread-safe engine lifecycle state. Values: NONE(0), DOWNLOADING(10), CONVERTING(20), UPLOADING(30), ENABLED(200), WARNING(300), ERROR(500).
API DTOs (Pydantic)
DetectionDto
Outward-facing detection result. Maps from internal Detection + AnnotationClass label lookup.
DetectionEvent
SSE event payload. Status values: AIProcessing, AIProcessed, Error.
AIConfigDto
API input configuration. Same fields as AIRecognitionConfig with defaults.
HealthResponse
Health check response with AI availability status string.
Annotation Naming Convention
Annotation names encode media source and processing context:
- Image:
{media_name}_000000 - Image tile:
{media_name}!split!{tile_size}_{x}_{y}!_000000 - Video frame:
{media_name}_{H}{MM}{SS}{f}(compact time format)
Serialization Formats
| Entity | Format | Usage |
|---|---|---|
| Detection/Annotation | msgpack (compact keys) | annotation.serialize() |
| AIRecognitionConfig | msgpack (compact keys) | from_msgpack() |
| AIAvailabilityStatus | msgpack | serialize() |
| DetectionDto/Event | JSON (Pydantic) | HTTP API responses, SSE |
No Persistent Storage
This service has no database. All data is transient:
classes.jsonloaded at startup (read-only)- Model bytes downloaded from Loader on demand
- Detection results returned via HTTP/SSE and posted to Annotations service
- No local caching of results