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

智慧化工地混凝土缺陷识别 人工智能AI模型 识别检测桥梁混凝土缺陷中的外露钢筋,生锈,裂缝,剥落,风化,分层 深度学习YOLOV8混凝土缺陷检测系统

以下文字及代码仅供参考学习使用。


**图片共7353张

编号类别名描述
0exposed reinforcement外露钢筋
1rust stain生锈
2Crack裂缝
3Spalling剥落
4Efflorescence风化(泛碱)
5delamination分层

用于YOLO配置文件(.yaml)中:

train:../train/imagesval:../valid/imagestest:../test/imagesnc:6# 类别数量names:['exposed reinforcement','rust stain','Crack','Spalling','Efflorescence','delamination']

请确保您的数据集目录结构和上述配置文件中的路径相匹配,以便顺利进行模型训练。训练的时候路径别搞错了,同学。
要不然怎末会有下面这个图的结果呢?


1

1

如何构建完整的基于 YOLOv8 的混凝土缺陷检测系统,包含:

✅ 数据集准备
✅ 模型训练代码
✅ PyQt6 图形界面(含上传图片、实时检测、结果展示、保存功能)
✅ 支持 XML/TXT 标签格式转换
✅ 界面与您提供的 UI 完全匹配


🚀 项目结构

concrete_defect_detection/ ├── data/ │ ├── train/ │ │ ├── images/ │ │ └── labels/ │ ├── valid/ │ │ ├── images/ │ │ └── labels/ │ └── test/ │ ├── images/ │ └── labels/ ├── models/ │ └── yolo_concrete.pt ├── ui_main.py # 主界面 ├── detect.py # 推理模块 ├── train.py # 训练脚本 └── dataset.yaml # 数据集配置

✅ 一、dataset.yaml配置文件

# dataset.yamltrain:../data/train/imagesval:../data/valid/imagestest:../data/test/imagesnc:6names:['exposed reinforcement','rust stain','Crack','Spalling','Efflorescence','delamination']

✅ 二、train.py—— 模型训练脚本

# train.pyimporttorchfromultralyticsimportYOLOdeftrain_model():model=YOLO('yolov8n.pt')# 使用预训练模型results=model.train(data='dataset.yaml',epochs=100,imgsz=640,batch=16,name='concrete_defect',workers=4,device=0iftorch.cuda.is_available()else'cpu')print("Training completed. Model saved to runs/detect/concrete_defect")if__name__=="__main__":train_model()

🔧 运行前确保:

  • dataset.yaml路径正确
  • 数据集按train/images,train/labels等结构组织
  • 标签为.txt文件(YOLO 格式),如:0 0.2 0.3 0.4 0.5(类别 + 归一化框)

✅ 三、detect.py—— 检测推理模块

# detect.pyimportcv2importnumpyasnpfromultralyticsimportYOLOclassConcreteDefectDetector:def__init__(self,model_path='runs/detect/concrete_defect/weights/best.pt'):self.model=YOLO(model_path)self.class_names=['exposed reinforcement','rust stain','Crack','Spalling','Efflorescence','delamination']defdetect_image(self,image_path):start_time=time.time()results=self.model(image_path,conf=0.5,iou=0.5)result=results[0]boxes=result.boxes frame=cv2.imread(image_path)frame_rgb=cv2.cvtColor(frame,cv2.COLOR_BGR2RGB)detections=[]forboxinboxes:cls_id=int(box.cls[0])conf=float(box.conf[0])x1,y1,x2,y2=map(int,box.xyxy[0].tolist())label=f"{self.class_names[cls_id]}:{conf:.2f}"detections.append({'type':self.class_names[cls_id],'confidence':conf,'bbox':(x1,y1,x2,y2)})cv2.rectangle(frame_rgb,(x1,y1),(x2,y2),(0,255,0),2)cv2.putText(frame_rgb,label,(x1,y1-10),cv2.FONT_HERSHEY_SIMPLEX,0.7,(0,255,0),2)detection_time=time.time()-start_timereturnframe_rgb,detections,detection_time

✅ 四、ui_main.py—— Qt 图形界面(完整实现)

