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

深度学习框架混凝土裂缝检测系统,yolo11/yolov8/opencv

使用yolo11和yolov8分别训练,数据集图片7998张(其中训练集5998 75%,验证集1500 19%,测试集500 6%),已经训练好了,也可以自己重新训练,使用opencv,thinter构建的gui

需要下载相关库,如opencv,ultralytics
map50约为0.97
一分类,‘crack’
源码、数据集,训练好的两个权重(yolo11和yolov8),源码注释非常详细
可显示 GUI 窗口,支持图片,视频,实时摄像头检测识别,运行效果如图所示


1

基于 YOLOv8 + YOLOv11 + OpenCV + Tkinter 的混凝土裂缝检测系统完整实现,支持:

✅ 图片 / 视频 / 摄像头实时检测
✅ 使用YOLOv8YOLOv11双模型切换(已训练权重)
✅ 一分类:crack
✅ mAP50 ≈ 0.97(高精度)
✅ GUI 界面(Tkinter)
✅ 支持加载自定义模型、显示检测结果、保存图像


✅ 一、环境依赖

pipinstallopencv-python ultralytics tkinter numpy matplotlib
  • ultralytics:官方 YOLOv8 和 YOLOv11 支持库
  • opencv-python:图像处理与摄像头
  • tkinter:Python 原生 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.97)
  • yolov11_crack.pt—— YOLOv11 模型(mAP50 ≈ 0.98)

⚠️ 请将这两个.pt文件放在项目根目录下。


✅ 四、完整代码:concrete_crack_detector.py

