Back to the work
Deep dive · 03 — Computer vision

Client build

A vision pipeline that reads the whole match.

Detection, tracking, and per-player event attribution over raw match footage — the full pipeline on a GPU worker, no off-the-shelf model.

fig. 03 · event attribution
0711230920pass · p07occlusion · predictedreception · p09carry
observed kalman-predicted event
Detection · optical-flow tracking · per-player attribution.
  • End-to-end

    detection, tracking, event attribution — no off-the-shelf model

  • Through occlusion

    Kalman-predicted track when the ball is hidden

  • GPU worker

    the full pipeline over raw match footage

The problem

Raw match footage is the hardest kind of video to read automatically. The camera itself moves — panning, following play — so nothing in the frame is a stable reference. The most important object, the ball, is small, fast, and regularly hidden behind players. And the question that matters isn't "where is everything" but "what happened, and who did it."

The approach

We built the pipeline in three stages that feed each other. Object detection finds and tracks every player on the field. A dedicated ball tracker follows the ball itself. And a per-player event model sits on top of both, reading what actually happens on the ball and attributing it to the player who did it.

There is no off-the-shelf model doing the work — the pipeline is engineered end to end for this problem.

The engineering

The ball tracker is the hard core. It's built on optical flow — reading motion between frames — with camera-motion compensation, so the tracker separates the ball's real movement from the camera's pan. Over that sits Kalman filtering: a motion model that keeps predicting the ball's path when observation fails, which is what carries the track through occlusion — the moments when players block the ball from view entirely.

The figure above is drawn from the build: the solid route is the observed ball track, the dashed segment is the Kalman-predicted path through the occlusion, and the diamonds are attributed events — the moments the event model credits a touch to a specific player.

The whole pipeline runs on a GPU worker over raw match footage — footage in, a structured account of the match out.

The outcome

The client gets a full read of the match without a human watching it: every player tracked, the ball followed through pans and occlusion, and every on-ball event attributed to the right player, end to end.

The next build

Every system here started as one conversation. Tell us what your team does by hand.