news 2026/4/23 11:44:16

基于深度学习YOLOV8道路裂缝检测系统 yolov8如何训练道路裂缝检测数据集

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
基于深度学习YOLOV8道路裂缝检测系统 yolov8如何训练道路裂缝检测数据集

基于深度学习的道路裂缝检测系统(含UI界面、yolov8、Python代码、数据集)

1登陆界面

项目介绍:
模型:YOLOV8
软件:Pycharm+Anaconda
环境:python=3.9 opencv_python PyQt5

文件:
1.完整程序文件(.py等)
2.UI界面源文件、图标(.ui、.qrc、.py等)
3.测试图片、视频文件(.jpeg、.mp4、.avi等)

功能: 系统实现了对于多种裂缝的识别检测功能:包括通过选择图片、视频、摄像头进行实时识别;检测速度快、识别精度较高。
①选择图片识别裂缝。
②选择视频识别裂缝。
③摄像头检测识别。


1

1

基于 YOLOv8 的道路裂缝检测系统的详细代码实现,包含:

✅ PyQt5 图形用户界面(UI)
✅ 支持图片 / 视频 / 摄像头三种输入模式
✅ 使用预训练的yolov8n-segyolov8n模型(支持检测或分割)
✅ 环境:Python 3.9 + OpenCV + PyQt5 + Ultralytics
✅ 可直接运行(含模型和测试数据)

💡 注:本项目假设同学你已有训练好的 YOLOv8 模型(如best.pt),类别为['crack'](裂缝)。


📁 一、项目结构

road_crack_detection_yolov8/ ├── models/ │ └── best.pt# 训练好的 YOLOv8 模型(检测或分割)├── ui/ │ ├── main_window.ui# Qt Designer 设计的 UI 文件│ └── resources.qrc# 图标资源(可选)├── utils/ │ └── ui_utils.py# UI 工具函数├── test_data/ │ ├── images/# 测试图片│ └── videos/# 测试视频├── main.py# 主程序入口├── detection_thread.py# 多线程推理模块(防卡顿)├── requirements.txt └── README.md

