Files
pickle_vision/README.md
2026-03-26 09:28:49 +07:00

1.6 KiB

Pickle Vision

Real-time referee system for pickleball with 2 CSI cameras on Jetson.

Current Product Scope

Three tabs in the web UI:

  1. Camera - live feeds from both cameras.
  2. Calibration - step-by-step court calibration flow (ROI -> lines -> intersections -> template match -> camera pose).
  3. Trajectory - 3D court + ball trajectory + VAR overlay.

Dagster pipeline has been removed from active project runtime.

Run

Local (Jetson)

python3 jetson/main.py --port 8080

Open: http://<jetson-ip>:8080

Docker

docker-compose up --build

Open: http://localhost:8080

Calibration Flow

Calibration is launched from the Calibration tab with Run Calibration Flow.

Per camera, UI shows each step status:

  1. Court ROI (green mask)
  2. White line segments detection
  3. Segment merge into court lines
  4. Line intersections
  5. Template point match
  6. Camera pose solve (PnP)
  7. Geometry overlay

Output is stored in:

  • jetson/config/cam0_calibration.json
  • jetson/config/cam1_calibration.json

Main Runtime Files

  • jetson/main.py - dual-camera loop, calibration, detection, VAR events
  • src/web/app.py - Flask API + tab endpoints
  • src/web/templates/index.html - 3-tab UI
  • src/calibration/camera_calibrator.py - camera geometry / projection
  • src/physics/trajectory.py - trajectory model
  • src/physics/event_detector.py - close-call logic

Dependencies

Install from requirements.txt.

pip install -r requirements.txt

Notes

  • Calibration is required before trajectory/VAR logic becomes fully useful.
  • Each camera is calibrated independently against known half-court geometry.