深度学习基于YOLOv11交通事故检测系统 道路交通事故检测数据集,
391张,yolo,voc,coco三种标注方式
图像尺寸:644*540
类别数量:5类
训练集图像数量:345; 验证集图像数量:23; 测试集图像数量:23
类别名称: 每一类图像数 ,每一类标注数
bike‑crash-非机动车碰撞:56,56
car‑accident-汽车事故:57,64
car‑crash-汽车碰撞:96,96
bike‑accident-非机动车事故:75,84
car‑bike‑crash-汽车与非机动车碰撞:114,114
image num: 391
模型代码
采用 YOLOv11n 网络训练
训练轮次:80 个 epoch
提供全部训练 + 测试源代码
训练精度 mAP 效果如图所示
PyQt5 界面功能
界面使用 PyQt5 开发,提供全部源码(.ui、.qrc、.py 及图标文件)
支持图片检测、视频检测、摄像头实时检测
界面实时显示:目标位置、目标总数、置信度等信息
支持检测结果保存导出
操作简单直观,无需命令行
基于YOLOv11交通事故检测系统完整代码
环境安装
pipinstallultralytics opencv-python PyQt5 numpy1、数据集yaml配置文件traffic_accident.yaml
# 类别names:0:bike-crash1:car-accident2:car-crash3:car-bike-crashnc:4# 数据集路径path:./traffic_accidenttrain:images/trainval:images/valtest:images/test2、模型训练代码train.py
fromultralyticsimportYOLOif__name__=='__main__':# 加载YOLOv11n模型model=YOLO("yolo11n.pt")# 开始训练results=model.train(data="traffic_accident.yaml",epochs=100,imgsz=640,batch=8,device=0,patience=10,project="runs/train",name="traffic_accident_yolo11")3、单图/视频推理代码predict.py
fromultralyticsimportYOLOimportcv2 model=YOLO("./runs/train/traffic_accident_yolo11/weights/best.pt")defpredict_image(img_path):res=model(img_path,conf=0.5)forrinres:im=r.plot()cv2.imwrite("result.jpg",im)returnresdefpredict_video(video_path):res=model(video_path,save=True,conf=0.5)returnresif__name__=="__main__":predict_image("test.jpg")4、PyQt5可视化界面代码main_ui.py(系统界面)
importsysimportcv2fromPyQt5.QtWidgetsimport(QApplication,QMainWindow,QWidget,QVBoxLayout,QHBoxLayout,QPushButton,QLabel,QFileDialog,QTableWidget,QTableWidgetItem)fromPyQt5.QtGuiimportQImage,QPixmapfromPyQt5.QtCoreimportQtfromultralyticsimportYOLOclassMainWindow(QMainWindow):def__init__(self):super().__init__()self.setWindowTitle("基于YOLOv11的交通事故检测系统")self.setGeometry(100,100,1200,800)self.model=YOLO("./runs/train/traffic_accident_yolo11/weights/best.pt")self.img=Noneself.initUI()definitUI(self):central_widget=QWidget()self.setCentralWidget(central_widget)h_layout=QHBoxLayout(central_widget)# 左侧图像显示self.label_img=QLabel("图像区域")self.label_img.setFixedSize(800,600)self.label_img.setStyleSheet("border:1px solid #000;")# 右侧面板right_widget=QWidget()v_right=QVBoxLayout(right_widget)self.btn_img=QPushButton("导入图片")self.btn_img.clicked.connect(self.load_image)self.btn_video=QPushButton("导入视频")self.btn_video.clicked.connect(self.load_video)self.table=QTableWidget()self.table.setColumnCount(6)self.table.setHorizontalHeaderLabels(["序号","类别","置信度","xmin","ymin","坐标"])self.btn_save=QPushButton("保存结果")v_right.addWidget(self.btn_img)v_right.addWidget(self.btn_video)v_right.addWidget(QLabel("检测结果"))v_right.addWidget(self.table)v_right.addWidget(self.btn_save)h_layout.addWidget(self.label_img)h_layout.addWidget(right_widget)defload_image(self):fname,_=QFileDialog.getOpenFileName(self,"选择图片","","Image(*.jpg *.png)")ifnotfname:returnself.img=cv2.imread(fname)#推理results=self.model(self.img,conf=0.5)img_plot=results[0].plot()self.show_img(img_plot)self.fill_table(results[0])defshow_img(self,img_cv):rgb=cv2.cvtColor(img_cv,cv2.COLOR_BGR2RGB)h,w,c=rgb.shape qimg=QImage(rgb.data,w,h,w*c,QImage.Format_RGB888)self.label_img.setPixmap(QPixmap.fromImage(qimg).scaled(self.label_img.size(),Qt.KeepAspectRatio))deffill_table(self,res):self.table.setRowCount(0)boxes=res.boxesfori,boxinenumerate(boxes):cls_name=self.model.names[int(box.cls)]conf=float(box.conf)x1,y1,x2,y2=map(int,box.xyxy[0])self.table.insertRow(i)self.table.setItem(i,0,QTableWidgetItem(str(i+1)))self.table.setItem(i,1,QTableWidgetItem(cls_name))self.table.setItem(i,2,QTableWidgetItem(f"{conf:.3f}"))self.table.setItem(i,3,QTableWidgetItem(str(x1)))self.table.setItem(i,4,QTableWidgetItem(str(y1)))self.table.setItem(i,5,QTableWidgetItem(f"{x2},{y2}"))defload_video(self):path,_=QFileDialog.getOpenFileName(self,"选择视频","","Video(*.mp4)")ifpath:self.model(path,save=True)if__name__=="__main__":app=QApplication(sys.argv)win=MainWindow()win.show()sys.exit(app.exec_())运行:python main_ui.py,即可打开交通事故检测系统GUI,支持图片、视频检测,展示检测框、类别、置信度、坐标结果。