A detector over a disaster zone returns thousands of boxes. A rescue coordinator needs how many, where, and who first. ARES is everything in between — running on the aircraft, so losing the network costs the video feed and nothing else.
A person walks in and out of frame six times. Six people, or one? A detector has no memory between frames — and at a threshold tuned to miss nobody, it also reports every shadow. Watch what that costs, and what removes it.
Each stage exists because the one before it produces something not yet usable. They exchange a single JSON format — which is what lets three people work independently, and what lets the demo replay a stored file instead of inferring live.
Boxes and confidences at 960 px, threshold 0.18. Finds people — but has no memory between frames.
Persistent IDs across frames, so the same person is never counted twice. Position is still in pixels.
Pixel offset → GPS from known altitude and field of view. 1.8 cm per pixel. Now they are on a map.
Confidence, cluster size and hazard proximity, in a formula printed on screen. Not a black box.
A missed survivor cannot be recovered. The costs are wildly asymmetric, so the confidence threshold should be too — ours is 0.18, not the conventional 0.5, read off the validation run's precision-recall curve.
More survivors found, for every thousand present. That is the entire argument for this system's most important parameter.
At 0.18 the detector reports anything person-shaped — a shadow, a bag, a patch of rubble — and the tracker gives each one an identity. That is why 333 identities exist for 23 people.
We measured those short tracks: mean confidence 0.42 against 0.52 for long ones, and only 7% starting or ending at the frame edge. Low confidence, mid-frame, gone in a frame or two is flicker — not someone walking out of shot.
So the filter is persistence, not a higher threshold. A track must hold for 2.5 seconds. Expressed as a duration, because that is 60 frames on this clip and 3 on a Raspberry Pi.
Nothing in the "described" row is simulated, mocked or implied anywhere in the product. We would rather answer hard questions about what is on the screen.
| CAPABILITY | STATUS | DETAIL |
|---|---|---|
| On-device inference | Built | YOLOv12s, ONNX-exported, Raspberry Pi 4 target |
| Counting & tracking | Built | ByteTrack with a measured persistence filter |
| Geo-tagged mapping | Built | Nadir projection from assumed altitude and FOV |
| Priority ranking | Built | A transparent weighted formula, printed on screen |
| Command dashboard | Built | Works with the backend switched off |
| Offline resilience | Built | A consequence of on-device inference, not a feature |
| RGB + thermal fusion | Partial | Public thermal datasets, not physical hardware |
| Hazard classification | Partial | 3 of 7 classes — fire/smoke, flood, collapse |
| Autonomous nav · SLAM | Described | Architecture only. Deliberately not built, and not mocked |
Because the classifier does not exist yet. A fire on the map would make the ranking respond to something we made up, so the scoring drops the term and says it did.
There is no aircraft. The dashboard shows the constants it computed with instead, each tagged assumed, chosen, derived or measured.
No drone, so the clip is a public UAV dataset. Every box on it is our trained model's actual output over that footage.
It needs to not miss the ground. At 20 m the camera sees 23 m of it, and the aircraft takes seconds to cross its own footprint — so every patch is seen in several consecutive frames even at one frame per second.
A miss in one frame is recovered in the next. Thirty FPS gives thirty looks at the same ground, twenty-nine redundant, at thirty times the power budget.
YOLOv12 is attention-centric and trades speed for accuracy. On a Pi 4 with no accelerator that trade is real, and worth stating rather than hiding.
INT8 is roughly 4× smaller and much faster on CPU. NCNN is hand-optimised for ARM. Both are measurements we have not taken yet.
Trained on combined C2A and VisDrone under one unified person class. Every figure from the validation run — none estimated.
For context: YOLO12s scores 48.0 mAP50-95 on COCO — mostly large, centred, well-lit objects. ARES scores 49.4 on small humans seen from directly above.



Detection model, hazard classifier, on-device benchmark, backend and dashboard.
Tracking, pixel-to-GPS localization, and the rescue priority scoring logic.
Pitch, presentation and the recorded demo.