# Data Flow Documentation The AVIS data pipeline operates sequentially, passing an `EvidenceGraph` through 10 distinct processing stages. This ensures determinism and maintainability. ## Pipeline Architecture The pipeline logic is executed by a background worker (or in-process runner) defined in `core/pipeline/`. ```mermaid graph TD Upload([1. Image Upload]) --> Quality[2. Quality Gate] Quality --> Preprocess[3. Preprocessing] Preprocess --> Detect[4. Object Detection] Detect --> Graph[5. Scene Graph Association] Graph --> Attributes[6. Attribute Extraction] Attributes --> Rules[7. Rule Engine] Rules --> Fuse[8. Fuse & Route] Fuse --> VLM[9. VLM Verification] VLM --> Legal[10. Legal Mapping] Legal --> Output([11. Evidence Composer]) ``` ## Stage Descriptions ### 1. Ingestion The image is received via the FastAPI endpoint (`POST /images`). It is saved to MinIO, and a metadata record is created in PostgreSQL with status `pending`. ### 2. Quality Gate (`core/quality/`) Analyzes the image using OpenCV. - Checks image resolution. - Checks variance of Laplacian (for blur). - Checks pixel intensity histograms (for extreme under/overexposure). If the image fails, processing halts, and status becomes `undeterminable`. ### 3. Preprocessing (`core/preprocess/`) Enhances the image non-destructively (original remains untouched). - Applies CLAHE (Contrast Limited Adaptive Histogram Equalization). - Reduces noise. Output: A normalized image matrix passed to the detector. ### 4. Detection (`core/detect/`) Ultralytics YOLOv8/11 models process the image. - Identifies bounding boxes for vehicles, persons, and traffic lights. - Generates raw `Detection` objects. ### 5. Scene Graph (`core/graph/`) Converts raw detections into semantic relationships. - Uses Intersection over Union (IoU) and bounding box geometry. - Associates riders to motorcycles (`rides` edge). - Associates drivers to cars (`drives` edge). Output: An initialized `EvidenceGraph`. ### 6. Attribute Classifiers (`core/attributes/`) Extracts localized details from crops. - Evaluates helmet presence on riders. - Uses `fast-alpr` to crop license plates and run OCR. - Evaluates traffic light state (Red/Amber/Green). ### 7. Rule Engine (`core/rules/`) Deterministic functions evaluate the `EvidenceGraph` to find violations. - Example: The Triple Riding rule checks if a motorcycle node has > 2 `rides` edges. - Creates `Candidate` objects with a rule-evidence score and assigns a Tier. ### 8. Fuse & Route (`core/pipeline/`) Calculates a fused confidence score based on detection, attribute, and rule scores. Assigns a routing action: `auto_confirmed`, `vlm_confirmed`, or `human_review`. ### 9. VLM Verify (`core/llm/`) Triggered ONLY if the route is `vlm_confirmed`. - Constructs a prompt and sends the specific image crop to the Vision-Language Model. - Parses the JSON response to either confirm the violation or change the route to `abstain`/`human_review`. ### 10. Legal Mapping (`core/legal/`) Deterministic lookup. Maps the violation type (e.g., `HELMET_NON_COMPLIANCE`) to the Indian Motor Vehicles Act section and assigns the corresponding fine amount. ### 11. Evidence Composer Finalizes the output. - Generates an annotated image overlay (bounding boxes, reasons, plate info). - Computes a SHA-256 hash of the original image for tamper evidence. - Saves the final `Violation` JSON document to PostgreSQL.