yolo11和yolov8分别训练混凝土裂缝检测数据集 混凝土缺陷数据集 建立基于深度学习YOLOV8_11框架混凝土缺陷检测系统

发布时间:2026/9/18 14:19:59

yolo11和yolov8分别训练混凝土裂缝检测数据集 混凝土缺陷数据集 建立基于深度学习YOLOV8_11框架混凝土缺陷检测系统 深度学习框架混凝土裂缝检测系统yolo11/yolov8/opencv使用yolo11和yolov8分别训练数据集图片7998张(其中训练集5998 75%,验证集1500 19%,测试集500 6%),已经训练好了也可以自己重新训练使用opencvthinter构建的gui需要下载相关库如opencvultralyticsmap50约为0.97一分类‘crack’源码、数据集训练好的两个权重(yolo11和yolov8)源码注释非常详细可显示 GUI 窗口支持图片视频实时摄像头检测识别运行效果如图所示1基于 YOLOv8 YOLOv11 OpenCV Tkinter 的混凝土裂缝检测系统完整实现支持✅ 图片 / 视频 / 摄像头实时检测✅ 使用YOLOv8和YOLOv11双模型切换已训练权重✅ 一分类crack✅ mAP50 ≈ 0.97高精度✅ GUI 界面Tkinter✅ 支持加载自定义模型、显示检测结果、保存图像✅ 一、环境依赖pipinstallopencv-python ultralytics tkinter numpy matplotlibultralytics官方 YOLOv8 和 YOLOv11 支持库opencv-python图像处理与摄像头tkinterPython 原生 GUI无需额外安装✅ 二、数据集说明可选属性内容数据集大小7998 张图像分类单类crack划分比例训练集: 5998 (75%)验证集: 1500 (19%)测试集: 500 (6%)标注格式YOLO 格式.txt文件每行class x_center y_center width height图像尺寸多样建议统一为 640×640 或 1280×720 示例结构crack_dataset/ ├── train/ │ ├── images/ │ └── labels/ ├── val/ │ ├── images/ │ └── labels/ └── test/ ├── images/ └── labels/✅ 三、训练好的模型提供下载yolov8_crack.pt—— YOLOv8 模型mAP50 ≈ 0.97yolov11_crack.pt—— YOLOv11 模型mAP50 ≈ 0.98⚠️ 请将这两个.pt文件放在项目根目录下。✅ 四、完整代码concrete_crack_detector.py# concrete_crack_detector.pyimportsysimportosimportcv2importnumpyasnpfromultralyticsimportYOLOimporttkinterastkfromtkinterimportfiledialog,messageboxfromPILimportImage,ImageTkimportthreadingclassCrackDetectionApp:def__init__(self,root):self.rootroot self.root.title(YOLOv8/YOLOv11 混凝土裂缝检测系统)self.root.geometry(1200x800)# 初始化模型self.model_v8Noneself.model_v11Noneself.current_modelNone# v8 or v11self.capNoneself.runningFalse# UI 组件self.setup_ui()defsetup_ui(self):构建 GUI 界面# 上方按钮区域btn_frametk.Frame(self.root)btn_frame.pack(pady10)self.btn_load_v8tk.Button(btn_frame,text加载 YOLOv8 模型,commandself.load_v8_model)self.btn_load_v8.pack(sidetk.LEFT,padx5)self.btn_load_v11tk.Button(btn_frame,text加载 YOLOv11 模型,commandself.load_v11_model)self.btn_load_v11.pack(sidetk.LEFT,padx5)self.btn_imagetk.Button(btn_frame,text打开图片,commandself.open_image)self.btn_image.pack(sidetk.LEFT,padx5)self.btn_videotk.Button(btn_frame,text打开视频,commandself.open_video)self.btn_video.pack(sidetk.LEFT,padx5)self.btn_cameratk.Button(btn_frame,text启动摄像头,commandself.start_camera)self.btn_camera.pack(sidetk.LEFT,padx5)self.btn_stoptk.Button(btn_frame,text停止摄像头,commandself.stop_camera)self.btn_stop.pack(sidetk.LEFT,padx5)# 中间图像显示区域self.canvas_frametk.Frame(self.root)self.canvas_frame.pack(filltk.BOTH,expandTrue,padx20,pady10)self.original_canvastk.Canvas(self.canvas_frame,width500,height500,bglightgray)self.original_canvas.grid(row0,column0,padx10,pady10)self.detected_canvastk.Canvas(self.canvas_frame,width500,height500,bglightgray)self.detected_canvas.grid(row0,column1,padx10,pady10)# 下方信息框self.info_labeltk.Label(self.root,text点击“打开图片”开始检测,font(Arial,12))self.info_label.pack(pady10)defload_v8_model(self):加载 YOLOv8 模型try:self.model_v8YOLO(yolov8_crack.pt)# 替换为你的路径self.current_modelv8self.info_label.config(text✅ 已加载 YOLOv8 模型)exceptExceptionase:messagebox.showerror(错误,f无法加载 YOLOv8 模型:{e})defload_v11_model(self):加载 YOLOv11 模型try:self.model_v11YOLO(yolov11_crack.pt)# 替换为你的路径self.current_modelv11self.info_label.config(text✅ 已加载 YOLOv11 模型)exceptExceptionase:messagebox.showerror(错误,f无法加载 YOLOv11 模型:{e})defopen_image(self):打开并检测单张图片ifself.current_modelisNone:messagebox.showwarning(警告,请先加载模型)returnfile_pathfiledialog.askopenfilename(title选择图像,filetypes[(Image Files,*.jpg *.jpeg *.png *.bmp)])ifnotfile_path:returnself.detect_image(file_path)defopen_video(self):打开视频文件进行检测file_pathfiledialog.askopenfilename(title选择视频,filetypes[(Video Files,*.mp4 *.avi *.mov)])ifnotfile_path:returnself.capcv2.VideoCapture(file_path)self.runningTrueself.process_video()defstart_camera(self):启动摄像头检测ifself.capisnotNone:self.cap.release()self.capcv2.VideoCapture(0)# 使用默认摄像头self.runningTrueself.process_video()defstop_camera(self):停止摄像头self.runningFalseifself.cap:self.cap.release()self.capNoneself.info_label.config(text 摄像头已停止)defprocess_video(self):处理视频或摄像头帧ifnotself.runningorself.capisNone:returnret,frameself.cap.read()ifnotret:self.runningFalseself.info_label.config(text❌ 视频/摄像头结束)return# 检测ifself.current_modelv8:resultsself.model_v8(frame,conf0.5,iou0.5)else:resultsself.model_v11(frame,conf0.5,iou0.5)detected_imgresults[0].plot()# 自动绘制框和标签# 显示原始图和检测图self.display_image(frame,detected_img)# 递归调用ifself.running:self.root.after(30,self.process_video)defdetect_image(self,image_path):对单张图像进行检测imgcv2.imread(image_path)ifimgisNone:messagebox.showerror(错误,无法读取图像)return# 推理ifself.current_modelv8:resultsself.model_v8(img,conf0.5,iou0.5)else:resultsself.model_v11(img,conf0.5,iou0.5)detected_imgresults[0].plot()# 显示self.display_image(img,detected_img)defdisplay_image(self,original,detected):在 Canvas 上显示图像# 调整大小以适应 canvash,woriginal.shape[:2]scalemin(500/w,500/h)new_w,new_hint(w*scale),int(h*scale)# 缩放图像original_resizedcv2.resize(original,(new_w,new_h))detected_resizedcv2.resize(detected,(new_w,new_h))# 转换为 PIL Imageimg_originalImage.fromarray(cv2.cvtColor(original_resized,cv2.COLOR_BGR2RGB))img_detectedImage.fromarray(cv2.cvtColor(detected_resized,cv2.COLOR_BGR2RGB))# 转为 PhotoImagephoto_originalImageTk.PhotoImage(img_original)photo_detectedImageTk.PhotoImage(img_detected)# 清空并更新 canvasself.original_canvas.delete(all)self.detected_canvas.delete(all)self.original_canvas.create_image(0,0,anchortk.NW,imagephoto_original)self.detected_canvas.create_image(0,0,anchortk.NW,imagephoto_detected)# 保持引用self.original_canvas.imagephoto_original self.detected_canvas.imagephoto_detected self.info_label.config(textf✅ 检测完成{len(results[0].boxes)}条裂缝)defmain():roottk.Tk()appCrackDetectionApp(root)root.mainloop()if__name____main__:main()✅ 五、运行步骤1. 准备文件确保项目根目录包含. ├── concrete_crack_detector.py ├── yolov8_crack.pt └── yolov11_crack.pt2. 运行程序python concrete_crack_detector.py3. 使用流程点击「加载 YOLOv8 模型」或「加载 YOLOv11 模型」点击「打开图片」上传裂缝图像点击「启动摄像头」开启实时检测检测结果自动显示在右侧窗口✅ 六、功能亮点功能描述 图像检测支持 JPG/PNG/BMP 视频检测MP4/AVI 格式 实时摄像头USB 摄像头或手机外接 双模型切换YOLOv8 / YOLOv11 高精度️ 可视化自动画框 类别 置信度 无需额外部署Python 一键运行✅ 七、模型训练说明如需重新训练1. 创建data.yamltrain:./crack_dataset/train/imagesval:./crack_dataset/val/imagesnc:1names:[crack]2. 训练命令YOLOv8yolo detect traindatadata.yamlmodelyolov8n.ptepochs100imgsz640batch163. 训练命令YOLOv11yolo detect traindatadata.yamlmodelyolov11n.ptepochs100imgsz640batch16✅ 输出模型会自动保存为runs/detect/train/weights/best.pt复制到项目根目录即可使用。
延伸阅读

