CourtCockpit
picks1d agosackmann1d agotennis-data1d agoodds3h ago
CV Tracer · YOLO + Pose + Court Keypoints

Ball + Skeleton Tracker

broadcast video → real-time overlay · 4 of 5 clips processed
demo
CV Reconstruction
loading CV stream…
paused · 0 fpsbounces: 0
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