当前位置: 首页 > news >正文

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.jsqmd.com/news/206054/

相关文章:

  • 如何在边缘设备中实现多语言支持?
  • 网络安全技术全景解读:从基础概念到前沿趋势
  • 卷积神经网络深度探索:VGG网络深度学习与应用
  • 北约2025网络安全课程:剖析恐怖主义的数字战术与防御策略
  • Arbess速成手册(11) - 集成GitLab实现.Net 项目自动化构建并主机部署
  • 吐血推荐8个一键生成论文工具,研究生轻松搞定学术写作!
  • KingbaseES数据库备份与恢复深度解析:原理、策略与实践
  • 一篇讲透网络安全:核心技术与知识图谱构建指南
  • 深度学习毕设项目:基于python深度学习的手势识别数字
  • 如何训练——变电站设备分割数据集15类地面分割数据集,共1660幅图像注释了15类,包括绝缘子、隔离开关、变压器和变电站环境中常见的其他设备人工、固定和AGV安装的相机组合拍摄的,数据集1.6GB
  • 一文讲透黑客、骇客、白客、红客:别再傻傻分不清!
  • 计算机深度学习毕设实战-基于人工智能的手势识别数字
  • Arbess速成手册(12) - 集成GitLab实现C++项目自动化构建并主机部署
  • 艾体宝案例 | 某大型科技企业基于Lepide构建可持续数据安全审计体系的实战案例
  • java: 警告: 源发行版 17 需要目标发行版 17
  • Arbess速成手册(13) - 集成Gitee、SonarQube实现Node.js项目自动化构建并主机部署
  • 基于SpringBoot的房屋租赁平台 Java源代码 免费分享
  • 7D-AI系列:AI大模型通用技术架构图
  • Springboot健身管理系统85ws5(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
  • Python全栈项目--基于Django的项目管理系统
  • 如何利用工业智能体提升汽车制造效率与良品率?
  • springboot分页不分页情况
  • 深度学习毕设选题推荐:基于python深度学习的手势识别数字机器学习
  • 如何通过模具智能管理降低汽车生产线的停机时间?
  • 深度学习计算机毕设之深度学习基于python-CNN的常见鱼类分类识别
  • 【毕业设计】基于python深度学习的手势识别数字
  • 自由职业者如何在AI浪潮中破局?这份「考证+实战」进阶指南请收好!
  • 【课程设计/毕业设计】机器学习 基于python深度学习的手势识别数字
  • 深度学习计算机毕设之人工智能基于python深度学习的手势识别数字
  • 英矽智能与赛诺菲签署8.88亿美元AI新药研发合作协议