← All work
Featured project

GoalPro — AI for grassroots football

Turning ordinary football footage into player-level performance insights, using computer vision.

Computer visionRF-DETRObject detectionVideo processingByteTrackJersey number recognitionData analysis
Visit goalpro.co.uk ↗Watch the demo
Demo

See GoalPro in action

Video not playing? Watch it on YouTube ↗

The problem

Grassroots players have no data

Grassroots football players have very little access to objective performance data. Professional footballers have analysts, tracking systems and performance reports. Amateur players generally just have their memories of the match.

The idea

Let the camera do the analysis

Use computer vision to turn ordinary football footage into player-level performance insights.

Where I am today

Current capabilities

From a single camera, GoalPro detects and tracks every player and the ball, maps their positions onto a tactical view, and builds live match stats.

Player tracking, live tactical map and match stats.
Raw footage (left) and what GoalPro sees (right).
The technology

What's under the hood

  • Object detection (RF-DETR)
  • Computer vision
  • Player and ball detection
  • Video processing
  • Multi-object tracking (ByteTrack)
  • Jersey number recognition
  • Team classification
  • Data extraction and analysis
My process

From footage to stats

  1. Collect and label images.
  2. Train and configure a detection model.
  3. Test how accurately it identifies objects.
  4. Process video frame by frame.
  5. Turn detections into meaningful football events.
  6. Transform those events into useful statistics.
Deep dive

Inside the tracking pipeline

Detecting players in a single frame is only half the job. To build stats for each player, GoalPro has to follow every player across the whole match — and keep their identity correct the entire time.

The three tracking errors

In object tracking, there are three main types of error. Because of them, we always need a post-processing stage to make the final tracking accurate and consistent.

Lost track IDs

The tracker loses a player's identity.

ID swaps

The identities of two players get swapped.

ID switches

A player's tracking ID incorrectly changes.

How the pipeline works

  1. Object detection
  2. Online tracking (ByteTrack)
  3. Tracklet error detection
  4. Tracklet splitting
  5. Tracklet reconnection
  6. Final corrected tracking
Detection and online trackingPost-processing
Component 1

Online tracker

Performs the initial tracking and generates tracklets — short pieces of a player's path.

  • Uses ByteTrack, which includes a Kalman filter to predict where each player moves next
  • Relies on each player's motion and direction, plus the overlap (IoU) between detection boxes
  • Doesn't use appearance features in our current setup — we don't need them at this stage
Component 2

Post-processing

Detects and corrects tracking errors, rebuilds the tracklets and produces the final tracking results.

  • Stage 1 — Split: break long tracklets wherever a tracking error is detected
  • Stage 2 — Connect: rejoin the smaller tracklets that belong to the same player, rebuilding each player's full trajectory

Splitting and reconnecting, step by step

We spot errors using jersey number recognition and team classification. If a tracklet suddenly shows a different jersey number or team, something has gone wrong — so we split it there. Then we use the same information to work out which pieces belong to the same player and reconnect them.

Why player identity is the key

Having something distinctive for each player — here, jersey numbers and team — makes both stages far easier. Without them, post-processing becomes much more complicated and computationally expensive.

The online tracker also gives us information across many frames. So instead of reading a jersey number from a single frame, we use every observation in the tracklet. One blurry or misread frame can't cause a wrong assignment.

7717?777 → Tracklet identity: #7
The main point

Our final tracking accuracy doesn't depend only on the online tracker. A significant part of it comes from post-processing: detecting errors, splitting incorrect tracklets and reconnecting them using reliable player identity information.

Stages of development

How GoalPro was built

From pen and paper to a trained model, one stage at a time.

  1. Prove the MVP

    Tracking stats by hand

    Before building anything, I needed to know: do people even want this? So I tracked player stats manually with a pen and paper — goals, assists, shots, dribbles, interceptions, tackles, saves and clutch moments.

    A hand-drawn tally sheet of match stats per player: goals, assists, shots, dribbles, interceptions, tackles, saves and clutch moments
  2. Label the data

    Weeks of annotating

    Doing it by hand took far too long, so I needed to automate it with computer vision. That meant weeks of tagging players and the ball in match footage, often for 3+ hours a day, to create the training data.

  3. Train the model

    Player and ball detection

    I fine-tuned an RF-DETR object detection model on the annotated data, so it can find every player and the ball in each frame of a match.

Product roadmap

What's next for GoalPro

The next steps to make GoalPro fully automatic: from detecting more of what happens in a match to tracking players without special equipment.

  1. 1
    In progress

    Shot detection

    Automatically detect shots, trained on the shots I've already tagged.

  2. 2
    Planned

    Stats dashboard

    A dashboard where players can explore their stats.

  3. 3
    Planned

    More events

    Detect other events, such as tackles.

  4. 4
    Planned

    Non-bib tracking

    Track players accurately without the custom bibs used for the MVP.

The end result

An example player profile

Every match a player plays builds their profile: performance stats, highlights and match history — the kind of data that used to be reserved for professionals.

GoalPro player profile for Saidur Sikder, midfielder, 373 XP, 6 matches played: 9 goals, 14 assists, 50 shots, 44 interceptions, 18 dribbles, 19 tackles, 38 blocks
Have an idea?

Interested in GoalPro?

Whether you run a venue, a league or a team, or you're just curious about the artificial intelligence, I'd love to hear from you.