# Module: annotation ## Purpose Data models for object detections and annotations (grouped detections for a frame/tile with metadata). ## Public Interface ### Class: Detection Represents a single bounding box detection in normalized coordinates. | Field | Type | Description | |-------|------|-------------| | `x` | double | Center X (normalized 0..1) | | `y` | double | Center Y (normalized 0..1) | | `w` | double | Width (normalized 0..1) | | `h` | double | Height (normalized 0..1) | | `cls` | int | Class ID (maps to constants_inf.annotations_dict) | | `confidence` | double | Detection confidence (0..1) | | `annotation_name` | str | Parent annotation name (set after construction) | | Method | Signature | Description | |--------|-----------|-------------| | `__init__` | `(double x, y, w, h, int cls, double confidence)` | Constructor | | `__str__` | `() -> str` | Format: `"{cls}: {x} {y} {w} {h}, prob: {confidence}%"` | | `__eq__` | `(other) -> bool` | Two detections are equal if all bbox coordinates differ by less than `TILE_DUPLICATE_CONFIDENCE_THRESHOLD` | | `overlaps` | `(Detection det2, float confidence_threshold) -> bool` | Returns True if IoU-like overlap ratio (overlap area / min area) exceeds threshold | ### Class: Annotation Groups detections for a single frame or image tile. | Field | Type | Description | |-------|------|-------------| | `name` | str | Unique annotation name (encodes tile/time info) | | `original_media_name` | str | Source media filename (without extension/spaces) | | `time` | long | Timestamp in milliseconds (video) or 0 (image) | | `detections` | list[Detection] | Detections found in this frame/tile | | `image` | bytes | JPEG-encoded frame image (set after validation) | | Method | Signature | Description | |--------|-----------|-------------| | `__init__` | `(str name, str original_media_name, long ms, list[Detection] detections)` | Sets annotation_name on all detections | | `__str__` | `() -> str` | Formatted detection summary | | `serialize` | `() -> bytes` | Msgpack serialization with compact keys **(legacy — not called in current codebase)** | ## Internal Logic - `Detection.__eq__` uses `constants_inf.TILE_DUPLICATE_CONFIDENCE_THRESHOLD` (0.01) to determine if two detections at absolute coordinates are duplicates across adjacent tiles. - `Detection.overlaps` computes the overlap as `overlap_area / min(area1, area2)` — this is not standard IoU but a containment-biased metric. - `Annotation.__init__` sets `annotation_name` on every child detection. ## Dependencies - **External**: `msgpack` - **Internal**: `constants_inf` (TILE_DUPLICATE_CONFIDENCE_THRESHOLD constant) ## Consumers - `inference` — creates Detection and Annotation instances during postprocessing, uses overlaps for NMS, uses equality for tile dedup - `main` — reads Detection fields for DTO conversion ## Data Models - `Detection` — bounding box + class + confidence - `Annotation` — frame/tile container for detections + metadata + image ## Configuration None. ## External Integrations None. ## Security None. ## Tests None found.