| # AVIS Documentation |
|
|
| Welcome to the general documentation for **AVIS (Automated Violation Intelligence System)**, codename *Gridlock*. |
|
|
| ## 1. Project Overview |
|
|
| AVIS is a hybrid traffic violation detection system designed to be rigorous about evidence. Instead of claiming perfect accuracy for every type of violation from a single photo, AVIS intelligently distinguishes between: |
| - **Appearance Facts**: Provable from a single frame (e.g., helmet non-compliance, triple-riding). |
| - **Spatial Facts**: Provable using per-camera geometric calibration (e.g., stop-line violation). |
| - **Temporal Facts**: Usually requires motion or video, meaning a still frame only generates a "candidate" (e.g., wrong-side driving, running a red light). |
|
|
| By classifying violations into evidence-sufficiency tiers, AVIS provides court-ready, explainable verdicts that degrade gracefully rather than outputting false positives. |
|
|
| ## 2. Setup and Installation |
|
|
| ### Local Development (Zero Infrastructure) |
|
|
| This mode runs the entire pipeline locally using SQLite for storage and in-process execution (no Redis needed). Ideal for rapid development and testing. |
|
|
| ```bash |
| # 1. Create a virtual environment |
| python -m venv .venv |
| # Activate it (Windows PowerShell) |
| .venv\Scripts\Activate.ps1 |
| # (Linux/macOS) source .venv/bin/activate |
| |
| # 2. Install core dependencies |
| pip install -r requirements.txt |
| |
| # 3. Setup configuration |
| cp .env.example .env |
| |
| # 4. Run the API server |
| uvicorn api.main:app --reload |
| ``` |
| Navigate to `http://127.0.0.1:8000` to access the API. |
|
|
| ### Full Stack Deployment (Docker) |
|
|
| For production-credible environments or advanced testing with queue workers, Postgres, and MinIO: |
|
|
| ```bash |
| docker compose up --build |
| ``` |
| This single command spins up: |
| - The FastAPI Backend API (`:8000`) |
| - PostgreSQL Database (`:5432`) |
| - Redis Queue (`:6379`) |
| - MinIO Object Storage (`:9000`, console `:9001`) |
|
|
| ### Hugging Face Spaces Deployment (Docker) |
|
|
| The project includes a `Dockerfile` pre-configured to meet Hugging Face Spaces requirements (runs on port `7860`, executes as a non-root `user` with UID 1000). |
|
|
| 1. Create a new **Docker Space** on Hugging Face. |
| 2. Push this repository to the Space. |
| 3. Configure your Space secrets in the settings: |
| - `GEMINI_API_KEY`: Your Gemini Flash API key. |
| 4. The space will automatically build and deploy. Data will be stored safely in the `/home/user/app/data` directory using SQLite. |
|
|
| ## 3. Configuration |
|
|
| The system is configured primarily via the `.env` file (parsed by Pydantic Settings in `core/config.py`). |
| Key variables include: |
| - `DATABASE_URL`: Connection string (defaults to `sqlite:///avis.db` for local dev). |
| - `LLM_PROVIDER`: `gemini` (default) or `null` to bypass VLM verification. |
| - `GEMINI_API_KEY`: API key for Gemini Flash. |
| - `PLATE_PROVIDER`: Choose `fastalpr` for license plate detection. |
|
|
| ## 4. Testing and Evaluation |
|
|
| ### Unit Testing |
| The project uses `pytest` for rigorous unit testing of rules, parsing, and pipeline flow without requiring heavy machine learning models to be loaded. |
| ```bash |
| pytest -q |
| ``` |
|
|
| ### Static Analysis |
| Maintain code quality with `ruff` and `mypy`. |
| ```bash |
| ruff check . |
| mypy core/ api/ |
| ``` |
|
|
| ### ML Evaluation |
| To evaluate the pipeline's performance metrics (Precision, Recall, F1 score, OCR accuracy, and latency), use the dedicated evaluation script: |
| ```bash |
| python -m eval.run eval/sample_dataset.json |
| ``` |
| This script performs a rule-only vs. rule+VLM ablation study, proving the efficacy of the hybrid approach in reducing false positives. |
|
|
| ## 5. Development Guidelines |
|
|
| - **Add New Violations**: Add the violation logic as a deterministic rule function in `core/rules/` and map it to a Tier in the Rule Engine. Do not use ML models directly within the rule functions. |
| - **Dependency Management**: Update `requirements.txt` carefully, keeping heavy ML libraries (`ultralytics`, `fast-alpr`) separated in documentation if possible from core API dependencies. |
| - **Type Safety**: Pydantic schemas in `core/schemas/` are the single source of truth. Rely on the `EvidenceGraph` to pass detection data between stages. |
|
|