news 2026/5/1 6:01:54

深度学习框架基于YOLOv8➕pyqt5工程机械检测系统,YOLOV8模型如何训练工程机械检测数据集识别检测挖掘机‘, ‘自卸卡车‘, ‘轮式装载机

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
深度学习框架基于YOLOv8➕pyqt5工程机械检测系统,YOLOV8模型如何训练工程机械检测数据集识别检测挖掘机‘, ‘自卸卡车‘, ‘轮式装载机

深度学习框架基于YOLOv8➕pyqt5工程机械检测系统,

2655张工程机械数据集
包括[‘挖掘机’, ‘自卸卡车’, ‘轮式装载机’],3类

也可自行替换模型,使用该界面做其他检测

以下是完整的基于 YOLOv8 + PyQt5 的工程机械检测系统,支持:

  • 3 类目标检测:挖掘机自卸卡车轮式装载机
  • 图像 / 视频 / 摄像头实时检测
  • 可视化检测框、类别(中文)、置信度、坐标
  • 支持替换任意 YOLOv8 模型(如best.pt
  • 保存检测结果为文本报告
  • 界面简洁、功能完整、代码可直接运行

✅ 一、环境依赖

pipinstallultralytics pyqt5 opencv-python numpy
  • ultralytics:官方 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.pt)self.model=Noneself.load_model()# 初始化 UIself.init_ui()# 摄像头/视频控制self.cap=Noneself.timer=QTimer()self.timer.timeout.connect(self.update_frame)defload_model(self):"""加载 YOLOv8 模型"""try:# 替换为你训练好的模型路径,例如 'runs/detect/train/weights/best.pt'self.model=YOLO('yolov8n.pt')# 默认使用 yolov8n,可改为 best.ptprint("✅ 模型加载成功!")exceptExceptionase:print(f"❌ 模型加载失败:{e}")definit_ui(self):central_widget=QWidget()self.setCentralWidget(central_widget)layout=QVBoxLayout()# 标题title=QLabel("<h2>工程机械智能检测系统</h2>")title.setAlignment(Qt.AlignCenter)layout.addWidget(title)# 主体区域main_layout=QHBoxLayout()# 左侧:图像显示区self.image_label=QLabel("点击“打开图片”上传图像")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_panel=QVBoxLayout()# 参数设置right_panel.addWidget(QLabel("检测参数"))self.conf_spin=QSpinBox()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_spin=QSpinBox()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_layout=QHBoxLayout()self.btn_image=QPushButton("打开图片")self.btn_video=QPushButton("打开视频")self.btn_camera=QPushButton("打开摄像头")self.btn_save=QPushButton("保存结果")self.btn_exit=QPushButton("退出")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_text=QTextEdit()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_text=QTextEdit()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_video=False)defopen_video(self):file_name,_=QFileDialog.getOpenFileName(self,"选择视频","","Video Files (*.mp4 *.avi)")iffile_name:self.cap=cv2.VideoCapture(file_name)self.timer.start(30)self.result_text.setText("正在播放视频...")defopen_camera(self):ifself.cap:self.cap.release()self.cap=cv2.VideoCapture(0)self.timer.start(30)self.result_text.setText("正在使用摄像头...")defdetect_and_show(self,source,is_video=False):ifself.modelisNone:self.result_text.setText("❌ 模型未加载!")returnimg=cv2.imread(source)ifnotis_videoelsesourceifimgisNone:self.result_text.setText("❌ 图像读取失败!")returnconf=self.conf_spin.value()/100.0iou=self.iou_spin.value()/100.0results=self.model(img,conf=conf,iou=iou)annotated_img=results[0].plot()# 显示图像self.display_image(annotated_img)# 显示结果self.show_results(results[0],source)defupdate_frame(self):ifself.capisNone:returnret,frame=self.cap.read()ifnotret:self.timer.stop()self.result_text.setText("❌ 视频/摄像头结束!")returnself.detect_and_show(frame,is_video=True)defdisplay_image(self,img):h,w,ch=img.shape bytes_per_line=ch*w q_img=QImage(img.data,w,h,bytes_per_line,QImage.Format_BGR888)pixmap=QPixmap.fromImage(q_img)self.image_label.setPixmap(pixmap.scaled(600,400,Qt.KeepAspectRatio))defshow_results(self,result,source_path):boxes=result.boxes.cpu().numpy()class_names=['挖掘机','自卸卡车','轮式装载机']# 中文映射(按训练时类别顺序)iflen(boxes)==0:self.result_text.setText("🔍 未检测到工程机械。")self.table_text.setText("")return# 构建文本text=f"🎯 检测完成!共{len(boxes)}个目标\n"table_lines=["序号\t类别\t置信度\t坐标 [x1,y1,x2,y2]"]fori,boxinenumerate(boxes):cls_id=int(box.cls[0])conf=float(box.conf[0])xyxy=box.xyxy[0].astype(int)label=class_names[cls_id]ifcls_id<len(class_names)elsef"未知类({cls_id})"conf_str=f"{conf*100:.2f}%"coord_str=f"[{xyxy[0]},{xyxy[1]},{xyxy[2]},{xyxy[3]}]"text+=f"•{label}({conf_str})\n"table_lines.append(f"{i+1}\t{label}\t{conf_str}\t{coord_str}")self.result_text.setText(text)self.table_text.setText("\n".join(table_lines))defsave_results(self):content=self.result_text.toPlainText()+"\n\n"+self.table_text.toPlainText()ifnotcontent.strip():self.result_text.setText("❌ 无结果可保存!")returnfile_path,_=QFileDialog.getSaveFileName(self,"保存检测结果","","Text Files (*.txt)")iffile_path:withopen(file_path,'w',encoding='utf-8')asf:f.write(content)self.result_text.setText("✅ 结果已保存!")defcloseEvent(self,event):ifself.cap:self.cap.release()self.timer.stop()event.accept()defmain():app=QApplication(sys.argv)window=ConstructionMachineryDetectionApp()window.show()sys.exit(app.exec_())if__name__=="__main__":main()