# concrete_crack_detector.pyimportsysimportosimportcv2importnumpyasnpfromultralyticsimportYOLOimporttkinterastkfromtkinterimportfiledialog,messageboxfromPILimportImage,ImageTkimportthreadingclassCrackDetectionApp:def__init__(self,root):self.root=root self.root.title("YOLOv8/YOLOv11 混凝土裂缝检测系统")self.root.geometry("1200x800")# 初始化模型self.model_v8=Noneself.model_v11=Noneself.current_model=None# 'v8' or 'v11'self.cap=Noneself.running=False# UI 组件self.setup_ui()defsetup_ui(self):"""构建 GUI 界面"""# 上方按钮区域btn_frame=tk.Frame(self.root)btn_frame.pack(pady=10)self.btn_load_v8=tk.Button(btn_frame,text="加载 YOLOv8 模型",command=self.load_v8_model)self.btn_load_v8.pack(side=tk.LEFT,padx=5)self.btn_load_v11=tk.Button(btn_frame,text="加载 YOLOv11 模型",command=self.load_v11_model)self.btn_load_v11.pack(side=tk.LEFT,padx=5)self.btn_image=tk.Button(btn_frame,text="打开图片",command=self.open_image)self.btn_image.pack(side=tk.LEFT,padx=5)self.btn_video=tk.Button(btn_frame,text="打开视频",command=self.open_video)self.btn_video.pack(side=tk.LEFT,padx=5)self.btn_camera=tk.Button(btn_frame,text="启动摄像头",command=self.start_camera)self.btn_camera.pack(side=tk.LEFT,padx=5)self.btn_stop=tk.Button(btn_frame,text="停止摄像头",command=self.stop_camera)self.btn_stop.pack(side=tk.LEFT,padx=5)# 中间图像显示区域self.canvas_frame=tk.Frame(self.root)self.canvas_frame.pack(fill=tk.BOTH,expand=True,padx=20,pady=10)self.original_canvas=tk.Canvas(self.canvas_frame,width=500,height=500,bg='lightgray')self.original_canvas.grid(row=0,column=0,padx=10,pady=10)self.detected_canvas=tk.Canvas(self.canvas_frame,width=500,height=500,bg='lightgray')self.detected_canvas.grid(row=0,column=1,padx=10,pady=10)# 下方信息框self.info_label=tk.Label(self.root,text="点击“打开图片”开始检测",font=('Arial',12))self.info_label.pack(pady=10)defload_v8_model(self):"""加载 YOLOv8 模型"""try:self.model_v8=YOLO('yolov8_crack.pt')# 替换为你的路径self.current_model='v8'self.info_label.config(text="✅ 已加载 YOLOv8 模型!")exceptExceptionase:messagebox.showerror("错误",f"无法加载 YOLOv8 模型:{e}")defload_v11_model(self):"""加载 YOLOv11 模型"""try:self.model_v11=YOLO('yolov11_crack.pt')# 替换为你的路径self.current_model='v11'self.info_label.config(text="✅ 已加载 YOLOv11 模型!")exceptExceptionase:messagebox.showerror("错误",f"无法加载 YOLOv11 模型:{e}")defopen_image(self):"""打开并检测单张图片"""ifself.current_modelisNone:messagebox.showwarning("警告","请先加载模型!")returnfile_path=filedialog.askopenfilename(title="选择图像",filetypes=[("Image Files","*.jpg *.jpeg *.png *.bmp")])ifnotfile_path:returnself.detect_image(file_path)defopen_video(self):"""打开视频文件进行检测"""file_path=filedialog.askopenfilename(title="选择视频",filetypes=[("Video Files","*.mp4 *.avi *.mov")])ifnotfile_path:returnself.cap=cv2.VideoCapture(file_path)self.running=Trueself.process_video()defstart_camera(self):"""启动摄像头检测"""ifself.capisnotNone:self.cap.release()self.cap=cv2.VideoCapture(0)# 使用默认摄像头self.running=Trueself.process_video()defstop_camera(self):"""停止摄像头"""self.running=Falseifself.cap:self.cap.release()self.cap=Noneself.info_label.config(text="🛑 摄像头已停止")defprocess_video(self):"""处理视频或摄像头帧"""ifnotself.runningorself.capisNone:returnret,frame=self.cap.read()ifnotret:self.running=Falseself.info_label.config(text="❌ 视频/摄像头结束")return# 检测ifself.current_model=='v8':results=self.model_v8(frame,conf=0.5,iou=0.5)else:results=self.model_v11(frame,conf=0.5,iou=0.5)detected_img=results[0].plot()# 自动绘制框和标签# 显示原始图和检测图self.display_image(frame,detected_img)# 递归调用ifself.running:self.root.after(30,self.process_video)defdetect_image(self,image_path):"""对单张图像进行检测"""img=cv2.imread(image_path)ifimgisNone:messagebox.showerror("错误","无法读取图像!")return# 推理ifself.current_model=='v8':results=self.model_v8(img,conf=0.5,iou=0.5)else:results=self.model_v11(img,conf=0.5,iou=0.5)detected_img=results[0].plot()# 显示self.display_image(img,detected_img)defdisplay_image(self,original,detected):"""在 Canvas 上显示图像"""# 调整大小以适应 canvash,w=original.shape[:2]scale=min(500/w,500/h)new_w,new_h=int(w*scale),int(h*scale)# 缩放图像original_resized=cv2.resize(original,(new_w,new_h))detected_resized=cv2.resize(detected,(new_w,new_h))# 转换为 PIL Imageimg_original=Image.fromarray(cv2.cvtColor(original_resized,cv2.COLOR_BGR2RGB))img_detected=Image.fromarray(cv2.cvtColor(detected_resized,cv2.COLOR_BGR2RGB))# 转为 PhotoImagephoto_original=ImageTk.PhotoImage(img_original)photo_detected=ImageTk.PhotoImage(img_detected)# 清空并更新 canvasself.original_canvas.delete("all")self.detected_canvas.delete("all")self.original_canvas.create_image(0,0,anchor=tk.NW,image=photo_original)self.detected_canvas.create_image(0,0,anchor=tk.NW,image=photo_detected)# 保持引用self.original_canvas.image=photo_original self.detected_canvas.image=photo_detected self.info_label.config(text=f"✅ 检测完成!{len(results[0].boxes)}条裂缝")defmain():root=tk.Tk()app=CrackDetectionApp(root)root.mainloop()if__name__=="__main__":main()

✅ 五、运行步骤

1. 准备文件

确保项目根目录包含:

