Per-shot badminton match data, extracted from broadcast video alone with no manual labelling at inference time.

player + shuttle tracking · hit detection · shot classification · scoreboard OCR

● EVERY OVERLAY IS PIPELINE OUTPUTboxes + pose · shuttle trajectory · shot call · court map · machine-read score

All England Open 2022 semi-final, Lakshya Sen vs Lee Zii Jia, a 39-shot rally from game 2. Nothing in this clip is hand-annotated. Open this rally in the dashboard →

MEASURED ON A
HELD-OUT TEST SET
0.86 F1
hit detection
0.94
rally segmentation
~97%
score OCR accuracy
~0.64 m
court position precision

Denmark Open 2022 semi-final, scored against ShuttleSet22 human annotations. Every threshold was tuned on a different match and left untouched.

Explore other matches
5 matches · 434 rallies · six analysis views, ground truth vs AI side by side

Stack

Players
Ultralytics YOLO11x-pose + ByteTrack, 17-keypoint pose per frame
Court geometry
hand-calibrated 4-corner homography (OpenCV), positions in true metres
Shuttle
TrackNetV3, vendored unmodified and patched to run on Apple-silicon MPS
Hits & landings
velocity-kink / direction-reversal / serve-onset detectors over the shuttle track
Shot types
pretrained BST-0 (CVPRW'26) run on our own CV inputs, zero fine-tuning
Rally windows
camera-run detection with dead-shuttle restart splitting
Score & sets
template-matched digit OCR on the broadcast scoreboard graphic
Storage / analytics
DuckDB keyed by match · pandas · NumPy · scikit-learn
Dashboard
Next.js 16 static export, TypeScript, Tailwind 4, hand-written SVG charts
Runtime
Python 3.12, PyTorch on Apple-silicon MPS