COMPUTER VISION · SPORTS DATA ENGINEERING · IN PROGRESS
NBA Court Vision Tracker
Broadcast video → player and ball positions on the court, in meters · Python / OpenCV / ONNX
Player-tracking data drives modern team analysis, but optical tracking systems are installed only in professional arenas and their data is rarely public. Broadcast video exists for almost every game. I wanted to find out how much reliable spatial data can be recovered from the broadcast alone.
The pipeline detects players and the ball, estimates the broadcast camera's pan, tilt and zoom frame by frame from the painted court lines, tracks each player, and projects every position onto a top-down court in meters with an attached uncertainty.
The biggest risk is a confident but wrong camera estimate, which silently moves every player on the court. I built a quality gate that grades each frame and withholds court coordinates when the fit is doubtful. It is tested on real failure cases, not only synthetic ones.
The system runs end to end on real broadcasts, including a 113-second multi-camera sequence. Keeping one ID per player through crossings is the main open problem. Human-reviewed annotations are in progress so that tracking accuracy can be measured rather than estimated.
Analytical value: Every row of the output states whether a position was observed, interpolated or unknown, so later analysis of spacing, matchups or possessions can work within the data's limits instead of guessing them. A companion tool reads the scoreboard to turn a broadcast into a searchable game timeline.