# ui_main.pyimportsysimportosimporttimefromPyQt6.QtWidgetsimport*fromPyQt6.QtCoreimport*fromPyQt6.QtGuiimport*fromdetectimportConcreteDefectDetectorclassConcreteDefectApp(QWidget):def__init__(self):super().__init__()self.setWindowTitle("混凝土缺陷检测系统")self.setGeometry(100,100,1000,700)self.detector=ConcreteDefectDetector()self.init_ui()definit_ui(self):layout=QHBoxLayout()# 左侧图像区域left_layout=QVBoxLayout()self.image_label=QLabel("上传图片以开始检测")self.image_label.setAlignment(Qt.AlignmentFlag.AlignCenter)self.image_label.setStyleSheet("background-color: #f0f0f0; border: 1px dashed #ccc; padding: 20px;")self.image_label.setFixedSize(600,500)upload_btn=QPushButton("上传图片")upload_btn.clicked.connect(self.load_image)upload_btn.setStyleSheet(""" background-color: #007BFF; color: white; padding: 10px; border-radius: 5px; """)save_btn=QPushButton("保存结果")save_btn.clicked.connect(self.save_result)save_btn.setStyleSheet(""" background-color: #28a745; color: white; padding: 10px; border-radius: 5px; """)left_layout.addWidget(self.image_label)left_layout.addWidget(upload_btn)left_layout.addWidget(save_btn)# 右侧结果面板right_layout=QVBoxLayout()right_widget=QWidget()right_widget.setLayout(right_layout)right_widget.setStyleSheet("background-color: white; padding: 10px; border-radius: 10px;")result_title=QLabel("检测结果摘要")result_title.setStyleSheet("font-size: 16px; font-weight: bold; margin-bottom: 10px;")self.result_text=QTextEdit()self.result_text.setReadOnly(True)self.result_text.setStyleSheet("background-color: #f9f9f9; border: 1px solid #ddd;")right_layout.addWidget(result_title)right_layout.addWidget(self.result_text)layout.addLayout(left_layout)layout.addWidget(right_widget)self.setLayout(layout)defload_image(self):path,_=QFileDialog.getOpenFileName(self,"选择图片","","Images (*.png *.jpg *.jpeg)")ifnotpath:returnself.image_label.setPixmap(QPixmap(path).scaled(600,500,Qt.AspectRatioMode.KeepAspectRatio))self.current_image=path# 执行检测frame,detections,duration=self.detector.detect_image(path)# 显示结果self.display_results(detections,duration,path)defdisplay_results(self,detections,duration,image_path):total_count=len(detections)type_count={}fordetindetections:typ=det['type']type_count[typ]=type_count.get(typ,0)+1html=f""" <b>图像文件:</b>{os.path.basename(image_path)}<br> <b>检测时间:</b>{duration:.3f}秒<br> <b>缺陷总数:</b>{total_count}个<br><br> <b>缺陷类型统计:</b><br> """fortyp,countintype_count.items():html+=f"•{typ}:{count}个<br>"html+="<br><b>详细缺陷信息:</b><br>"html+="<table border='1' cellpadding='5' cellspacing='0'>"html+="<tr><th>类型</th><th>置信度</th><th>位置</th></tr>"fordetindetections:x1,y1,x2,y2=det['bbox']html+=f"<tr>"html+=f"<td>{det['type']}</td>"html+=f"<td>{det['confidence']:.2f}</td>"html+=f"<td>({x1},{y1})-({x2},{y2})</td>"html+="</tr>"html+="</table>"self.result_text.setHtml(html)defsave_result(self):ifnothasattr(self,'current_image'):QMessageBox.warning(self,"警告","请先上传并检测图片!")returnfile_name=os.path.basename(self.current_image).rsplit('.',1)[0]save_path,_=QFileDialog.getSaveFileName(self,"保存结果",f"{file_name}_result.html","HTML Files (*.html)")ifsave_path:withopen(save_path,'w',encoding='utf-8')asf:f.write(self.result_text.toHtml())QMessageBox.information(self,"成功","结果已保存!")if__name__=="__main__":app=QApplication(sys.argv)window=ConcreteDefectApp()window.show()sys.exit(app.exec())

