§1The problem
Seeing a play from above, in 3D, helps understand what happened, but it requires extracting the position of every player and the ball, in metres, from the video.
§2What I built
- Unity gameWeb build with pitch, stadium, animated players and a page with video and game side by side, in sync.
- Video analysisPython: pitch by homography, players, ball in 3D from touch to touch, camera, events (shot, fall, save) and shirt number by AI.
- Play file formatThe only link between the two parts.
- VR modeOn Meta Quest, at real scale.
- Test rulerHand-labelled ground truth and a score command to measure every change.
§3The hard parts
4 entries- 01
Pitch by homography on every frame
From the lines (0.28 m error on a test clip).
- 02
3D ball from a single camera
The trajectory only changes direction at a player or a bounce.
- 03
Discipline of measuring
A change that lowers the score is dropped; no rules tuned for a single video.
- 04
Two decoupled parts
Connected only by a versioned file format.
§4Result
- pitch homography error on a test clip
- 0.28 m
Works end to end on test clips, but it was paused: the research found no real breakthrough and tracking from TV footage has known limits (off-screen players are estimated, a ball in the net is rarely detected).
§5Stack
- Unity 6.6 (C#, Web build, WebXR)
- Python (YOLO, OpenCV)
- Blender via script (animations)
- pm2