一、项目背景:为什么要做机动车违规检测?
现在路上的车越来越多,2021年全国机动车保有量已达3.95亿辆,但随之而来的是违规行为(如压实线、闯红灯、逆行)导致的交通事故——2020年全国因交通事故伤亡超31万人,直接财产损失超13亿元。
传统交通管理靠“人工看监控”,有两个致命问题:
- 效率低:一个监控员每天要盯10+小时视频,容易漏检;
- 实时性差:违规行为发生后,往往要等几小时甚至几天才能追溯取证。
我的毕业设计就是用计算机视觉解决这些问题:基于YOLOv4检测车辆、DeepSort跟踪轨迹、OpenCV识别违规,实现“实时检测+自动取证”,违规识别率达98%以上,能帮交警快速定位违规车辆,还能减少人工成本,让交通管理更智能。
二、核心技术栈:从检测到违规识别的全链路
整个系统围绕“车辆检测→轨迹跟踪→违规识别”展开,技术栈兼顾精度和实时性,用Python就能实现,本科生可复现:
| 技术模块 | 具体工具/算法 | 核心作用 |
|---|---|---|
| 车辆检测 | YOLOv4(含Ghost优化) | 快速定位车辆:从监控视频帧中检测出汽车、公交车等目标,输出边界框和类别; |
| 多目标跟踪 | DeepSort | 跟踪车辆轨迹:给每个车辆分配唯一ID,即使短暂遮挡也能持续跟踪; |
| 违规识别 | OpenCV图像处理 | 判断违规行为:用多边形标注(如实线区域),检测车辆是否压线、逆行; |
| 数据集 | KITTI+UA-DETRAC+Veri-776 | 保证泛化性:KITTI/UA-DETRAC练检测,Veri-776练跟踪,覆盖高速、城市场景; |
| 开发环境 | Python+PyTorch+OpenCV | 便捷落地:PyTorch训模型,OpenCV做图像预处理,无需复杂硬件; |
| 性能评估 | 识别率/漏检率/实时性 | 验证效果:在高速、城市道路视频上测试,对比人工统计结果; |
三、项目全流程:4步实现机动车违规检测
3.1 第一步:数据准备——三类数据集预处理
要训出可靠的模型,先得处理好数据,分3类核心数据集:
3.1.1 车辆检测数据集(KITTI+UA-DETRAC)
- KITTI:国际通用自动驾驶数据集,含市区、高速场景,标注了车辆3D边界框,但格式是激光雷达坐标系,需转成图像像素坐标;
- UA-DETRAC:含北京、天津24个地点的14万帧视频,标注了8250辆车(轿车、公交、货车),但图片尺寸不一,需统一缩放至640×640;
- 预处理操作:
- 提取两类数据集中的“车辆”标注,过滤行人、自行车等无关目标;
- 用LabelImg将标注格式转成YOLO格式(class x_center y_center w h);
- 按8:2划分训练集和测试集,用马赛克增强(随机拼4张图)丰富背景。
3.1.2 车辆跟踪数据集(Veri-776)
DeepSort默认用“人重识别”模型,不适合车辆,需用Veri-776训车辆外观模型:
- Veri-776:含776辆车的5万张图,覆盖不同角度、光照,标注了车辆颜色、品牌;
- 预处理操作:
- 统一图片尺寸为128×256(适合外观特征提取);
- 按车辆ID分文件夹,每个ID下取80%图做训练、20%做测试;
- 用随机翻转、亮度调整增强数据,避免过拟合。
3.1.3 违规场景数据集(自建)
针对“压实线变道”“逆行”等场景,自建数据集:
- 采集:从城市主干道监控视频中截取1000帧,标注“实线区域”“车道方向”;
- 标注:用OpenCV画多边形(polygon)标记实线位置,如城市道路实线标注为
[[890,370], [844,471], ..., [896,370]]; - 用途:用于测试违规识别算法的准确性。
3.2 第二步:车辆检测——YOLOv4-Ghost优化模型
YOLOv4检测快,但参数量大,用Ghost卷积优化,在保证精度的同时减少计算量:
3.2.1 网络结构优化
- 主干网络:用CSPDarknet53,加入Ghost卷积(将1个3×3卷积拆成1个1×1卷积+1个廉价操作),参数量减少40%;
- 颈部层:保留SPP模块(多尺度最大池化),融合19×19、38×38、76×76特征图,兼顾大/小车辆检测;
- 输出层:用CIoU损失函数(考虑边界框重合度、中心点距离、宽高比),提升定位精度。
3.2.2 模型训练(PyTorch)
- 参数设置:输入尺寸640×640,batch size=64(YOLOv4s/m/l)、32(YOLOv4x),迭代300次,初始学习率0.001,用COCO预训练权重初始化;
- 训练结果:YOLOv4-Ghost在KITTI测试集上的mAP达89%,比原始YOLOv4快15%,单帧检测时间<0.05秒(20FPS),满足实时需求。
3.2.3 检测效果
在高速监控视频中,能准确检测出100米外的小型车辆,漏检率<2%,误检主要来自“与背景色相近的车辆”(如白色车在雪地场景)。
3.3 第三步:车辆跟踪——DeepSort多目标跟踪
检测出车辆后,用DeepSort跟踪,避免同一辆车被重复计数:
3.3.1 跟踪流程
- 外观特征提取:用ResNet50提取车辆外观特征(如颜色、轮廓),每个车辆对应1个256维特征向量;
- 运动预测:用卡尔曼滤波预测车辆下一帧的位置,处理短暂遮挡;
- 数据关联:计算“预测位置与检测位置的IOU”+“外观特征相似度”,匹配同一车辆,分配唯一track_id。
3.3.2 模型训练
- 训练环境:GPU(NVIDIA Quadro P6000),迭代100次,损失函数用三元组损失(Triplet Loss);
- 训练结果:在Veri-776测试集上的top1准确率达92%,跟踪成功率(MOTA)达88%,能处理“车辆交汇”“短暂遮挡”场景。
3.3.3 跟踪效果
在城市道路视频中,对30辆同时行驶的车辆,跟踪持续率>95%,即使有公交车遮挡小轿车,10帧内也能重新匹配track_id。
3.4 第四步:违规识别——OpenCV图像处理
基于检测和跟踪结果,用OpenCV识别“压实线变道”“逆行”等违规:
3.4.1 压实线变道识别(核心场景)
- 标注实线区域:用多边形(polygon)标记道路实线,生成掩码图(mask),实线区域像素值为1,其他为0;
- 确定检测点:取车辆边界框的底部中心作为检测点(x_offset, y_offset),避免车辆边缘误判;
- 撞线判断:若检测点落在实线掩码图中(mask[x_offset, y_offset] == 1),且该车辆track_id未被记录,则判定为“压实线变道”,违法计数器+1,并截图取证;
# 伪代码:压实线判断 if mask[x_offset, y_offset] == 1 and track_id not in illegal_list: illegal_count += 1 illegal_list.append(track_id) cv2.imwrite(f"illegal_{track_id}.jpg", frame) # 截图取证
3.4.2 逆行识别
- 标注车道方向:用线段标记车道行驶方向(如城市道路自西向东为正向);
- 计算轨迹方向:根据DeepSort输出的track_id轨迹(连续10帧的检测点),拟合行驶方向向量;
- 方向判断:若轨迹方向与车道方向夹角>120°,则判定为“逆行”,触发报警。
3.4.3 实验验证
在南宁秀厢大道的监控视频(1小时/3661辆车)中,人工统计88辆压实线车辆,模型识别87辆,识别率98.9%,漏检仅1辆(因被前车完全遮挡),误检0辆,满足实际执法需求。
四、毕业设计复盘:踩过的坑与经验
4.1 那些踩过的坑
- YOLOv4训练过拟合:初期用小数据集训模型,测试集mAP仅75%——解决:加入马赛克增强、随机裁剪,用KITTI+UA-DETRAC混合训练,mAP提升到89%;
- DeepSort跟踪漂移:车辆快速转弯时,卡尔曼滤波预测偏差大——解决:增加外观特征权重,当IOU匹配失败时,用外观相似度(>0.8)重新匹配;
- 压实线误判:雨天路面反光导致实线掩码不准——解决:用HSV颜色空间提取实线(黄色/白色实线在S通道更突出),减少反光干扰。
4.2 给学弟学妹的建议
- 数据优先:违规检测的精度依赖标注质量,建议用LabelImg仔细标注实线区域,避免“漏标”“多标”;
- 分模块测试:先单独测YOLOv4检测精度,再测DeepSort跟踪成功率,最后测违规识别,逐个解决问题;
- 答辩突出实战:评委喜欢看“实际效果”,比如展示“违规车辆截图+track_id轨迹”,比单纯讲公式更有说服力。
五、项目资源与后续扩展
5.1 项目核心资源
本项目包含完整的代码(YOLOv4-Ghost训练、DeepSort跟踪、OpenCV违规识别)、预处理后的数据集、训练好的模型权重,可直接复现实验结果。若需获取这些资源,可私信沟通,还能提供模型调参和代码调试的指导。
5.2 未来扩展方向
- 多违规场景支持:增加“闯红灯”“不礼让行人”识别,需标注交通灯、行人位置;
- 模型压缩:将YOLOv4-Ghost压缩为YOLOv5n,适配边缘设备(如嵌入式摄像头);
- 联动执法:对接交警系统,自动将违规车辆的track_id、截图同步到执法平台,实现“自动取证→罚单生成”全流程。
如果本文对你的计算机视觉、智能交通相关毕业设计有帮助,欢迎点赞 + 收藏 + 关注,后续会分享更多实战案例!