Sports Tracking AI
Computer vision that turns a camera on a tripod into a full stat sheet.
The AI engine behind Pickup.Earth's player profiles — I designed the brand and output, and built the detection pipeline from scratch.
Role
Designer + Builder
Discipline
Computer Vision
Stack
PyTorch · OpenCV
Status
Powers Pickup.Earth
The Problem
Player profiles are the heart of Pickup.Earth — but a profile with no stats is just a name and a photo. It stays hollow.
Organized basketball has scorekeepers and box scores. Pickup ball has none of it. Nobody is charting shots at a Saturday run.
The moment you ask players to log their own stats, you’ve added friction to the one thing that works because it has none.
Every court has a game happening in front of a camera. The record is right there — it just has nothing reading it.
The Opportunity
Point a camera at the court, run the footage through Inki, and the profiles fill themselves in. No scorekeeper. No manual logging. Just structured stats out the other side.
Generate real stats with zero effort from players
Populate profiles automatically from a single video feed
Turn detections into game-level events, not raw boxes
Give Pickup.Earth a history that captures itself
1 camera
is all it takes. Everything downstream — profiles, head-to-head, reliability — runs on what Inki sees.
How I Built It
The pipeline runs in stages. The point isn\u2019t the code — it\u2019s understanding the whole chain from raw pixels to a stat a player actually cares about.
Step 1
Video In
Raw game footage from a single court-side camera.
Step 2
Detection
A Roboflow-trained model finds players, ball, and hoop per frame.
Step 3
Tracking
ByteTrack (via Supervision) holds each player’s identity across frames.
Step 4
Game Logic
Possession, shot attempts, and hoop-locking turn frames into events.
Step 5
Stats Out
Structured, per-player stats — ready to feed a profile.
The Hard Part
Detection was never the challenge. Turning noisy, per-frame detections into stable, game-level events was. A single frame will happily tell you the ball is in three places at once. The work lived in the logic layer on top — hoop-locking to anchor a fixed scoring reference, and possession detection to decide who actually had the ball across a sequence rather than in any one frame. That\u2019s the gap between a model that sees a basketball and a system that understands a basketball game.
My Role & Process
Most designers hand off the hard part. On Inki I owned all of it — the brand, the output experience, and the machine learning pipeline underneath that makes the output possible. I designed a product feature and built the system that feeds it.
The thing I care most about showing here: I don\u2019t just design around technical constraints — I can build the technical part myself and design it end to end.
Problem Framing
Why profiles felt hollow, and why manual stats were a non-starter
Data & Training
Labeled footage, trained a detection model in Roboflow
Detection + Tracking
PyTorch inference, ByteTrack for stable player identity
Game Logic
Possession, shot detection, made/missed, hoop-locking
Output UX
Deciding what becomes a stat, and where it shows up
Brand
The mark, the wordmark, the broadcast-ready visual system
What I Built
Solo — from the first labeled frame to the shipped stat on a profile.
Design Decisions
Raw CV output is noise — coordinates, confidence scores, boxes. None of it belongs in front of a user. The design job was deciding what turns into a stat, and surfacing it inside the existing profile so the intelligence stays invisible and only the value shows.
The same detection layer feeds Pickup.Earth’s broadcast graphics, so the treatment had to hold up on screen — not just in a data table. That constraint shaped how stats get framed and animated.
The mark is a camera bracket framing a figure — machine vision "looking" at a subject, with a human form kept at the center. Dark, minimal, electric-blue accent: precise and technical without feeling cold.
The Payoff
This is the loop that makes Inki matter. Without it, the whole social layer depends on manual input nobody would ever actually do. With it, the platform captures its own history — automatically.
Inki
watches the footage
Stats
get generated per player
Profiles
populate automatically
Social
head-to-head, Regulars, reliability
Status
Reliably detects players, possession, and made/missed shots on recorded footage, with output structured for player profiles. Built and trained locally end-to-end.
What\u2019s Next
Real-time processing, richer stats (assists, rebounds), and running against multiple gym camera feeds across Pickup.Earth locations.
That's a wrap
I'm available for new projects. Let's build something that moves people.