基于YOLOv8深度学习的道路裂缝检测系统

📅 发布时间:2026/10/3 12:50:33
基于YOLOv8深度学习的道路裂缝检测系统
基于YOLOv8深度学习的道路裂缝检测系统一、项目背景道路裂缝是公路病害中最常见的形式之一及时发现和修复裂缝对于保障道路安全、延长道路使用寿命具有重要意义。传统的人工巡检方式效率低、成本高而基于深度学习的目标检测方法为道路裂缝的自动化检测提供了高效解决方案。本项目基于YOLOv8目标检测算法结合PyQt5图形界面开发了一套完整的道路裂缝检测系统支持图片检测、批量图片检测、视频实时检测和摄像头实时检测四种模式并提供了可视化的检测结果展示与结果保存功能。二、技术栈类别技术版本目标检测算法YOLOv8n (Ultralytics)8.0.199深度学习框架PyTorch1.9.0GUI 框架PyQt55.15.2图像处理OpenCV4.8.1.78中文文字渲染Pillow (PIL)—编程语言Python3.8三、数据集3.1 数据集概况本项目使用道路裂缝图像数据集数据按8:2的比例划分为训练集和验证集划分图片数量标注文件数量训练集 (train)286张283 个验证集 (valid)95张96 个合计381张379 个3.2 检测类别数据集仅包含1 个类别类别 ID英文名称中文名称0crack裂缝标注格式为YOLO 格式class_id x_center y_center width height归一化坐标。3.3 数据集配置# data.yamlnames:-cracknc:1train:datasets/DATASET/train/imagesval:datasets/DATASET/valid/images四、模型训练4.1 训练参数使用 YOLOv8nnano 轻量级版本作为基础模型进行迁移学习主要训练参数如下参数值基础模型yolov8n.pt训练轮次 (epochs)250批次大小 (batch)8输入图像尺寸 (imgsz)640×640初始学习率 (lr0)0.01优化器auto数据增强Mosaic、水平翻转、HSV变换等早停耐心值 (patience)100自动混合精度 (AMP)开启4.2 训练命令fromultralyticsimportYOLO modelYOLO(yolov8n.pt)resultsmodel.train(datadatasets/DATASET/data.yaml,epochs250,batch8)4.3 训练结果训练完成后模型的最优权重保存为models/best.pt训练过程中的损失曲线、PR 曲线、混淆矩阵等评估指标保存在runs/detect/train/目录下。五、系统功能5.1 功能总览系统提供以下核心功能单张图片检测选择一张图片进行裂缝检测展示检测结果批量图片检测选择一个文件夹批量检测其中所有图片支持 jpg/png/jpeg/bmp 格式视频检测选择视频文件逐帧进行实时裂缝检测摄像头检测开启摄像头进行实时裂缝检测参数调节通过滑块实时调整置信度阈值Conf和 IOU 阈值结果保存保存检测后的图片或视频到本地检测信息展示以表格形式展示每个检测目标的序号、文件路径、类别、置信度和坐标位置5.2 运行界面系统运行界面如下图所示界面采用深色主题风格整体布局分为以下区域顶部标题栏显示系统名称基于YOLOv8深度学习的道路裂缝检测系统左侧显示区域上方为图像/视频展示区下方为检测结果详情表格右侧控制面板包含四个功能分组文件导入图片选择、文件夹选择、视频选择、摄像头开关模型设置置信度阈值滑块默认 0.25、IOU 阈值滑块默认 0.45检测结果推理用时、目标数目、目标选择下拉框、置信度、目标坐标xmin/ymin/xmax/ymax操作保存结果按钮、退出程序按钮六、核心代码解析6.1 模型加载与预热# 加载检测模型self.modelYOLO(Config.model_path,taskdetect)# 预热避免首次推理延迟self.model(np.zeros((48,48,3)))系统启动时预先加载模型并进行一次空推理预热确保后续检测的响应速度。6.2 图片检测流程# 目标检测self.resultsself.model(self.org_path,confself.conf_threshold,iouself.iou_threshold)[0]# 获取检测框坐标、类别、置信度location_listself.results.boxes.xyxy.tolist()cls_listself.results.boxes.cls.tolist()conf_listself.results.boxes.conf.tolist()# 绘制检测结果now_imgself.results.plot()6.3 视频与摄像头检测视频和摄像头检测通过QTimer 定时器逐帧读取图像并进行推理实现实时检测效果self.timer_cameraQTimer()self.timer_camera.start(1)self.timer_camera.timeout.connect(self.open_frame)6.4 视频保存多线程视频检测结果的保存操作在QThread 子线程中执行避免阻塞主界面classbtn2Thread(QThread):update_ui_signalpyqtSignal(int,int)defrun(self):capcv2.VideoCapture(self.org_path)outcv2.VideoWriter(save_video_path,fourcc,fps,size)whilecap.isOpened()andself.is_running:ret,framecap.read()ifret:resultsself.model(frame,confself.conf,iouself.iou)[0]frameresults.plot()out.write(frame)self.update_ui_signal.emit(cur_num,total)保存过程中会弹出进度条对话框显示当前帧/总帧数和保存进度支持取消操作。6.5 中文路径与中文标签支持# 支持中文路径的图片读取defimg_cvread(path):imgcv2.imdecode(np.fromfile(path,dtypenp.uint8),cv2.IMREAD_COLOR)returnimg中文标签渲染则通过 PIL 的ImageDraw实现解决了 OpenCV 无法直接绘制中文文字的问题。七、项目结构Road crack detection system_gui/ ├── MainProgram.py # 主程序入口GUI 核心逻辑 ├── Config.py # 全局配置模型路径、类别名称等 ├── detect_tools.py # 工具函数绘图、坐标转换、颜色管理等 ├── train.py # 模型训练脚本 ├── imgTest.py # 单张图片检测测试脚本 ├── VideoTest.py # 视频检测测试脚本 ├── CameraTest.py # 摄像头检测测试脚本 ├── UIProgram/ # UI 模块 │ ├── UiMain.py # 主界面布局代码 │ ├── QssLoader.py # QSS 样式表加载器 │ ├── precess_bar.py # 视频保存进度条 │ ├── ui_sources_rc.py # Qt 资源文件 │ └── style.css # 全局样式表 ├── Font/ │ └── platech.ttf # 中文字体文件 ├── models/ │ └── best.pt # 训练好的最优模型权重 ├── datasets/DATASET/ # 数据集 │ ├── train/ # 训练集286张图片 │ ├── valid/ # 验证集95张图片 │ └── data.yaml # 数据集配置文件 ├── runs/detect/train/ # 训练结果损失曲线、评估指标等 ├── save_data/ # 检测结果保存目录 └── requirements.txt # 项目依赖八、环境配置与运行8.1 安装依赖pipinstall-rrequirements.txt主要依赖包括torch1.9.0 ultralytics8.0.199 opencv-python4.8.1.78 PyQt55.15.2 numpy1.26.1 matplotlib3.8.0 Pillow8.2 启动系统python MainProgram.py8.3 重新训练模型python train.py九、总结本项目实现了一个功能完整的道路裂缝检测系统主要特点如下检测精度高基于 YOLOv8n 模型在 381 张道路裂缝图像数据集上训练能够有效识别道路裂缝功能丰富支持单张图片、批量图片、视频、摄像头四种检测模式交互友好PyQt5 图形界面深色主题设计支持置信度/IOU 滑块实时调节信息直观检测结果以表格形式展示包含类别、置信度、坐标位置等详细信息结果可保存支持将检测后的图片或视频保存到本地系统适用于道路养护部门的裂缝巡检场景也可作为 YOLOv8 目标检测学习与实践的参考项目。十、代码下载路径有训练代码和训练好的模型以及训练过程提供数据提供GUI界面代码项目完整文件下载请见演示与介绍视频的简介处给出➷➷➷https://www.bilibili.com/video/BV1c7aS6oEBy/