73 lines
1.6 KiB
Markdown
73 lines
1.6 KiB
Markdown
# 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)
|
|
|
|
```bash
|
|
python3 jetson/main.py --port 8080
|
|
```
|
|
|
|
Open: `http://<jetson-ip>:8080`
|
|
|
|
### Docker
|
|
|
|
```bash
|
|
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`.
|
|
|
|
```bash
|
|
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.
|