Back to Projects

Frisbee Tracker


USA vs. Belgium 2025 U24 Mens World Championship

Overview

This is a system that tracks players throughout the duration of an ultimate frisbee game. I built it with the goal to turn simple footage into trackable and analyzable data.


I've had this thought for sports tracking for players and analytics for a while. This isn't a new and revolutionary idea, but still has a ways to go. Also since beginning to use Claude Code, I've been able to put these larger projects into life.

Motivation

I saw a video where someone created tracking for soccer (yes soccer), and I figured why not try making this for other sports. Since ultimate frisbee is actually quite similar in structure to soccer, this felt quite repeatable.


Right now, it just tracks the players and occasionally the disc, but my goal for the future is to eventually convert the broadcast camera view into a top-down 2D visualization of the field, also track other nuances of the game such as how open/defended a player is, and play structure. I'm going to update this page as I make updates.

Results

V1:

  • A quite pass through the video and learn the two team colors (k-means on jersey color), also identifies referees/observers (third-party color).
  • Each frame runs one high-resolution YOLO segmentation pass to find players and the disc. Skip non-field images (replays, close-ups) are skipped.
  • Every player is classified and drawn with a colored silhouette (red or blue). Players not in the game are drawn with gray.
  • The disc is tracked by pinning it to the holder's hands and whoever holds it is highlighted as the thrower (orange or green) until a throw, to avoid falsely detecting the holder.

V2:

  • Not much really changed implementation wise, but it uses better field calibration to more accurately determine the sideline.
  • The new disc detection logic involves taking the entire player outline, then subtracting the known features of the player. If the disc remains, that's the player holding the frisbee.
  • Added a 2D representation of the field, it seems to be fairly accurate when the field is isolated (such as at the end of the video and the players on the field are the only thing in frame). Otherwise, it shows the players on the bench, polluting the view.
  • The 2D field dimensions also aren't quite proportional to the actual field, so players are not being tracked perfectly accurately.
  • There's still occasionally false disc detection with random white lines or blobs near the sideline.

Next Steps

One thing to keep of note are false positives with the bench. It still hasn't perfectly figured out players on the bench vs. players on the field. It picks up the interior yard lines fairly reliably, but struggles to draw bounding boxes around the field of play. Also, which you can see in the demo footage above, with the frisbee detection/tracking, there are false positives on bright, round things off the field.

  • Improve player/disc tracking
  • Improve 2D view
  • Identify and determine player openness