|
1 | 1 | # Design Document: Tracker Service |
2 | 2 |
|
3 | 3 | - **Author(s)**: [Józef Daniecki](https://github.com/jdanieck) |
4 | | -- **Date**: 2026-01-16 |
5 | | -- **Version**: 0.1 |
| 4 | +- **Date**: 2026-04-27 |
| 5 | +- **Version**: 0.2 |
6 | 6 | - **Status**: `Accepted` |
7 | 7 | - **Related ADRs**: |
8 | 8 | - [ADR-0003: Scaling Controller Performance](../adr/0003-scaling-controller-performance.md) |
@@ -52,7 +52,8 @@ Explicitly out of scope: |
52 | 52 | - **Lease-based scaling** — Static scene partitioning only |
53 | 53 | - **Multi-scene fusion** — No cross-scene track handoff |
54 | 54 | - **Scene hierarchy** — Flat scene structure only; no parent-child scene relationships or nested regions |
55 | | -- **Sensor tagging of a track** — No visibility array or per-sensor metadata on tracks |
| 55 | +- **Sensor tagging of a track** — No visibility array or per-sensor assignment on tracks |
| 56 | +- **Multi-camera confidence merging** — When a track is observed by multiple cameras in the same time chunk, `confidence` from the last processed camera overwrites earlier values (last-write-wins, inherent RobotVision attributes API limitation) |
56 | 57 |
|
57 | 58 | ## Architecture |
58 | 59 |
|
@@ -90,7 +91,8 @@ See full schema: [`camera-data.schema.json`](../../tracker/schema/camera-data.sc |
90 | 91 | "person": [ |
91 | 92 | { |
92 | 93 | "id": 1, |
93 | | - "bounding_box_px": { "x": 4, "y": 0, "width": 127, "height": 309 } |
| 94 | + "bounding_box_px": { "x": 4, "y": 0, "width": 127, "height": 309 }, |
| 95 | + "confidence": 0.92 |
94 | 96 | } |
95 | 97 | ] |
96 | 98 | } |
@@ -121,13 +123,22 @@ See full schema: [`scene-data.schema.json`](../../tracker/schema/scene-data.sche |
121 | 123 | "translation": [-0.33, 2.48, 0.0], |
122 | 124 | "velocity": [-0.04, 0.2, 0.0], |
123 | 125 | "size": [0.5, 0.5, 1.85], |
124 | | - "rotation": [0, 0, 0, 1] |
| 126 | + "rotation": [0, 0, 0, 1], |
| 127 | + "confidence": 0.92 |
125 | 128 | } |
126 | 129 | ] |
127 | 130 | } |
128 | 131 | ``` |
129 | 132 |
|
130 | | -## Data |
| 133 | +### Detection Data Passthrough |
| 134 | + |
| 135 | +The `confidence` field is passed through from the camera detection message to the corresponding track in the scene output. It is optional — when absent in the detection message it is omitted from the track output. |
| 136 | + |
| 137 | +| Field | Type | Description | |
| 138 | +| ------------ | ------ | --------------------------------------------------------- | |
| 139 | +| `confidence` | number | Detection confidence score in \[0, 1\] from the AI model | |
| 140 | + |
| 141 | +**Multi-camera limitation**: When a track is matched against detections from multiple cameras within the same time chunk, `confidence` reflects the last matched camera only (last-write-wins). This is an inherent limitation of the RobotVision attributes API used for per-track data storage. |
131 | 142 |
|
132 | 143 | In-memory only - no persistent storage. Stateless design for horizontal scalability. |
133 | 144 |
|
|
0 commit comments