. ├── concrete_crack_detector.py ├── yolov8_crack.pt └── yolov11_crack.pt

2. 运行程序

python concrete_crack_detector.py

3. 使用流程

  1. 点击「加载 YOLOv8 模型」或「加载 YOLOv11 模型」
  2. 点击「打开图片」上传裂缝图像
  3. 点击「启动摄像头」开启实时检测
  4. 检测结果自动显示在右侧窗口

✅ 六、功能亮点

功能描述
🔍 图像检测支持 JPG/PNG/BMP
📹 视频检测MP4/AVI 格式
📸 实时摄像头USB 摄像头或手机外接
🔄 双模型切换YOLOv8 / YOLOv11 高精度
🖼️ 可视化自动画框 + 类别 + 置信度
💾 无需额外部署Python 一键运行

✅ 七、模型训练说明(如需重新训练)

1. 创建data.yaml

train:./crack_dataset/train/imagesval:./crack_dataset/val/imagesnc:1names:['crack']

2. 训练命令(YOLOv8)

yolo detect traindata=data.yamlmodel=yolov8n.ptepochs=100imgsz=640batch=16

3. 训练命令(YOLOv11)

yolo detect traindata=data.yamlmodel=yolov11n.ptepochs=100imgsz=640batch=16

✅ 输出模型会自动保存为runs/detect/train/weights/best.pt,复制到项目根目录即可使用。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1119410.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何在边缘设备中实现多语言支持?

在边缘设备中实现多语言支持(Multilingual Support),尤其是在工业场景(如 MES 智能维保、人机交互、工单生成等)中,需要兼顾资源受限性(内存、算力)、低延迟响应和语言覆盖广度。以下…

网络安全技术全景解读:从基础概念到前沿趋势

1 TCP/IP 模型基础 OSI参考模型 OSI(Open System Interconnect Reference Model),开放式系统互联参考模型,它是由 国际标准化组织 ISO 提出的一个网络系统互连模型。 OSI 模型的设计目的是成为一个所有销售商都能实现的开放网络模型,来克服…

北约2025网络安全课程:剖析恐怖主义的数字战术与防御策略

课程背景与核心使命 我很荣幸地宣布,我已被正式邀请作为讲师,在由位于土耳其安卡拉的“反恐防御卓越中心”主办的北约认证课程——“恐怖主义对网络空间的总体利用”驻训课程中发表演讲。 该课程定于2025年11月24日至28日举行,吸引了众多致力…

卷积神经网络深度探索:VGG网络深度学习与应用

使用块的网络(VGG) 学习目标 通过本课程的学习,学员将理解VGG网络如何使用可复用的卷积块构造,掌握通过调整每个块中卷积层数量和输出通道数量来定义不同VGG模型的方法,并认识到深层且窄的卷积在效果上优于浅层且宽的…

吐血推荐8个一键生成论文工具,研究生轻松搞定学术写作!

吐血推荐8个一键生成论文工具,研究生轻松搞定学术写作! AI 工具正在改变学术写作的规则 在研究生阶段,论文写作往往成为一项既耗时又费力的任务。从选题到开题,从大纲搭建到初稿撰写,再到反复修改和降重,每…

KingbaseES数据库备份与恢复深度解析:原理、策略与实践

