| # AVIS β Demo Video Script (~3.5 min) |
|
|
| A tight, honest walkthrough. The thesis: **most teams claim all 7 violations from one photo; |
| a real camera can't, and neither can they β AVIS is the system that knows the difference.** |
|
|
| --- |
|
|
| ## Pre-flight checklist (do this before recording) |
|
|
| - [ ] `.env` set: `HELMET_WEIGHTS=models/helmet/best.pt`, `PLATE_PROVIDER=fastalpr`, |
| `LLM_PROVIDER=gemini`, `GEMINI_MODEL=gemini-2.5-flash`. (Seatbelt optional: `SEATBELT_CHECK=true`.) |
| - [ ] `cd frontend && npm run build` (so FastAPI serves the React app at `/`). |
| - [ ] Start: `venv\Scripts\python.exe -m uvicorn api.main:app --reload` β open http://127.0.0.1:8000 |
| - [ ] Have 3 images ready: **(A)** a clear motorcycle with a no-helmet rider (+plate visible), |
| **(B)** a clean street photo with no violations, **(C)** a dark/blurry photo. |
| - [ ] Quota note: helmet + plates are **free/local**. Triple-riding & seatbelt may make ~1 Gemini |
| call each β fine for a demo; just don't spam re-uploads. |
| - [ ] Optional: pre-run a couple uploads so Analytics has data to show. |
| |
| --- |
|
|
| ## Scene 1 β Hook (0:00β0:25) |
|
|
| **On screen:** title card β the Violation Detectability Matrix (DESIGN.md Β§3). |
|
|
| > "Every hackathon traffic project promises to catch all seven violations from a single photo. |
| > Here's the uncomfortable truth: you physically can't prove wrong-side driving or a red-light |
| > run from one still frame β and a real enforcement camera doesn't either. So we built AVIS: |
| > a system that detects what it *can* prove, and is honest about what it can't." |
|
|
| --- |
|
|
| ## Scene 2 β The idea (0:25β1:00) |
|
|
| **On screen:** the architecture diagram (PROJECT_STATUS.md Β§2). |
| |
| > "AVIS is a hybrid pipeline. Deterministic computer vision does the detecting and measuring. |
| > Detections become an **Evidence Graph** β riders linked to motorcycles, drivers to cars, |
| > plates to vehicles. Pure rules read that graph and propose violations. Each gets a **tier**: |
| > Tier A is provable from appearance, like no-helmet; Tier C needs camera calibration; Tier D |
| > needs video. A vision-language model is used **only as an auditor** to verify ambiguous cases β |
| > never as the detector β and it's allowed to say 'insufficient evidence'. Only Tier A can |
| > auto-confirm. Everything else is routed to AI verification or a human." |
| |
| --- |
| |
| ## Scene 3 β Live demo (1:00β2:40) |
| |
| ### 3a. A real violation (1:00β1:50) |
| **Action:** Analyze tab β upload image **A** (`camera_id = cam_demo`) β wait for cards. |
| |
| > "I'll upload a real street photo. No model training, no cloud GPU." |
| |
| **Point at the result, then open a violation card:** |
| > "It detected the motorcycle and rider, flagged **No Helmet**, and β this is the key part β |
| > it *explains itself*. Here's the **confidence breakdown**: detection, rule, and attribute |
| > scores fused into 0.9-something, above the auto-confirm threshold. The helmet read came from |
| > a **local model β zero API calls**. It cites the **law**: Motor Vehicles Act Β§194D, βΉ1000. |
| > The plate was read by an on-device OCR. And there's a tamper-evident **SHA-256 evidence hash** |
| > and a draft **e-challan**. That's a court-ready evidence package, not a black-box verdict." |
| |
| ### 3b. Abstention is a feature (1:50β2:15) |
| **Action:** upload image **C** (dark/blurry). |
| |
| > "Now a degraded photo. Instead of guessing, the quality gate makes the system **abstain** β |
| > 'I can't judge this fairly.' Abstaining beats a false accusation. That honesty is the whole point." |
| |
| ### 3c. The dashboard (2:15β2:40) |
| **Action:** Analytics tab β then Review queue β then Search. |
| |
| > "Analytics shows violations by type, by outcome, and a **human-review-reduction** number β |
| > the share resolved automatically. The **review queue** is the human-in-the-loop: approve or |
| > reject with a note that's written to the audit trail. And every record is **searchable** by |
| > type, status, or plate." |
| |
| --- |
| |
| ## Scene 4 β Proof & honesty (2:40β3:05) |
| |
| **On screen:** terminal with `pytest -q` (49 passed) and the eval harness file. |
| |
| > "Under the hood: 49 tests, clean lint and types. The evaluation harness reports per-violation |
| > precision/recall/F1, a rule-only-vs-rule-plus-VLM ablation, plate accuracy, and latency β and |
| > it reports Tier A separately, so we never average a hard number into an easy one. We don't show |
| > fabricated accuracy; drop in a labelled set and the numbers are real." |
| |
| *(If you have a labelled `data/eval/` set: show `python -m eval.run` output here instead.)* |
| |
| --- |
| |
| ## Scene 5 β Close (3:05β3:30) |
| |
| **On screen:** the e-challan card + "free / self-hostable" line. |
| |
| > "Everything runs on free, self-hostable components β one `docker compose up` brings up the API, |
| > worker, Postgres, Redis, and object storage. The VLM is the only external piece and it's on a |
| > free tier, behind a provider-agnostic client β swap in a paid model later without touching the |
| > pipeline. AVIS: it detects what it can prove, audits what's ambiguous, abstains on the rest, and |
| > explains every decision. Thanks for watching." |
| |
| --- |
| |
| ## Backup / B-roll |
| - Pre-recorded successful upload (in case of live network/quota hiccups). |
| - Screenshot of a violation detail + e-challan. |
| - The matrix and architecture diagrams as static slides. |
| |