✅ 四、如何使用?

1. 替换为你自己的模型

将以下行:

self.model=YOLO('yolov8n.pt')

改为:

self.model=YOLO('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 traindata=data.yamlmodel=yolov8s.ptepochs=100imgsz=640batch=16

✅ 六、扩展能力

  • 通用性:只需修改class_names和模型路径,即可用于其他检测任务(如车辆、动物、缺陷等)
  • 部署友好:可打包为.exe(使用 PyInstaller)
  • 多语言支持:轻松添加英文/其他语言标签

💡提示:若你的模型输出是英文类别(如'excavator'),可在show_results()中加入映射字典:

en_to_cn={'excavator':'挖掘机','dump_truck':'自卸卡车','wheel_loader':'轮式装载机'}label=en_to_cn.get(predicted_name,predicted_name)

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/1 4:57:53

基于SpringBoot的家装预算系统(毕业设计项目源码+文档)

课题摘要在家装行业标准化发展、业主成本管控需求提升的背景下&#xff0c;传统家装预算存在 “项目清单混乱、价格不透明、变更追溯难” 的痛点。基于 SpringBoot 构建的家装预算系统&#xff0c;适配平台管理员、装修公司、设计师、业主等角色&#xff0c;实现装修项目拆解、…

作者头像 李华
网站建设 2026/5/1 4:57:51

Fritzing Parts 终极指南:快速掌握电子设计核心组件库

Fritzing Parts 终极指南&#xff1a;快速掌握电子设计核心组件库 【免费下载链接】fritzing-parts Electronic components for use in the Fritzing app (aka the parts library) 项目地址: https://gitcode.com/gh_mirrors/fr/fritzing-parts Fritzing Parts 是开源电…

作者头像 李华
网站建设 2026/5/1 4:56:36

缠论分析神器ChanlunX:5步教你读懂股市密码

缠论分析神器ChanlunX&#xff1a;5步教你读懂股市密码 【免费下载链接】ChanlunX 缠中说禅炒股缠论可视化插件 项目地址: https://gitcode.com/gh_mirrors/ch/ChanlunX 还在为看不懂K线图而苦恼吗&#xff1f;想要在复杂的市场波动中找到清晰的交易信号&#xff1f;Cha…

作者头像 李华
网站建设 2026/5/1 4:57:37

移动端AI语音识别的技术演进与实践探索

移动端AI语音识别的技术演进与实践探索 【免费下载链接】whisper_android Offline Speech Recognition with OpenAI Whisper and TensorFlow Lite for Android 项目地址: https://gitcode.com/gh_mirrors/wh/whisper_android 在当今移动互联网快速发展的时代&#xff0c…

作者头像 李华
网站建设 2026/5/1 4:57:14

Vue基于Spring Boot+Vue的宠物商城健康医院挂号服务管理系统

目录摘要开发技术核心代码参考示例1.建立用户稀疏矩阵&#xff0c;用于用户相似度计算【相似度矩阵】2.计算目标用户与其他用户的相似度总结源码文档获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;摘要 该系统基于Spring Boot和Vue.js技术栈&a…

作者头像 李华
网站建设 2026/5/1 4:56:37

Vue基于Spring Boot的留学服务管理平台的设计与开发

目录摘要开发技术核心代码参考示例1.建立用户稀疏矩阵&#xff0c;用于用户相似度计算【相似度矩阵】2.计算目标用户与其他用户的相似度总结源码文档获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;摘要 随着全球化进程加速&#xff0c;留学服务…

作者头像 李华