更多相关文章

2026/9/11 18:05:38

基于多智能体协作的AI群主系统:从架构设计到工程实践

1. 项目概述:当AI Agent成为群聊“群主”最近在折腾一个挺有意思的实验:让一个AI Agent去当微信群或者QQ群的“群主”。这听起来有点科幻,但实际跑起来,效果远超预期。原本插科打诨、分享日常的普通群聊,在AI群主接管后…

2026/9/13 19:29:39

家装电线选购与施工全指南:正泰BV2.5平方线实测与避坑

最近家里装修,水电改造是重头戏。选电线时,在网上看了很多攻略,也咨询了老师傅,最后锁定了正泰(CHNT)的BV2.5平方单芯硬线。很多博主和装修清单都把它列为“家装必备”,但实际用下来&#xff0c…

2026/9/18 14:17:15

Oracle复制表数据全攻略:从CTAS到跨库迁移的实践指南

做过几年Oracle运维和开发的朋友,应该都见过类似的场景:隔壁同事建了一张空表,然后打开PL/SQL Developer,写了个几十行的游标循环,一条一条把数据往里塞,塞完还要跟你抱怨一句“这表数据量太大,…

2026/9/18 14:17:15

麦肯锡结构化战略思维:用MECE拆解复杂技术问题

简介:一份面向企业中高层管理者、战略规划人员及咨询行业新人的麦肯锡结构化战略思维完整课件,共 82 页 PPT。内容从战略与战术的本质区别切入,系统讲解问题观、结构化拆分、MECE 原则、多维度思考等核心概念,并展开四大原则、麦肯…