📦 二、环境依赖(requirements.txt

ultralytics==8.2.0 opencv-python==4.8.0 PyQt5==5.15.9 numpy==1.24.3 Pillow==9.5.0

安装:

conda create -n crackpython=3.9conda activate crack pipinstall-r requirements.txt

🖼️ 三、UI 设计(ui/main_window.ui

使用Qt Designer创建如下界面(关键控件):

  • QLabel: label_show→ 显示图像/视频帧
  • QPushButton: btn_image→ 选择图片
  • QPushButton: btn_video→ 选择视频
  • QPushButton: btn_camera→ 启动摄像头
  • QPushButton: btn_stop→ 停止检测
  • QComboBox: combo_model→ 选择模型(可选)
  • QLabel: label_status→ 显示状态(如“检测中…”)

✅ 将.ui转为.py

pyuic5 ui/main_window.ui -o ui/main_window.py

🔧 四、多线程检测模块detection_thread.py

# detection_thread.pyimportcv2fromPyQt5.QtCoreimportQThread,pyqtSignalfromultralyticsimportYOLOimportnumpyasnpclassDetectionThread(QThread):send_frame=pyqtSignal(np.ndarray)# 发送处理后的帧send_status=pyqtSignal(str)def__init__(self,source_type='image',source_path=None,model_path='models/best.pt'):super().__init__()self.source_type=source_type self.source_path=source_path self.model_path=model_path self.running=Truedefrun(self):try:model=YOLO(self.model_path)ifself.source_type=='camera':cap=cv2.VideoCapture(0)elifself.source_type=='video':cap=cv2.VideoCapture(self.source_path)else:# imageimg=cv2.imread(self.source_path)results=model(img)annotated=results[0].plot()self.send_frame.emit(annotated)self.send_status.emit("图片检测完成")return# 视频/摄像头循环whileself.runningandcap.isOpened():ret,frame=cap.read()ifnotret:breakresults=model(frame)annotated=results[0].plot()self.send_frame.emit(annotated)self.send_status.emit("实时检测中...")cap.release()exceptExceptionase:self.send_status.emit(f"错误:{str(e)}")defstop(self):self.running=Falseself.wait()

🧩 五、主程序main.py

# main.pyimportsysimportosfromPyQt5.QtWidgetsimportQApplication,QMainWindow,QFileDialog,QMessageBoxfromPyQt5.QtGuiimportQImage,QPixmapfromPyQt5.QtCoreimportQtimportcv2importnumpyasnp# 导入 UIfromui.main_windowimportUi_MainWindowfromdetection_threadimportDetectionThreadclassCrackDetectionApp(QMainWindow,Ui_MainWindow):def__init__(self):super().__init__()self.setupUi(self)self.init_slots()self.detection_thread=Nonedefinit_slots(self):self.btn_image.clicked.connect(self.select_image)self.btn_video.clicked.connect(self.select_video)self.btn_camera.clicked.connect(self.start_camera)self.btn_stop.clicked.connect(self.stop_detection)defdisplay_image(self,img):"""在 QLabel 中显示 OpenCV 图像"""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).scaled(self.label_show.width(),self.label_show.height(),Qt.KeepAspectRatio,Qt.SmoothTransformation)self.label_show.setPixmap(pixmap)defselect_image(self):path,_=QFileDialog.getOpenFileName(self,"选择图片","","Images (*.png *.jpg *.jpeg)")ifpath:self.run_detection('image',path)defselect_video(self):path,_=QFileDialog.getOpenFileName(self,"选择视频","","Videos (*.mp4 *.avi)")ifpath:self.run_detection('video',path)defstart_camera(self):self.run_detection('camera')defrun_detection(self,source_type,source_path=None):self.stop_detection()# 停止之前的任务model_path="models/best.pt"ifnotos.path.exists(model_path):QMessageBox.critical(self,"错误","模型文件 models/best.pt 不存在!")returnself.detection_thread=DetectionThread(source_type,source_path,model_path)self.detection_thread.send_frame.connect(self.display_image)self.detection_thread.send_status.connect(self.label_status.setText)self.detection_thread.start()defstop_detection(self):ifself.detection_thread:self.detection_thread.stop()self.detection_thread=Noneself.label_status.setText("已停止")if__name__=='__main__':app=QApplication(sys.argv)window=CrackDetectionApp()window.show()sys.exit(app.exec_())

🎨 六、UI 文件示例(ui/main_window.ui片段)

<!-- 简化版 UI 结构 --><widgetclass="QMainWindow"name="MainWindow"><widgetclass="QWidget"name="centralwidget"><layoutclass="QVBoxLayout"><item><labelname="label_show"text="等待输入..."/></item><item><layoutclass="QHBoxLayout"><item><buttonname="btn_image"text="选择图片"/></item><item><buttonname="btn_video"text="选择视频"/></item><item><buttonname="btn_camera"text="摄像头"/></item><item><buttonname="btn_stop"text="停止"/></item></layout></item><item><labelname="label_status"text="就绪"/></item></layout></widget></widget>

📸 七、模型说明

  • 推荐模型yolov8n.pt(检测)或yolov8n-seg.pt(实例分割)
  • 类别:单类['crack']
  • 训练命令示例
    yolo detect traindata=crack_data.yamlmodel=yolov8n.ptepochs=100imgsz=640

将训练好的best.pt放入models/目录即可。


▶️ 八、运行系统

python main.py

✅ 九、功能特点

功能说明
🖼️ 图片检测支持 JPG/PNG,一键识别裂缝
🎥 视频检测实时逐帧分析 MP4/AVI
📹 摄像头检测调用默认摄像头(ID=0)
⚡ 高性能YOLOv8 推理快,GPU/CPU 自适应
🖥️ 友好 UIPyQt5 界面简洁,操作直观
🔌 易扩展可替换模型用于其他检测任务

💡 十、定制与扩展建议

  • 添加保存结果:将检测图/视频保存到本地
  • 裂缝量化分析:计算裂缝长度、面积、密度
  • 多类裂缝识别:如横向/纵向/网状裂缝
  • 部署到边缘设备:导出 ONNX/TensorRT 模型
  • 生成检测报告:PDF 格式输出(含位置、数量)

📎附:项目交付内容

  1. 完整.py源码
  2. .ui.qrcUI 文件
  3. best.pt模型(500 张训练集)
  4. 测试图片/视频
  5. 环境配置文档 + 使用报告

该系统可直接用于道路巡检、市政养护、智能交通、科研教学等场景。

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

情感强度滑动调节功能上线!EmotiVoice更灵活

情感强度滑动调节功能上线&#xff01;EmotiVoice更灵活 在虚拟主播的直播中&#xff0c;一句“我好开心啊”如果听起来像在念通知&#xff0c;观众的情绪共鸣立刻打折&#xff1b;在游戏里&#xff0c;NPC从平静到暴怒的转变如果只有两种状态——“正常说话”和“突然咆哮”&a…

作者头像 李华
网站建设 2026/4/23 10:21:40

开题报告不再“从零开始”!百考通AI智能助手,一键生成规范、详实的开题报告

对于每一位即将开启毕业设计或科研项目的学子而言&#xff0c;“开题报告”是整个研究工作的起点和蓝图。一份逻辑清晰、内容详实、格式规范的开题报告&#xff0c;不仅能帮助学生明确研究方向、厘清技术路线&#xff0c;更是指导老师审核项目可行性和评估工作量的重要依据。然…

作者头像 李华
网站建设 2026/4/20 4:27:36

百考通AI:你的智能文献管家,一键生成高质量综述,让学术研究事半功倍

在浩如烟海的学术文献中精准定位、高效整合并撰写一篇逻辑严谨、内容翔实的文献综述&#xff0c;是每一位科研工作者和学子都面临的巨大挑战。这不仅耗费大量时间精力&#xff0c;更考验着你的信息检索、归纳总结与批判性思维能力。当面对堆积如山的PDF文件和纷繁复杂的引文格式…

作者头像 李华
网站建设 2026/4/20 11:55:12

我在创业公司面试里画了 MVVM。对方问“为什么”。我当场宕机。

我有一支技术全面、经验丰富的小型团队&#xff0c;专注高效交付中等规模外包项目&#xff0c;有需要外包项目的可以联系我那场面试一点都不像面试。没有八股题&#xff0c;没有“请自我介绍”。 只有一张桌子、一块白板&#xff0c;以及一句像聊天一样随口的&#xff1a;“我们…

作者头像 李华