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