# WaslaVision — Multi-Camera Tunisian License Plate Recognition
Real-time license plate recognition pipeline for the **Nabeul Bus Station**.
Processes 8 Hikvision RTSP cameras simultaneously at 30 fps using YOLOv8s
TensorRT batch inference + PaddleOCR + gRPC output.
## Station Layout
```
4 physical lanes × 2 cameras each (LEFT / RIGHT) = 8 cameras → 8 destinations
Camera 1L → Destination 1 Camera 1R → Destination 2
Camera 2L → Destination 3 Camera 2R → Destination 4
Camera 3L → Destination 5 Camera 3R → Destination 6
Camera 4L → Destination 7 Camera 4R → Destination 8
```
## Architecture
```
┌─────────────────────────────────────────────────────────────────┐
│ main.py (entry point) │
├─────────────────────────────────────────────────────────────────┤
│ │
│ 8 × CameraStream threads (producers) │
│ │ RTSP → FFmpeg → decode → push to shared queue │
│ └──────────────────┬─────────────────────────────────────── │
│ ▼ queue.Queue │
│ ┌──────────────┐ │
│ │ BatchProcessor│ (single consumer thread) │
│ │ YOLO TensorRT │ batch=8 inference │
│ └──────┬───────┘ │
│ │ │
│ ┌────────────┼────────────┐ │
│ ▼ ▼ ▼ │
│ Per-camera pipeline (×8): │
│ VirtualZoneFilter → StabilityCheck → Crop → OCR → Voter │
│ │ │
│ ▼ │
│ gRPC → Go queue-service │
└────────────────────── …