2026/2/11 19:24:59
网站建设
项目流程
建立自己个人网站怎么建立,建设标准网站,织梦网站备案,企业部门网站建设案例深度学习框架基于YOLOv8➕pyqt5工程机械检测系统#xff0c;2655张工程机械数据集
包括[‘挖掘机’, ‘自卸卡车’, ‘轮式装载机’]#xff0c;3类也可自行替换模型#xff0c;使用该界面做其他检测
以下是完整的 基于 YOLOv8 PyQt5 的工程机械检测系统#xff0c;支持2655张工程机械数据集包括[‘挖掘机’, ‘自卸卡车’, ‘轮式装载机’]3类也可自行替换模型使用该界面做其他检测以下是完整的基于 YOLOv8 PyQt5 的工程机械检测系统支持3 类目标检测挖掘机、自卸卡车、轮式装载机图像 / 视频 / 摄像头实时检测可视化检测框、类别中文、置信度、坐标支持替换任意 YOLOv8 模型如best.pt保存检测结果为文本报告界面简洁、功能完整、代码可直接运行✅ 一、环境依赖pipinstallultralytics pyqt5 opencv-python numpyultralytics官方 YOLOv8 库PyQt5图形界面OpenCV图像/视频处理✅ 二、数据集说明供训练参考属性内容数据集名称Construction Machinery Detection Dataset图像总数2655 张类别数量3 类类别名称挖掘机、自卸卡车、轮式装载机标注格式YOLO.txt推荐划分train: ~2100, val: ~400, test: ~155 示例结构construction_dataset/ ├── images/ │ ├── train/ │ └── val/ └── labels/ ├── train/ └── val/✅ 三、完整系统代码construction_detection.py# construction_detection.pyimportsysimportosfromPyQt5.QtWidgetsimport(QApplication,QMainWindow,QLabel,QPushButton,QVBoxLayout,QHBoxLayout,QWidget,QFileDialog,QTextEdit,QSpinBox)fromPyQt5.QtCoreimportQt,QTimerfromPyQt5.QtGuiimportQPixmap,QImageimportcv2importnumpyasnpfromultralyticsimportYOLOclassConstructionMachineryDetectionApp(QMainWindow):def__init__(self):super().__init__()self.setWindowTitle(基于YOLOv8的工程机械检测系统)self.setGeometry(100,100,1200,700)# 加载模型可替换为你的 best.ptself.modelNoneself.load_model()# 初始化 UIself.init_ui()# 摄像头/视频控制self.capNoneself.timerQTimer()self.timer.timeout.connect(self.update_frame)defload_model(self):加载 YOLOv8 模型try:# 替换为你训练好的模型路径例如 runs/detect/train/weights/best.ptself.modelYOLO(yolov8n.pt)# 默认使用 yolov8n可改为 best.ptprint(✅ 模型加载成功)exceptExceptionase:print(f❌ 模型加载失败:{e})definit_ui(self):central_widgetQWidget()self.setCentralWidget(central_widget)layoutQVBoxLayout()# 标题titleQLabel(h2工程机械智能检测系统/h2)title.setAlignment(Qt.AlignCenter)layout.addWidget(title)# 主体区域main_layoutQHBoxLayout()# 左侧图像显示区self.image_labelQLabel(点击“打开图片”上传图像)self.image_label.setAlignment(Qt.AlignCenter)self.image_label.setStyleSheet(border: 2px solid #ccc; background-color: #f9f9f9;)self.image_label.setMinimumSize(600,400)main_layout.addWidget(self.image_label)# 右侧控制面板right_panelQVBoxLayout()# 参数设置right_panel.addWidget(QLabel(检测参数))self.conf_spinQSpinBox()self.conf_spin.setValue(25)self.conf_spin.setSuffix(%)self.conf_spin.setMaximum(100)right_panel.addWidget(QLabel(置信度阈值))right_panel.addWidget(self.conf_spin)self.iou_spinQSpinBox()self.iou_spin.setValue(45)self.iou_spin.setSuffix(%)self.iou_spin.setMaximum(100)right_panel.addWidget(QLabel(IoU 阈值))right_panel.addWidget(self.iou_spin)# 操作按钮btn_layoutQHBoxLayout()self.btn_imageQPushButton(打开图片)self.btn_videoQPushButton(打开视频)self.btn_cameraQPushButton(打开摄像头)self.btn_saveQPushButton(保存结果)self.btn_exitQPushButton(退出)self.btn_image.clicked.connect(self.open_image)self.btn_video.clicked.connect(self.open_video)self.btn_camera.clicked.connect(self.open_camera)self.btn_save.clicked.connect(self.save_results)self.btn_exit.clicked.connect(self.close)btn_layout.addWidget(self.btn_image)btn_layout.addWidget(self.btn_video)btn_layout.addWidget(self.btn_camera)btn_layout.addWidget(self.btn_save)btn_layout.addWidget(self.btn_exit)right_panel.addLayout(btn_layout)# 检测结果显示right_panel.addWidget(QLabel(检测信息))self.result_textQTextEdit()self.result_text.setReadOnly(True)self.result_text.setMaximumHeight(150)right_panel.addWidget(self.result_text)main_layout.addLayout(right_panel)layout.addLayout(main_layout)# 结果表格下方layout.addWidget(QLabel(检测结果明细))self.table_textQTextEdit()self.table_text.setReadOnly(True)layout.addWidget(self.table_text)central_widget.setLayout(layout)defopen_image(self):file_name,_QFileDialog.getOpenFileName(self,选择图像,,Image Files (*.jpg *.png *.jpeg))iffile_name:self.detect_and_show(file_name,is_videoFalse)defopen_video(self):file_name,_QFileDialog.getOpenFileName(self,选择视频,,Video Files (*.mp4 *.avi))iffile_name:self.capcv2.VideoCapture(file_name)self.timer.start(30)self.result_text.setText(正在播放视频...)defopen_camera(self):ifself.cap:self.cap.release()self.capcv2.VideoCapture(0)self.timer.start(30)self.result_text.setText(正在使用摄像头...)defdetect_and_show(self,source,is_videoFalse):ifself.modelisNone:self.result_text.setText(❌ 模型未加载)returnimgcv2.imread(source)ifnotis_videoelsesourceifimgisNone:self.result_text.setText(❌ 图像读取失败)returnconfself.conf_spin.value()/100.0iouself.iou_spin.value()/100.0resultsself.model(img,confconf,iouiou)annotated_imgresults[0].plot()# 显示图像self.display_image(annotated_img)# 显示结果self.show_results(results[0],source)defupdate_frame(self):ifself.capisNone:returnret,frameself.cap.read()ifnotret:self.timer.stop()self.result_text.setText(❌ 视频/摄像头结束)returnself.detect_and_show(frame,is_videoTrue)defdisplay_image(self,img):h,w,chimg.shape bytes_per_linech*w q_imgQImage(img.data,w,h,bytes_per_line,QImage.Format_BGR888)pixmapQPixmap.fromImage(q_img)self.image_label.setPixmap(pixmap.scaled(600,400,Qt.KeepAspectRatio))defshow_results(self,result,source_path):boxesresult.boxes.cpu().numpy()class_names[挖掘机,自卸卡车,轮式装载机]# 中文映射按训练时类别顺序iflen(boxes)0:self.result_text.setText( 未检测到工程机械。)self.table_text.setText()return# 构建文本textf 检测完成共{len(boxes)}个目标\ntable_lines[序号\t类别\t置信度\t坐标 [x1,y1,x2,y2]]fori,boxinenumerate(boxes):cls_idint(box.cls[0])conffloat(box.conf[0])xyxybox.xyxy[0].astype(int)labelclass_names[cls_id]ifcls_idlen(class_names)elsef未知类({cls_id})conf_strf{conf*100:.2f}%coord_strf[{xyxy[0]},{xyxy[1]},{xyxy[2]},{xyxy[3]}]textf•{label}({conf_str})\ntable_lines.append(f{i1}\t{label}\t{conf_str}\t{coord_str})self.result_text.setText(text)self.table_text.setText(\n.join(table_lines))defsave_results(self):contentself.result_text.toPlainText()\n\nself.table_text.toPlainText()ifnotcontent.strip():self.result_text.setText(❌ 无结果可保存)returnfile_path,_QFileDialog.getSaveFileName(self,保存检测结果,,Text Files (*.txt))iffile_path:withopen(file_path,w,encodingutf-8)asf:f.write(content)self.result_text.setText(✅ 结果已保存)defcloseEvent(self,event):ifself.cap:self.cap.release()self.timer.stop()event.accept()defmain():appQApplication(sys.argv)windowConstructionMachineryDetectionApp()window.show()sys.exit(app.exec_())if__name____main__:main()✅ 四、如何使用1. 替换为你自己的模型将以下行self.modelYOLO(yolov8n.pt)改为self.modelYOLO(path/to/your/best.pt)⚠️ 注意best.pt必须是在相同类别顺序下训练的即0挖掘机, 1自卸卡车, 2轮式装载机2. 运行程序python construction_detection.py✅ 五、训练建议如需训练data.yaml配置文件train:./dataset/images/trainval:./dataset/images/valnc:3names:[excavator,dump_truck,wheel_loader]训练时使用英文名推理时在 GUI 中映射为中文。训练命令yolo detect traindatadata.yamlmodelyolov8s.ptepochs100imgsz640batch16✅ 六、扩展能力✅通用性只需修改class_names和模型路径即可用于其他检测任务如车辆、动物、缺陷等✅部署友好可打包为.exe使用 PyInstaller✅多语言支持轻松添加英文/其他语言标签提示若你的模型输出是英文类别如excavator可在show_results()中加入映射字典en_to_cn{excavator:挖掘机,dump_truck:自卸卡车,wheel_loader:轮式装载机}labelen_to_cn.get(predicted_name,predicted_name)