CCTV crash-scene oracle before arrival. A single still (or a few ESP32-CAM frames) goes in; structured findings, a pre-arrival briefing, response decisions, and a bounding-box overlay come out. Runs on the DGX Spark against the local Ollama.
ingest frame(s) ─► Nemotron-VL vision pass ─► evidence gate ─► triage ─► decisions + briefing
(structured JSON, (damage/debris/ (confidence +
confidence + bbox) ped required) confirm banner)
│
bbox overlay ◄───────────────────────────────┘
optional multi-image → 3D (VGGT)
raw photos removed (ESP32 signal contract)
| Task | Model | Backend |
|---|---|---|
| Vision (structured findings + bbox) | nemotron3:33b (Nemotron, multimodal) |
Ollama /api/chat, JSON-schema constrained |
| Triage / confidence gate | nemotron3:33b (configurable → a dedicated Nemotron Nano) |
Ollama /api/chat |
| Multi-image → 3D (optional) | VGGT (feed-forward, unposed) | PyTorch cu130 |
POST /v1/scene/ingest— upload frame(s) →{session_id, n_images}POST /v1/scene/{session_id}/signal— ESP32 "done" signal → runs pipeline, removes photos →SceneReportPOST /v1/scene/analyze— ingest + signal in one call (demo/tests) →SceneReportGET /v1/scene/{session_id}/overlay— annotated still (JPEG)GET /healthz,GET /v1/models/status
python3 -m venv .venv && ./.venv/bin/pip install -r requirements.txt
cp .env.example .env # adjust if needed
./scripts/run.sh # serves on 0.0.0.0:8088./.venv/bin/python -m pytest # fast, mocked (no GPU)
GRIDCLEAR_LIVE=1 ./.venv/bin/python -m pytest tests/test_live_dgx.py # real models on the DGX
# optional: GRIDCLEAR_TEST_IMAGE=/path/to/crash.jpg for a real stillConfig is env-driven (prefix GRIDCLEAR_); see .env.example. Set
GRIDCLEAR_ENABLE_3D=true once torch+vggt are installed to turn on reconstruction.