PRAXIS/Docs
API

Sample data

The challenge runs entirely on static JSON that we publish openly. This page documents the files, so you can verify our numbers or build something of your own on top.

Three files, all served from this domain, no auth:

download
$ curl -O https://prxintel.com/challenge/clip.mp4        # the footage, 15.6 s, 720p
$ curl -O https://prxintel.com/challenge/zone.json       # zone geometry + entry events
$ curl -O https://prxintel.com/challenge/detections.json # every tracked box, every frame

zone.json#

shape
{
  "fps": 29.97,
  "clipSeconds": 15.58,
  "zoneFrames": [ [[x, y], [x, y], [x, y], [x, y]], ... ],
  "events":     [ { "t": 0.067, "x": 0.54, "y": 0.909, "id": 7 }, ... ]
}

zoneFrames holds one quadrilateral per frame, 467 in total. This is the world-anchored zone polygon as registered on each individual frame; play the clip and draw frame i's quad over it and you'll see the zone hold its patch of road while the camera moves. events holds the 15 scored entries: time in seconds, normalized entry position, and the track ID of the car.

detections.json#

shape
{
  "fps": 29.97,
  "frames": [ [[x, y, w, h, track_id], ...], ... ]
}

One array per frame, one 5-tuple per tracked object: normalized box plus its persistent track ID. This is what the challenge replay draws. Short-lived and implausibly small tracks are filtered out (minimum 8 frames of life, minimum median area), everything else is left as the tracker produced it, including its mistakes.

Check us#

The claim the challenge makes is that 15 distinct cars enter the zone. You don't have to take that on faith:

verify.py
import json, urllib.request

zone = json.load(urllib.request.urlopen("https://prxintel.com/challenge/zone.json"))
print(len(zone["events"]), "entries")
for ev in zone["events"]:
    print(f'  {ev["t"]:6.2f}s  track {ev["id"]:3d}  at ({ev["x"]:.2f}, {ev["y"]:.2f})')
If you find a car we miscounted, we genuinely want to know. Tell us at @flypraxis with the timestamp.