Divy005/Traffic-Rule-Violation-Detection

GitHub: Divy005/Traffic-Rule-Violation-Detection

这是一个全自动多阶段计算机视觉系统,用于检测摩托车骑行者的头盔佩戴、超载行为和车牌识别,以解决交通违规执法的自动化挑战。

Stars: 0 | Forks: 0

# 🚦 交通违规检测系统(离线流水线) [![Python](https://img.shields.io/badge/Python-3.9+-3776AB?style=flat&logo=python)](https://www.python.org/) [![PyTorch](https://img.shields.io/badge/PyTorch-2.0+-EE4C2C?style=flat&logo=pytorch)](https://pytorch.org/) [![YOLOv8](https://img.shields.io/badge/YOLOv8-Ultralytics-006400?style=flat)](https://github.com/ultralytics/ultralytics) [![PaddleOCR](https://img.shields.io/badge/PaddleOCR-Offline_OCR-008080?style=flat)](https://github.com/PaddlePaddle/PaddleOCR) [![OpenCV](https://img.shields.io/badge/OpenCV-Image_Processing-5C3EE8?style=flat&logo=opencv)](https://opencv.org/) [![License](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE) ## 📸 可视化效果展示 以下是我们改进流水线生成的一些实际检测和分类输出结果: ### 1. 多车三人骑乘 & 头盔违规检测 高度精确地追踪多名骑行者,并结合车牌提取,即时检测头盔违规行为: ![多车检测](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/6a3e51f4f2110835.jpg) ### 2. 高精度印度车牌捕获 稳健识别标准高安全性车牌(HSRP),并具备离线OCR字符映射功能: ![车牌捕获](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/771e20f6f1110836.jpg) ## 🎯 问题陈述 全球交通管理当局在两轮车安全合规执法方面面临巨大挑战: ### 执法瓶颈 手动监控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, 二轮车监控, 交通安全, 交通管理, 交通违规检测, 凭据扫描, 图像处理, 头盔检测, 安全合规, 对象检测, 无后门, 智能交通系统, 机器学习, 深度学习, 离线处理, 离线管道, 网络代理, 计算机视觉, 车牌识别, 违规识别, 逆向工具, 骑行人数检测