PRAXIS/Docs
Getting started

How Praxis works

Seven stages between a raw frame and an event you'd act on. Most of the engineering lives in the middle two.

1
Ingest
A frame hub reads the video source on its own thread, so inference never blocks the stream. Telemetry (gimbal angles, altitude, position) rides alongside when the platform provides it. See Sources.
2
Detect
An aerial-tuned detector runs on each frame. Objects in drone footage are small, often under 30 pixels, so inference runs at high resolution and the model is trained on aerial viewpoints, not street-level ones.
3
Track
Per-frame detections get associated into tracks with persistent IDs, using motion prediction plus box overlap. A car that crosses the frame is one object with one history, not 400 separate detections.
4
Stabilize
Raw tracks flicker. A stabilization layer smooths positions, confirms objects over multiple frames before showing them, and holds identity through short dropouts. What the operator sees is this layer, never raw detector output.
5
Anchor
Zones and locked targets are registered to the ground, not to the screen. As the camera moves, optical flow and feature matching keep them pinned to the same patch of world. See Zones.
6
Evaluate rules
Rules bind zones to object classes and triggers: enter, exit, dwell, count. Each frame, every stabilized object is tested against every active rule. See Rules & events.
7
Emit
A rule that fires produces an event, and the event carries its own proof: timestamp, frame crop, track history, zone geometry at that moment. See Evidence.

Where the difficulty actually is#

Detection is the easy part. Off-the-shelf models find cars in a frame just fine. The hard problems are the ones that only show up when frames become a stream:

  • Identity. Two detections a frame apart, is that one car or two? Get this wrong and every count downstream is wrong. Praxis runs deduplication at three separate points in the pipeline because this failure mode is that persistent.
  • Camera motion.The drone drifts, the gimbal pans, and suddenly “the area near the intersection” is a different set of pixels. Anchoring is what makes a zone mean a place instead of a region of the screen.
  • Small objects at night. A person at altitude in low light is a smear of a few dozen pixels. The runtime re-detects at higher resolution inside cropped regions around zones and locked targets, which recovers objects the full-frame pass misses.

Three levels of objects#

Internally the runtime keeps three views of the scene, and it never confuses them:

LevelWhat it isWho consumes it
trackedRaw tracker output, one update per frame, noisyStabilizer only
stableSmoothed, multi-frame confirmed, deduplicatedRules, counting, events
displayStable objects merged with lock and zone overlaysOperator UI
Rules always run on stable objects. Running them on raw tracks would double- and triple-count on flicker, which is exactly the failure the challenge is designed to expose in humans.