CV Tracer · YOLO + Pose + Court Keypoints
Ball + Skeleton Tracker
broadcast video → real-time overlay · 4 of 5 clips processed
CV Reconstruction
YOLO + POSE + COURT · 30FPS
loading CV stream…
paused · 0 fpsyolov8 · pose · ball-track · court —bounces: 0
frames: 0
0.00s / 0.00s
ATP highlight reel · 4 of 5 processed
What you're seeing
- ● Magenta corner brackets · player bounding boxes (P1 / P2)
- ● Yellow/green stick figures · 14-joint pose skeletons
- ● Magenta rings · ball bounces inside court
- ● Red OUT rings · bounces outside court boundary
- ● Yellow streak · ball trail (solid = YOLO detection, dashed = predicted)
- ● Cyan court overlay · auto-detected singles boundary + service lines
- ● Magenta tag · auto-classified shot (FH / BH / Volley / Serve)
Pipeline
- Detection: YOLOv8m-pose (52MB)
- Ball: YOLOv8m sports-ball + linear-velocity gap fill
- Identity: IoU tracker keeps P1/P2 stable
- Smoothing: EMA on joints (α=0.5) + bbox (α=0.55)
- Court: manual corner-pick + persistent overlay
- Bounces: ball y-direction reversals, deduped 250ms
- Cuts: HSV histogram comparison (auto-hide overlay)
- Sync: requestVideoFrameCallback (frame-perfect)
Limits / next
- Far player sometimes lost in occluded broadcast frames
- Court keypoints hardcoded per clip — auto-detect needs TennisCourtDetector
- Shot classifier heuristic (~70% accurate) — LSTM would push 90%+
- Speed estimates rough (no homography to court meters yet)
- Next: add more clips via
scripts/fetch-clips.mjs