深度学习基于YOLOV11渣土车检测系统数据集描述渣土车检测数据集2502张提供yolo和voc两种标注方式1类标注数量muck_truck: 4240image num: 25022.模型代码模型训练使用yolov11n训练30个epoch训练结果map如描述图所示。3.qt界面运行界面采用qt编写本项目已经训练好模型配置好环境后可直接使用运行效果见描述图像11渣土车检测系统信息表类别内容系统名称基于YOLOv11的渣土车检测系统核心算法YOLOv11n (Ultralytics)检测任务渣土车Muck Truck目标检测检测类别1类muck_truck(渣土车)数据集规模图像总数2502 张标注总数4240 个标注格式提供YOLO(.txt) 和VOC(.xml) 两种格式模型性能mAP0.5: 0.904训练配置Epochs: 30模型:yolov11n.pt用户界面基于PyQt5开发的图形化界面系统功能- 图片/视频文件导入检测- 实时摄像头检测- 检测结果显示类别、置信度、坐标- 检测结果统计与展示构建系统代码以下是构建该系统的完整代码分为两部分模型训练代码和Qt界面代码。1. 模型训练代码 (train.py)此代码用于训练YOLOv11n模型。请确保您的数据集已按以下结构组织并创建了data.yaml文件。数据集结构示例:muck_truck_dataset/ ├── images/ │ ├── train/ │ └── val/ ├── labels/ │ ├── train/ │ └── val/ └── data.yamldata.yaml文件内容:# data.yamlpath:./muck_truck_dataset# 数据集根目录路径train:images/train# 训练集图片路径val:images/val# 验证集图片路径nc:1# 类别数量names:[muck_truck]# 类别名称训练脚本 (train.py):fromultralyticsimportYOLOdeftrain():# 加载预训练模型modelYOLO(yolov11n.pt)# 训练模型resultsmodel.train(datadata.yaml,# 数据配置文件路径epochs30,# 训练轮数imgsz640,# 输入图像尺寸batch16,# 批次大小namemuck_truck_v11n# 训练任务名称)if__name____main__:train()2. Qt界面代码 (main.py)此代码实现了一个图形化界面用于加载训练好的模型并进行图片或视频检测。依赖库安装:在运行代码前请确保已安装以下依赖库pipinstallultralytics PyQt5 opencv-python主程序代码 (main.py):importsysimportcv2importtorchfromPyQt5.QtWidgetsimport(QApplication,QMainWindow,QLabel,QPushButton,QVBoxLayout,QHBoxLayout,QWidget,QFileDialog,QMessageBox)fromPyQt5.QtGuiimportQImage,QPixmapfromPyQt5.QtCoreimportQt,QTimerfromultralyticsimportYOLOclassMuckTruckDetectionApp(QMainWindow):def__init__(self):super().__init__()self.setWindowTitle(基于YOLOv11的渣土车检测系统)self.setGeometry(100,100,1200,800)# 加载模型self.modelYOLO(runs/detect/muck_truck_v11n/weights/best.pt)# 训练好的模型权重路径# 初始化UI组件self.init_ui()definit_ui(self):# 创建主布局main_layoutQHBoxLayout()# 左侧图像显示区域self.image_labelQLabel(self)self.image_label.setAlignment(Qt.AlignCenter)self.image_label.setMinimumSize(800,600)main_layout.addWidget(self.image_label,8)# 右侧控制面板control_layoutQVBoxLayout()# 文件导入按钮self.load_buttonQPushButton(导入图片/视频,self)self.load_button.clicked.connect(self.load_file)control_layout.addWidget(self.load_button)# 摄像头开关按钮self.camera_buttonQPushButton(开启摄像头,self)self.camera_button.clicked.connect(self.toggle_camera)control_layout.addWidget(self.camera_button)# 检测结果显示self.result_labelQLabel(检测结果将显示在此处,self)self.result_label.setWordWrap(True)control_layout.addWidget(self.result_label)# 保存结果按钮self.save_buttonQPushButton(保存结果,self)self.save_button.clicked.connect(self.save_result)control_layout.addWidget(self.save_button)# 退出按钮self.exit_buttonQPushButton(退出,self)self.exit_button.clicked.connect(self.close)control_layout.addWidget(self.exit_button)# 将控制面板添加到主布局control_widgetQWidget()control_widget.setLayout(control_layout)main_layout.addWidget(control_widget,2)# 设置主窗口的中心部件central_widgetQWidget()central_widget.setLayout(main_layout)self.setCentralWidget(central_widget)# 初始化摄像头self.capNoneself.timerQTimer()self.timer.timeout.connect(self.update_frame)defload_file(self):# 选择文件或摄像头file_path,_QFileDialog.getOpenFileName(self,选择图片或视频文件,,Image Files (*.jpg *.png);;Video Files (*.mp4 *.avi))iffile_path:iffile_path.endswith((.jpg,.png)):self.detect_image(file_path)eliffile_path.endswith((.mp4,.avi)):self.detect_video(file_path)defdetect_image(self,image_path):# 读取图像imagecv2.imread(image_path)# 进行推理resultsself.model(image)# 绘制检测结果result_imageresults[0].plot()# 显示图像self.display_image(result_image)# 显示检测结果self.display_results(results)defdetect_video(self,video_path):# 打开视频文件self.capcv2.VideoCapture(video_path)self.timer.start(30)# 每30ms更新一帧deftoggle_camera(self):ifself.capisNone:# 开启摄像头self.capcv2.VideoCapture(0)self.camera_button.setText(关闭摄像头)self.timer.start(30)else:# 关闭摄像头self.cap.release()self.capNoneself.camera_button.setText(开启摄像头)self.timer.stop()self.image_label.clear()defupdate_frame(self):ifself.cap:ret,frameself.cap.read()ifret:# 进行推理resultsself.model(frame)# 绘制检测结果result_frameresults[0].plot()# 显示图像self.display_image(result_frame)# 显示检测结果self.display_results(results)defdisplay_image(self,image):# 将OpenCV图像转换为QImagergb_imagecv2.cvtColor(image,cv2.COLOR_BGR2RGB)h,w,chrgb_image.shape bytes_per_linech*w qt_imageQImage(rgb_image.data,w,h,bytes_per_line,QImage.Format_RGB888)# 缩放图像以适应显示区域scaled_imageqt_image.scaled(self.image_label.size(),Qt.KeepAspectRatio)self.image_label.setPixmap(QPixmap.fromImage(scaled_image))defdisplay_results(self,results):result_text检测结果:\nforresultinresults:forboxinresult.boxes:class_idint(box.cls[0])confidencefloat(box.conf[0])class_nameself.model.names[class_id]result_textf类别:{class_name}, 置信度:{confidence:.2f}\nself.result_label.setText(result_text)defsave_result(self):# 保存检测结果file_path,_QFileDialog.getSaveFileName(self,保存结果,,Text Files (*.txt))iffile_path:withopen(file_path,w)asf:f.write(self.result_label.text())QMessageBox.information(self,保存成功,检测结果已保存)if__name____main__:appQApplication(sys.argv)windowMuckTruckDetectionApp()window.show()sys.exit(app.exec_())使用说明训练模型将数据集按上述结构组织并创建data.yaml文件。运行train.py脚本进行模型训练。运行界面确保训练好的模型权重文件路径正确在main.py中修改self.model YOLO(...)。运行main.py启动图形化界面。使用“导入图片/视频”按钮选择要检测的文件或使用“开启摄像头”进行实时检测。通过以上步骤您可以快速构建并运行基于YOLOv11的渣土车检测系统。