Sports video analysis
Badminton Tracking Framework
From a badminton rally to tactics, automatically.
- 4 modelscourt, players, shuttlecock and strokes, chained in one pipeline
- 96.7%of 704 strokes classified correctly on a test match (5 stroke types)
- FFBaDthe code now belongs to the French Badminton Federation
Overview
The problem
Coaches want to know how a rally was played: where each player stood, where the shuttle went and which strokes built the point. In broadcast video the shuttlecock is tiny and fast, players occlude each other, and the camera view changes. Doing it by hand takes hours per match.
What was missing
No single tool chained court geometry, player pose, shuttle tracking and stroke recognition into rally-level statistics for the federation's footage. Each piece existed separately; the work was to make them run together on real rallies.
Architecture
Swipe to see the whole diagram →
Technical details
- Stack: Python 3.9, TensorFlow 2.5 / Keras, TensorFlow Hub, OpenCV 4.5.
- Pose embedding: MoveNet keypoints centred on the hips and scaled by torso size, then a dense classifier (128 → 64, ReLU6, dropout 0.5) over five coarse classes: forehand serve, backhand serve, lob-net, drop-clear-drive-smash, no pose.
- Shuttle tracking: TrackNetV2-style encoder–decoder, 3 stacked frames at 288 × 512, trained and evaluated with a pixel tolerance for true positives.
- Rally input: the pipeline runs per rally; full matches are first split into rallies.
- Outputs: annotated video (skeletons, shuttle trail, detected strokes, minimap), a frame-stamped stroke CSV per player and an offensive/defensive score.
What I built
- 01
Court detection and minimap
White-line extraction and a Hough transform find the court lines; their intersections give a homography to the official court model and a top-view minimap.
- 02
Players as skeletons
MoveNet MultiPose (Lightning) gives 17 keypoints for both players; each is assigned near or far by court position and projected onto the minimap.
- 03
Shuttlecock tracking
A TrackNetV2 network, trained on labelled shuttle frames, takes three consecutive frames and outputs a heatmap of the shuttle position.
- 04
Stroke recognition and tactics
A pose-embedding classifier detects the stroke family; rules on the shuttle's motion after contact split it into lob, net, smash, drop or clear, then into an offensive or defensive balance per player.
Main results
| Annotated ↓ / Predicted → | Net | Lob | Smash | Drop | Clear |
|---|---|---|---|---|---|
| Net | 265 | 8 | 0 | 1 | 0 |
| Lob | 5 | 188 | 0 | 0 | 0 |
| Smash | 0 | 2 | 196 | 2 | 2 |
| Drop | 0 | 0 | 0 | 3 | 0 |
| Clear | 0 | 0 | 1 | 2 | 29 |
- Drop shots are rare in this match (3 annotated), so the per-class picture there is thin.
Qualitative results


Contact
Interested in the work?
I'm looking for AI research engineer roles in computer vision and video understanding, ideally in sports analytics, though not only. Ready to start a new journey.
Paris, France