saikatsam11/traffic-rule-violation-detection-engine
GitHub: saikatsam11/traffic-rule-violation-detection-engine
基于 YOLOv8 和 OCR 的四阶段计算机视觉流水线,自动从街景图像中检测摩托车骑手未戴头盔等违规行为并生成结构化报告。
Stars: 0 | Forks: 0
# 🛵 交通违规检测引擎
## 📌 概述
本项目是一个四阶段计算机视觉 pipeline,用于处理街景图像并生成结构化的违规报告。它集成了目标检测、头部区域分类、基于 OCR 的车牌识别以及基于规则的汇总——每个模块仅需一次前向传播。
## 🏗️ 架构
```
Input Image
│
▼
┌─────────────────────────────────┐
│ Module 1: Two-Wheeler Detector │ YOLOv8m — detects motorcycles + riders
│ + Camera Angle Detection │ Adaptive: top-down vs street-level
└───────────────┬─────────────────┘
│ VehicleInstance (crop, rider boxes, camera_angle)
▼
┌─────────────────────────────────┐
│ Module 2: Helmet Detector │ YOLOv8m_helmet — per-rider head crop
│ + Angle-Adaptive Head Region │ Angle-specific confidence thresholds
└───────────────┬─────────────────┘
│ HelmetResult (per_rider_status)
▼
┌─────────────────────────────────┐
│ Module 3: Plate Reader │ YOLOv8s plates + FastPlateOCR (ONNX)
└───────────────┬─────────────────┘
│ PlateResult (license_plate, ocr_confidence)
▼
┌─────────────────────────────────┐
│ Module 4: Violation Engine │ Rule-based aggregation
└───────────────┬─────────────────┘
│
▼
ViolationReport (JSON / CSV)
```
## 📁 目录结构
```
/
├── solution.py # Submission entry point
├── test_pipeline.py # End-to-end test script with visualisation
├── pipeline/
│ ├── __init__.py
│ ├── two_wheeler_detector.py # Module 1 — motorcycle + rider detection
│ ├── helmet_detector.py # Module 2 — per-rider helmet classification
│ ├── plate_reader.py # Module 3 — plate detection + OCR
│ └── violation_engine.py # Module 4 — rule-based violation aggregation
├── models/ # See model download instructions below
│ ├── yolov8m.pt # COCO YOLOv8m (Module 1)
│ ├── yolov8m_helmet.pt # Roboflow helmet model (Module 2)
│ ├── yolov8s_plates_final.pt # Fine-tuned plate detector (Module 3)
│ ├── global_mobile_vit_v2_ocr.onnx # FastPlateOCR (Module 3)
│ └── global_mobile_vit_v2_ocr_config.yaml
├── requirements.txt
└── README.md
```
## ⚙️ 关键技术特性
| 特性 | 详情 |
|---|---|
| **骑手与摩托车关联** | 全身 IoP(Intersection over Person area)——对路面高度的汽车乘员具有鲁棒性 |
| **摄像头角度检测** | 根据摩托车的长宽比自动检测是俯视还是路面平视视角 |
| **自适应头部区域** | 头部裁剪比例和置信度阈值会根据检测到的摄像头角度进行缩放 |
| **头盔分类** | 针对每个骑手,设有按类别的置信度阈值和以安全为先的平局裁决机制 |
| **车牌 OCR** | YOLOv8s 车牌检测器 + FastPlateOCR ONNX runtime |
| **违规规则** | 未戴头盔(任意骑手)、三人共乘(≥3名骑手),并带有标志传播机制 |
## 🚀 安装与使用
### 1. 安装依赖
```
pip install -r requirements.txt
```
### 2. 下载预训练模型
**[⬇️ 下载模型 (~126 MB)](https://iiitbac-my.sharepoint.com/:f:/g/personal/saikat_pal_iiitb_ac_in/IgBW2uu5ggJmQJnLYj9MvoDrAbFdMUoFYPaoK0Ku4YOIim0?e=r0wWev)**
```
models/
├── yolov8m.pt (~50 MB)
├── yolov8m_helmet.pt (~50 MB)
├── yolov8s_plates_final.pt (~21 MB)
├── global_mobile_vit_v2_ocr.onnx (~4.8 MB)
└── global_mobile_vit_v2_ocr_config.yaml
```
### 3. 运行单张图像
```
python solution.py
```
### 4. 运行带有可视化的端到端测试
```
python test_pipeline.py
```
## 📊 输出
每辆检测到的车辆都会生成一个 `ViolationReport`:
```
{
"vehicle_id": 0,
"license_plate": "DL3CAV2022",
"plate_valid": true,
"violations": ["no_helmet"],
"num_riders": 1,
"per_rider_status": ["no_helmet"],
"detection_confidence": 0.81,
"ocr_confidence": 0.74,
"flags": []
}
```
报告通过 `report_to_csv()` 导出为 CSV 文件。
## 🧠 使用模型
| 模型 | 来源 | 用途 |
|---|---|---|
| `yolov8m.pt` | Ultralytics COCO | 行人 + 摩托车检测 |
| `yolov8m_helmet.pt` | Roboflow Universe | 佩戴/未佩戴头盔分类 |
| `yolov8s_plates_final.pt` | 微调模型 | 印度车牌检测 |
| `global_mobile_vit_v2_ocr.onnx` | FastPlateOCR | 车牌字符识别 |
## 📦 环境要求
```
ultralytics
opencv-python
numpy
onnxruntime
fast-plate-ocr
```
标签:OCR, YOLO, 交通违章检测, 图像处理, 目标检测, 自动驾驶辅助, 计算机视觉, 逆向工具