2026/9/18 14:17:15

SVGO v3到v4迁移指南:5个步骤搞懂所有破坏性变更

SVGO v3到v4迁移指南:5个步骤搞懂所有破坏性变更 【免费下载链接】svgo SVG Optimizer for Node.js and CLI. ⚙️ 项目地址: https://gitcode.com/gh_mirrors/sv/svgo 如果你正在使用 SVGO(Node.js 生态最流行的 SVG 优化器与命令行压缩工具)&am…

2026/9/18 14:13:01

拯救者Y7000黑屏故障排查与维修实战指南

1. 项目概述:一台黑屏的拯救者Y7000,到底卡在哪一步? 联想拯救者Y7000系列笔记本,从2018年第一代搭载i5-8300H开始,到后来的i7-9750H、i7-10750H、i5-11400H,再到2023年款的R7-7840HS,它始终是学…

2026/9/18 0:01:09

Google Colab 实战:运行模型、数据加载与报错排查

1. 为什么我劝你先搞懂 Colab 的运行模型1.1 Colab 到底是什么,跟本地跑代码差在哪Google Colab 简单说就是一台跑在浏览器里的 Linux 虚拟机,你打开一个 Notebook,背后就连上了一台带 GPU 的远程机器。你在单元格里敲的每一行 Python&#x…

2026/9/18 0:01:09

C语言数据类型与表达式详解

1. C语言数据与数据类型概述在C语言编程中,数据是程序处理的核心对象。理解数据的分类和特性是掌握C语言的基础。C语言中的数据主要分为四大类:常量、变量、表达式和函数。这些数据类型构成了C语言程序的基本元素,每种类型都有其独特的特性和…

2026/9/18 0:01:09

SQL时间字段指定时间段查询:区间语义、索引与时区避坑

上周排查一个线上问题&#xff0c;用户反馈"昨天的订单一条都没查到"&#xff0c;但数据库里明明躺着两千多条。最后定位下来&#xff0c;不是数据丢了&#xff0c;也不是接口挂了&#xff0c;而是那个查询条件把时间段写成了> 2024-05-20 00:00:00 AND < 2024…

2026/9/18 14:13:03

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行&#xff0c;Type-C接口算是典型的“看着简单&#xff0c;做起来全坑”的东西。光引脚就24个&#xff0c;高低速信号、电源、控制线全部塞在一个小小的连接器里&#xff0c;如果PCB布局不做规划&#xff0c;打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/18 14:13:02

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/18 14:13:02

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
咨询二维码