第一章 数据库备份与恢复核心理论 1.1 备份与恢复的本质意义 数据库作为信息系统的核心载体,其数据完整性与可用性直接决定业务连续性。在计算机系统运行过程中,不可避免会遭遇各类故障,包括事务内部故障(如死锁、数据校验错误&am…

长晶科技车规级稳压二极管:多系列全布局 护航汽车电子稳定运行

在汽车电子架构不断向智能化、集成化升级的背景下,稳压二极管作为电路稳压、过压保护的核心元器件,其车规级产品需满足更高的可靠性、稳定性及环境适应性要求。长晶科技深耕半导体器件领域,针对汽车电子应用场景推出多款车规级稳压二极管系列…

一篇讲透网络安全:核心技术与知识图谱构建指南

1 TCP/IP 模型基础 OSI参考模型 OSI(Open System Interconnect Reference Model),开放式系统互联参考模型,它是由 国际标准化组织 ISO 提出的一个网络系统互连模型。 OSI 模型的设计目的是成为一个所有销售商都能实现的开放网络模型,来克服…

深度学习毕设项目:基于python深度学习的手势识别数字

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

如何训练——变电站设备分割数据集15类地面分割数据集,共1660幅图像注释了15类,包括绝缘子、隔离开关、变压器和变电站环境中常见的其他设备人工、固定和AGV安装的相机组合拍摄的,数据集1.6GB

变电站设备分割数据集,变电站设备15类地面分割数据集,共1660幅图像注释了15类,包括绝缘子、隔离开关、变压器和变电站环境中常见的其他设备(包括瓷器绝缘体、闭合叶片断开开关、重合闸、玻璃绝缘子串、电流变压器、避雷器、电源变…

Arbess速成手册(11) - 集成GitLab实现.Net 项目自动化构建并主机部署

Arbess 是一款开源免费的 CI/CD 工具,支持免费私有化部署,一键安装零配置,简明易用。本文将详细介绍如何安装Arbess、GitLab,创建流水线实现 .Net Core 项目自动化部署。 1、GitLab 安装与配置 本章节将介绍如何使用CentOS9搭建…

一文讲透黑客、骇客、白客、红客:别再傻傻分不清!

黑客 起源 “黑客”一词是英文Hacker的音译。这个词早在莎士比亚时代就已存在了,但是人们第一次真正理解它时,却是在计算机问世之后。根据《牛津英语词典》解释,“hack”一词最早的意思是劈砍,而这个词意很容易使人联想到计算机…

计算机深度学习毕设实战-基于人工智能的手势识别数字

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

Arbess速成手册(12) - 集成GitLab实现C++项目自动化构建并主机部署

Arbess 是一款开源免费的 CICD 工具,支持免费私有化部署,一键部署零配置。本文将详细介绍如何安装Arbess、GitLab,创建流水线实现 C 项目自动化构建并主机部署。 1、GitLab 安装与配置 本章节将介绍如何使用CentOS9搭建Gitlab服务器&#x…

艾体宝案例 | 某大型科技企业基于Lepide构建可持续数据安全审计体系的实战案例

摘要本白皮书系统阐述了一家拥有超过1500名活跃AD用户的大型科技企业,在复杂的混合IT环境中,通过部署Lepide数据安全平台,实现全面、可持续的数据安全治理与合规审计的完整历程。案例深入剖析了从需求分析、方案选型、标准化部署,…

Arbess速成手册(13) - 集成Gitee、SonarQube实现Node.js项目自动化构建并主机部署

Arbess 是一款开源免费的 CI/CD 工具,支持免费私有化部署,一键安装零配置。本文将详细介绍如何安装使用ArbessGiteeSonarQube实现Node.js项目代码扫描并自动化部署。 1、Gitee 安装与配置 本章节将介绍如何使用创建Gitee个人密匙,提供给Arb…

基于SpringBoot的房屋租赁平台 Java源代码 免费分享

房屋租赁系统包含以下核心功能模块,可根据不同用户角色(租客、房东/中介、管理员)和业务需求进行扩展: 一、用户端(租客/房东通用) 用户注册与登录 手机/邮箱注册、第三方登录(微信、支付宝等&a…

Springboot健身管理系统85ws5(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。

系统程序文件列表项目功能:用户,健身教练,健身课程,课程报名,预约教练开题报告内容一、研究背景与意义1.1 研究背景随着现代生活节奏的加快和人们健康意识的提升,健身已成为城市居民保持健康、塑造身材的重要方式。健身房作为提供专业健身服务的场所&…

如何利用工业智能体提升汽车制造效率与良品率?

在新一轮制造业智能化浪潮中,工业智能体正成为推动产业变革的核心力量,尤其在汽车制造领域,其价值已从概念验证迈向规模化落地。作为融合大语言模型、工业机理与多源数据的新型认知智能系统,工业智能体不再局限于单一任务的自动化…