Sample data
The challenge loads prepared static video and JSON artifacts. This page documents what is served, what was computed ahead of time, and what you can inspect yourself.
Three prepared files are served from this domain without authentication:
$ 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#
{
"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 prepared quadrilateral per frame, 467 in total. The browser draws frame i's saved polygon over the clip. events holds 15 prepared scored entries: time in seconds, normalized entry position, and saved track ID.
detections.json#
{
"fps": 29.97,
"frames": [ [[x, y, w, h, track_id], ...], ... ]
}One array per frame, one 5-tuple per prepared tracked object: normalized box plus its saved track ID. This is what the challenge replay draws. Preparation filters short-lived and implausibly small tracks using a minimum 8-frame lifetime and minimum median area. Other tracker output, including mistakes, remains in the file.
Check us#
The challenge result record contains 15 scored entries. This script verifies the number of saved rows and prints their fields. It does not rerun the model or independently recount the footage:
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})')