This repository is structured to support both planning and execution for a camera-based vision service that begins on Jetson with a narrow bottle-pickup workflow and later integrates into a separate application stack.
docs/roadmap/contains phase plans and project roadmap documentsdocs/architecture/contains design, workflow, and structural guidancedocs/implementation/contains revision-by-revision implementation notessite/contains the Docusaurus documentation sitebackend/is reserved for the vision service codeinfra/local/contains local development infrastructure
Read the roadmap documents first.
Use the architecture docs to keep technical structure and workflow consistent.
As work begins, create implementation notes under docs/implementation/ so each revision has a clear scope, testing plan, and result summary.
- use
uvfor Python environment and dependency management - keep modules separated by responsibility
- add tests from the beginning
- avoid flattening the whole project into scripts
- document each implementation revision explicitly
- keep this repository focused on the vision service and documentation, not duplicated frontend or RAG code
To enable local branch and commit validation plus backend lint/test checks:
make setup-git-hooksmake new-branch PHASE=00 REV=03 SLUG=camera-pipeline
The hooks enforce:
- phase branch names like
phase-00-rev-02-foundation - phase commit subjects like
phase-0 rev-02: frame model and camera abstraction ruffandpyteston staged backend changes
docs/roadmap/01-project-overview.mddocs/roadmap/02-phase-0-foundation.mddocs/roadmap/02-phase-0-foundation-detailed.mddocs/roadmap/03-phase-1-detection.md
AGENTS.mdcontains repository-local instructions for coding agents such as Codex.github/copilot-instructions.mdcontains repository-local instructions for GitHub Copilot
The project docs are rendered with Docusaurus from the content under docs/.
Typical commands:
cd site && npm startcd site && npm run build
Use the Jetson config as the main RTSP validation path.
Example:
cd backend
export TAPO_RTSP_URL='rtsp://username:password@camera-ip:554/stream1'
uv run python scripts/validate_camera_setup.py --config configs/jetson.yaml --max-frames 300After a run, inspect:
backend/artifacts/frames/
If you want a custom session label:
uv run python scripts/validate_camera_setup.py \
--config configs/jetson.yaml \
--max-frames 300 \
--session-name tapo-validation-01Install detection dependencies, export the RTSP URL, and run the baseline detector:
cd backend
uv sync --extra dev --extra camera --extra detection
export TAPO_RTSP_URL='rtsp://USER:PASSWORD@CAMERA_IP:554/stream1'
uv run python scripts/run_detection.py --config configs/jetson.yaml --max-frames 300For tuning and model comparison:
uv run python scripts/benchmark_detection.py --config configs/jetson.yaml --max-frames 300
uv run python scripts/benchmark_detection.py --config configs/jetson.yaml --max-frames 300 --model-name yolov8s.ptWrite automated baseline reports:
uv run python scripts/benchmark_detection.py \
--config configs/jetson.yaml \
--max-frames 300 \
--write-baselineOr attach notes while writing the baseline:
uv run python scripts/benchmark_detection.py \
--config configs/jetson.yaml \
--max-frames 300 \
--model-name yolov8s.pt \
--write-baseline \
--baseline-notes "Evening light test, review bottle boxes carefully."Inspect generated outputs:
backend/artifacts/baselines/{session_name}/detection-baseline.jsonbackend/artifacts/baselines/{session_name}/detection-baseline.md
The automated quality gate is only a first-pass signal. Visual review is still required to confirm the boxes are actually correct.