Divy005/Traffic-Rule-Violation-Detection
GitHub: Divy005/Traffic-Rule-Violation-Detection
这是一个全自动多阶段计算机视觉系统,用于检测摩托车骑行者的头盔佩戴、超载行为和车牌识别,以解决交通违规执法的自动化挑战。
Stars: 0 | Forks: 0
# 🚦 交通违规检测系统(离线流水线)
[](https://www.python.org/)
[](https://pytorch.org/)
[](https://github.com/ultralytics/ultralytics)
[](https://github.com/PaddlePaddle/PaddleOCR)
[](https://opencv.org/)
[](LICENSE)
## 📸 可视化效果展示
以下是我们改进流水线生成的一些实际检测和分类输出结果:
### 1. 多车三人骑乘 & 头盔违规检测
高度精确地追踪多名骑行者,并结合车牌提取,即时检测头盔违规行为:

### 2. 高精度印度车牌捕获
稳健识别标准高安全性车牌(HSRP),并具备离线OCR字符映射功能:

## 🎯 问题陈述
全球交通管理当局在两轮车安全合规执法方面面临巨大挑战:
### 执法瓶颈
手动监控CCTV摄像头或路面检查站资源密集且易出错。检测违规行为需要实时检查多个约束条件:
- 🪔 **头盔检测** — 检查摩托车上的每位骑行者是否佩戴头盔。
- 👥 **骑行者人数检查** — 标记危险的三人骑乘违规行为(>2名骑行者)。
- 🏷️ **车牌提取** — 高精度车牌检测和字符转录(OCR),以实现自动开罚单。
### 关键的计算机视觉挑战
❌ **背景干扰**:站在摩托车后面的行人常被错误地归类为骑行者。
❌ **头部分割噪声**:由于视觉背景杂乱,标准分类器在评估全身骑行者裁剪区域时表现不佳。
❌ **车牌质量差**:低对比度、模糊或有角度的车牌会导致OCR转录失败率高。
❌ **字符混淆**:在不同光照条件下,标准OCR引擎经常混淆数字和字母(例如,`0` $\leftrightarrow$ `O`,`1` $\leftrightarrow$ `I`,`8` $\leftrightarrow$ `B`)。
## ✨ 我们的解决方案:全自动多阶段计算机视觉流水线
本系统通过结合**深度学习检测**、**几何空间滤波器**和**自定义OCR后文本纠错引擎**的先进多阶段流水线,克服了典型基线的局限性。
### 🚀 核心能力
* **足部区域空间滤波器**:一种伪深度线索,确保行人/旁观者仅当其足部/座位坐标与摩托车边界框紧密映射时,才会被关联为骑行者。
* **异常高度一致性检查**:通过计算关联骑行者的中位高度并过滤异常值,自动忽略旁观者。
* **头部感兴趣区域分类**:裁剪骑行者图像顶部**42%(仅头部ROI)** 进行头盔分类,仅当分类置信度较低时才回退到全身评估。
* **增强型车牌处理**:对车牌裁剪区域进行放大,应用**CLAHE**(对比度限制自适应直方图均衡化)和**反锐化掩膜锐化**以在OCR前优化质量。
* **HSRP车牌规范化**:自动去除全息图伪影(如`"IND"`或`"ND"`),并使用基于印度车牌格式(`LL DD LL DDDD`)的位置感知**字符混淆矩阵**纠正字符误识别。
* **横向车牌回退**:如果标准水平OCR失败,流水线会自动将裁剪图像顺时针旋转90°并重试执行。
## 🏗️ 系统架构
```
┌────────────────────────────────────────────────┐
│ INPUT FRAME/IMAGE │
└───────────────────────┬────────────────────────┘
│
▼
┌────────────────────────────────────────────────┐
│ YOLOv8 VEHICLE & RIDER DETECTOR │
│ Identifies Motorcycles and Person Crops │
└───────────────────────┬────────────────────────┘
│
▼
┌────────────────────────────────────────────────┐
│ CUSTOM NON-MAXIMUM SUPPRESSION (NMS) │
│ Eliminates Heavily Overlapping Vehicle Boxes │
└───────────────────────┬────────────────────────┘
│
▼
┌────────────────────────────────────────────────┐
│ SPATIAL GEOMETRY & CONSISTENCY FILTER │
│ • Foot-Zone Seat Overlaps │
│ • Outlier Height-Consistency Check │
└──────┬──────────────────────────────────┬──────┘
│ │
▼ (Rider Head Region) ▼ (Vehicle Extended Region)
┌──────────────────────────────┐ ┌──────────────────────────────┐
│ HEAD-ROI CROPPING │ │ LICENSE PLATE DETECTOR │
│ Top 42% Head Area │ │ license-plate-finetune-v1x │
└──────────────┬───────────────┘ └──────────────┬───────────────┘
│ │
▼ (Finetuned YOLOv8) ▼ (Crop + Pad)
┌──────────────────────────────┐ ┌──────────────────────────────┐
│ HELMET COMPLIANCE ENGINE │ │ PLATE PRE-PROCESSING │
│ Classifies Helmet/No Helmet│ │ CLAHE + Sharpen + Upscaling │
└──────────────┬───────────────┘ └──────────────┬───────────────┘
│ │
│ ▼ (Offline PaddleOCR)
│ ┌──────────────────────────────┐
│ │ PADDLEOCR INFERENCE ENGINE │
│ │ 90-Deg Rotated Crop Fallback │
│ └──────────────┬───────────────┘
│ │
│ ▼ (Format Regularization)
│ ┌──────────────────────────────┐
│ │ POST-OCR RECTIFICATION │
│ │ Character Confusion Mapping │
│ └──────────────┬───────────────┘
│ │
└────────────────┬─────────────────┘
│
▼
┌────────────────────────────────────────────────┐
│ VIOLATION COMPLIANCE ENGINE │
│ Filters and Maps Violation Output Records │
└───────────────────────┬────────────────────────┘
│
▼
┌────────────────────────────────────────────────┐
│ SPEC-COMPLIANT JSON & EXPORT │
│ Generates Annotated Image & Report │
└────────────────────────────────────────────────┘
```
## 🛠️ 技术栈
| 技术 | 用途 | 关键细节 / 版本 |
|-----------|---------|-----------------------|
| **Python** | 主要开发语言 | 3.9+ |
| **YOLOv8** | 车辆、骑行者、头盔和车牌检测 | Ultralytics 框架 |
| **PaddleOCR** | 离线OCR引擎 | en_PP-OCRv3_det, en_PP-OCRv4_rec, ch_ppocr_mobile_v2.0_cls |
| **OpenCV** | 图像处理、CLAHE、锐化、NMS | cv2 (开源计算机视觉) |
| **NumPy** | 数学运算和数组格式化 | 快速几何映射 |
| **LaTeX** | 学术和技术报告编译 | `report.tex` 使用系统资源 |
## 📂 项目结构
```
Final_assignment/
│
├── .gitignore # Structured Git ignore rules (omits massive weights & envs)
├── README.md # Project documentation (You are here!)
├── demo_results/ # Showcase images (integrated into GitHub)
│ ├── annotated_2.jpg
│ ├── annotated_BikesHelmets122_png.rf.741af70f3f439de00ae9a3603a3eefdc.jpg
│ ├── annotated_Screenshot 2026-05-14 210730.jpg
│ └── annotated_WhatsApp Image 2026-05-14 at 9.40.32 PM.jpg
│
├── new_approach/ # Optimized Current Production Pipeline
│ ├── solution.py # TrafficViolationDetector class (Evaluator entrypoint)
│ ├── run_inference.py # Visual batch inference pipeline & compliance exporter
│ ├── requirements.txt # Pinned Python package dependencies
│ ├── report.tex # LaTeX source code for the technical project report
│ ├── report_assets/ # Visual graphs, diagrams & success/failure crops
│ └── models/ # Deep learning model weights directory (kept local)
│
├── baseline_divy_dilksh/ # Production Baseline Pipeline (Divy & Dilksh)
│ ├── solution.py # Baseline detection pipeline
│ ├── requirements.txt
│ ├── report.pdf # Compiled baseline technical report
│ └── README.md # Baseline walkthrough documentation
│
└── baseline_alternative/ # Alternative Baseline Pipeline
├── solution.py
├── requirements.txt
└── evaluate.py # Local simulator/runner for baseline validation
```
## 🚀 快速开始
### 🔧 第一步:环境设置
强烈建议使用Python 3.9、3.10或3.11在独立的虚拟环境中运行此项目:
```
# 克隆仓库
git clone https://github.com/Divy005/Traffic-Rule-Violation-Detection.git
cd Traffic-Rule-Violation-Detection
# 创建虚拟环境
python -m venv .venv
# 激活虚拟环境
# Windows:
.venv\Scripts\activate
# macOS/Linux:
source .venv/bin/activate
# 安装所需的深度学习和处理包
pip install -r new_approach/requirements.txt
```
### 📦 第二步:模型权重安装
为确保低延迟和在断网环境中的兼容性,请将所有必需的模型权重直接放入本地化的`models`目录中:
确保你的 `new_approach/models/` 文件夹包含:
1. `yolov8m.pt` 或 `yolov8s.pt` (摩托车 + 骑行者定位)
2. `helmet_best.pt` (头盔状态分类)
3. `license-plate-finetune-v1x.pt` (车牌提取)
4. `paddleocr_weights/` (包含PaddleOCR的检测、识别和分类推理子文件夹)
## 📡 API参考
`TrafficViolationDetector` 是完全自包含的,并遵循标准评估器协议。
### 编程用法
```
from new_approach.solution import TrafficViolationDetector
# 初始化模型(自动定位搜索根路径内的权重)
detector = TrafficViolationDetector(model_dir="new_approach/models")
# 对输入图像运行离线预测
result = detector.predict("path/to/traffic_frame.jpg")
print(result)
```
### 符合规范的输出格式
仅违规车辆(定义为`num_riders > 2`或`helmet_violations > 0`)会返回在输出JSON中:
```
{
"violations": [
{
"num_riders": 3,
"helmet_violations": 2,
"license_plate": "GJ01AB1234"
}
]
}
```
*注意:如果检测到车牌但无法通过PaddleOCR引擎可靠解析,则`license_plate`默认为`null`。*
## 🤖 深入了解:多阶段处理流水线
我们的流水线按顺序执行结构化的几何和深度学习节点,以提高数据准确性:
```
┌─────────────────────────────────────────────────────────────┐
│ 1. ENHANCED YOLO DETECTION + LOCAL NMS │
│ Runs YOLOv8 to find Motorcycles, Persons, and Plates. │
│ Implements spatial vehicle-NMS (IoU threshold = 0.50) to │
│ eliminate overlapping redundant detections. │
└────────────────────────┬────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ 2. FOOT-ZONE SEAT FILTERING & HEIGHT CONSISTENCY │
│ maps the bottom center of each person crop to the vehicle. │
│ Limits association strictly to the seat/feet area. │
│ Compares relative heights within the group to remove │
│ bystander pedestrians (anomaly tolerance < 0.60). │
└────────────────────────┬────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ 3. HEAD-ROI HELMET CLASSIFICATION │
│ Extracts the top 42% of the rider crop (Head ROI). │
│ Passes Head-crop into 'helmet_best.pt'. │
│ Fallback: If no prediction is found, runs on full body crop.│
└────────────────────────┬────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ 4. LICENSE PLATE OVERLAP & OCR PREPROCESSING │
│ Associates the closest plate bounding box with the vehicle. │
│ Upscales plate crop, applies CLAHE contrast equalization, │
│ and uses unsharp-mask filtering to optimize readability. │
└────────────────────────┬────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ 5. RECTIFY CHARACTERS & REMOVE HOLOGRAM ARTIFACTS │
│ OCR is executed via PaddleOCR. │
│ If plate text is short/blurry, retries rotated 90° crop. │
│ Strips "IND" / "ND" text artifacts. │
│ Runs character substitution matrix for HSRP format layout. │
└─────────────────────────────────────────────────────────────┘
```
## 📊 评估与验证运行
### 运行可视化批量推理
你可以轻松处理整个测试图像目录,渲染高可见度边界框,并导出单独的合规JSON文件:
```
# 对测试文件夹运行批量推理
python new_approach/run_inference.py --src test_images/ --out new_approach/output/
```
### 可视化界面输出
`run_inference.py` 将带有丰富注释的帧保存到输出目录:
- **绿色边界框**:完全合规的两轮车。
- **红色边界框**:违规两轮车(包含头盔违规或三人骑乘)。
- **橙色边界框**:单个骑行者。
- **车牌青色标签**:标注转录和校正后的车牌号(例如 `LP: MH12AB1234`)。
- **违规横幅**:覆盖在摩托车上方,发光标签指示 `!! 头盔违规 !!` 或 `!! 三人骑乘 !!`。
### 团队成员
* **Divy Dobariya** (学号: `BT2024225`)
* **Dilksh Sharma** (学号: `BT2024253`)
## 📄 许可证
本项目采用 **MIT 许可证** 授权 - 详情请参阅 [LICENSE](LICENSE) 文件。
标签:Apex, OCR, OpenCV, PaddleOCR, Python, PyTorch, YOLOv8, 二轮车监控, 交通安全, 交通管理, 交通违规检测, 凭据扫描, 图像处理, 头盔检测, 安全合规, 对象检测, 无后门, 智能交通系统, 机器学习, 深度学习, 离线处理, 离线管道, 网络代理, 计算机视觉, 车牌识别, 违规识别, 逆向工具, 骑行人数检测