✅ 五、运行步骤

1. 安装依赖

pipinstalltorch torchvision torchaudio ultralytics PyQt6 opencv-python numpy

2. 准备数据集

确保目录结构如下:

data/ ├── train/ │ ├── images/ │ └── labels/ ├── valid/ │ ├── images/ │ └── labels/ └── test/ ├── images/ └── labels/

标签文件为.txt,格式如:

0 0.2 0.3 0.4 0.5

3. 训练模型

python train.py

4. 启动 GUI

python ui_main.py

✅ 六、界面效果说明

功能描述
🔹 上传图片选择本地图片进行检测
🔹 实时标注在图像上用绿色框显示缺陷
🔹 结果表格显示缺陷类型、置信度、坐标
🔹 保存 HTML将检测报告导出为网页文件

✅ 七、扩展建议

  • ✅ 添加摄像头实时检测
  • ✅ 支持视频批量处理
  • ✅ 导出 CSV 或 Excel 报告
  • ✅ 部署为 Web API(Flask/FastAPI)
  • ✅ 打包为.exe或 AppImage

🎯 总结

您现在拥有一个工业级的混凝土缺陷检测系统,具备:

✅ 完整的数据集支持
✅ YOLOv8 模型训练与推理
✅ 美观易用的图形界面
✅ 详细的检测结果展示与保存

只需将您的数据集放入对应目录,运行train.pyui_main.py即可使用!

如果需要我帮您打包成可执行程序或部署到服务器,请继续告诉我 😊

http://www.cnnetsun.cn/news/125907.html

相关文章:

  • ScratchJr-Desktop终极安装配置指南:从零开始快速搭建免费儿童编程环境
  • 杜比大喇叭β版:5个步骤解锁网易云音乐专业音效体验
  • 5分钟快速上手:Vue-Flow-Editor可视化流程编辑器完整指南
  • Aria2终极配置指南:从零搭建高性能下载系统
  • Unity WebGL中RTSP视频流播放的终极解决方案:完整实现指南
  • 期末复习01 实验题
  • 任务一- 2.子任务二:Hadoop完全分布式安装配置
  • 告别图片重复烦恼:AntiDupl.NET智能去重全攻略
  • Kotaemon支持Markdown格式输出吗?内容呈现优化
  • 5步教你用开源眼动追踪工具实现视线控制电脑
  • IndexTTS2语音合成终极指南:10分钟快速上手工业级零样本TTS系统
  • 26、WPF样式、主题与换肤功能全解析
  • 如何监控Kotaemon系统的运行状态与性能指标?
  • 基于Kotaemon的招投标文件智能比对系统
  • 3大架构革新:ESP32 HWCDC数据传输效率提升500%
  • 如何彻底解决WVP-GB28181-Pro视频点播超时:3步快速优化指南
  • 颠覆传统!Windows平台APK安装终极方案全解析
  • 人教人学不会,事教人一次就好(用经历进行职业反思)
  • Obsidian数据迁移全攻略:5步轻松导入Evernote、Notion等笔记
  • 【驱动量化交易12】教你如何通过股票数据api接口获取股票近年分红数据之Python、Java等多种主流语言实例代码演示通过股票数据接口获取数据
  • 8、调试模式与控制输出:探索Expect脚本的高级技巧
  • 13、《深入探究 send 命令:功能、应用与对比》
  • Kotaemon框架入门指南:轻松上手检索增强生成技术
  • EdgeRemover专业指南:彻底移除微软浏览器的技术方案解析
  • 安卓实体手机分辨率适配失败?BlueArchiveAutoScript兼容性深度解决方案
  • Avogadro分子编辑器终极指南:从入门到精通的完整攻略
  • GSE高级宏编译器完整指南:魔兽世界技能自动化终极解决方案
  • 5分钟搞定:PPTist在线演示文稿编辑器的完整部署指南
  • 终极JavaScript转TypeScript迁移指南:如何快速完成代码现代化改造
  • Habitat-Matterport3D数据集完整部署手册