智慧AI-铁缺陷检测系统(采用NEU-DET数据集)

基于YOLO+AI的缺陷检测系统,支持图片检测、批量检测、视频检测、摄像头检测四种方式。
可以检测【Crazing(裂纹)、Inclusion(夹杂物)、Patches(斑块)、Pitted Surface(麻面)、Rolled-in Scale(轧入氧化皮)、Scratches(划痕)】类型。

技术栈使用YOLO、DeepSeek、Pytorch、SpringBoot、MyBatis-Plus、Vue3、Echarts、Ts、element-plus、Flask、Axios、MySQL等技术。系统还支持分用户管理。分为管理员和普通用户,管理员可查看所有记录,并管理用户。普通用户只可查看自己的记录。界面简洁、美观。支持主题色修改、布局样式修改、组件大小修改等。

1

1

1

1

1

这是一个基于 YOLO 深度学习模型与 NEU-DET 数据集的钢铁表面缺陷检测系统的完整技术解决方案。
该方案融合了前后端分离架构与工业AI检测技术,旨在提供一个从数据采集、模型推理到用户管理的全链路解决方案。
1. 项目概述
- 项目名称:钢铁表面缺陷智能检测系统
- 核心目标:利用计算机视觉技术自动识别钢铁表面的六种典型缺陷(裂纹、夹杂物、斑块、麻面、轧入氧化皮、划痕)。
- 数据集:采用工业界标准的 NEU-DET 数据集,包含 1,800 张高分辨率图像,覆盖 6 类缺陷。
- 业务逻辑:
- 普通用户:仅能查看和管理自己的检测记录。
- 管理员:拥有最高权限,可查看全局数据、管理用户及系统配置。
2. 技术架构设计
系统采用 前后端分离 架构,后端提供 RESTful API,前端负责交互展示。
2.1 整体架构图
#mermaid-svg-nU65JG2v8Ho4O87d{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-nU65JG2v8Ho4O87d .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-nU65JG2v8Ho4O87d .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-nU65JG2v8Ho4O87d .error-icon{fill:#552222;}#mermaid-svg-nU65JG2v8Ho4O87d .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-nU65JG2v8Ho4O87d .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-nU65JG2v8Ho4O87d .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-nU65JG2v8Ho4O87d .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-nU65JG2v8Ho4O87d .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-nU65JG2v8Ho4O87d .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-nU65JG2v8Ho4O87d .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-nU65JG2v8Ho4O87d .marker{fill:#333333;stroke:#333333;}#mermaid-svg-nU65JG2v8Ho4O87d .marker.cross{stroke:#333333;}#mermaid-svg-nU65JG2v8Ho4O87d svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-nU65JG2v8Ho4O87d p{margin:0;}#mermaid-svg-nU65JG2v8Ho4O87d .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-nU65JG2v8Ho4O87d .cluster-label text{fill:#333;}#mermaid-svg-nU65JG2v8Ho4O87d .cluster-label span{color:#333;}#mermaid-svg-nU65JG2v8Ho4O87d .cluster-label span p{background-color:transparent;}#mermaid-svg-nU65JG2v8Ho4O87d .label text,#mermaid-svg-nU65JG2v8Ho4O87d span{fill:#333;color:#333;}#mermaid-svg-nU65JG2v8Ho4O87d .node rect,#mermaid-svg-nU65JG2v8Ho4O87d .node circle,#mermaid-svg-nU65JG2v8Ho4O87d .node ellipse,#mermaid-svg-nU65JG2v8Ho4O87d .node polygon,#mermaid-svg-nU65JG2v8Ho4O87d .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-nU65JG2v8Ho4O87d .rough-node .label text,#mermaid-svg-nU65JG2v8Ho4O87d .node .label text,#mermaid-svg-nU65JG2v8Ho4O87d .image-shape .label,#mermaid-svg-nU65JG2v8Ho4O87d .icon-shape .label{text-anchor:middle;}#mermaid-svg-nU65JG2v8Ho4O87d .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-nU65JG2v8Ho4O87d .rough-node .label,#mermaid-svg-nU65JG2v8Ho4O87d .node .label,#mermaid-svg-nU65JG2v8Ho4O87d .image-shape .label,#mermaid-svg-nU65JG2v8Ho4O87d .icon-shape .label{text-align:center;}#mermaid-svg-nU65JG2v8Ho4O87d .node.clickable{cursor:pointer;}#mermaid-svg-nU65JG2v8Ho4O87d .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-nU65JG2v8Ho4O87d .arrowheadPath{fill:#333333;}#mermaid-svg-nU65JG2v8Ho4O87d .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-nU65JG2v8Ho4O87d .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-nU65JG2v8Ho4O87d .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-nU65JG2v8Ho4O87d .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-nU65JG2v8Ho4O87d .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-nU65JG2v8Ho4O87d .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-nU65JG2v8Ho4O87d .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-nU65JG2v8Ho4O87d .cluster text{fill:#333;}#mermaid-svg-nU65JG2v8Ho4O87d .cluster span{color:#333;}#mermaid-svg-nU65JG2v8Ho4O87d div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-nU65JG2v8Ho4O87d .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-nU65JG2v8Ho4O87d rect.text{fill:none;stroke-width:0;}#mermaid-svg-nU65JG2v8Ho4O87d .icon-shape,#mermaid-svg-nU65JG2v8Ho4O87d .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-nU65JG2v8Ho4O87d .icon-shape p,#mermaid-svg-nU65JG2v8Ho4O87d .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-nU65JG2v8Ho4O87d .icon-shape .label rect,#mermaid-svg-nU65JG2v8Ho4O87d .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-nU65JG2v8Ho4O87d .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-nU65JG2v8Ho4O87d .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-nU65JG2v8Ho4O87d :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}
客户端 Web App
Flask / SpringBoot API 网关
YOLO 模型推理服务
MySQL 数据库
2.2 技术栈选型表
| 前端框架 | Vue 3 + TypeScript | 组件化开发,类型安全,生态丰富。 |
| UI 组件库 | Element Plus | 企业级 UI 库,提供完善的表格、对话框、表单组件。 |
| 数据可视化 | ECharts | 强大的图表库,用于展示缺陷分布、检测趋势等统计信息。 |
| 后端框架 | Spring Boot / Flask | Spring Boot 适合复杂业务逻辑;Flask 轻量级,适合快速集成 YOLO 推理。 |
| 深度学习 | PyTorch + YOLO | 工业检测主流模型,基于 PyTorch 实现高性能推理。 |
| 数据库 | MySQL + MyBatis-Plus | 关系型数据库存储用户信息和检测记录;MyBatis-Plus 提高开发效率。 |
| 通信协议 | Axios | 前端与后端进行 HTTP/HTTPS 通信。 |
3. 功能模块设计
3.1 AI 检测核心模块
- 模型训练:基于 NEU-DET 数据集微调 YOLOv8 或 YOLOv5 模型,针对六类缺陷进行训练。
- 推理服务:
- 图片检测:上传单张图片,返回带框图和缺陷列表。
- 批量检测:上传文件夹/压缩包,批量处理并导出 Excel 报告。
- 视频检测:逐帧分析视频流,实时标注缺陷。
- 摄像头检测:连接工业相机或普通摄像头,进行实时在线检测。
3.2 用户与权限管理模块
- 角色划分:
- 普通用户:注册登录,只能查询自己的 user_id 对应的检测历史。
- 管理员:拥有 admin 角色,可查看所有用户数据,进行增删改查。
- 数据隔离:在 SQL 查询中强制加入 WHERE user_id = ? 条件(普通用户)或不限制(管理员)。
3.3 系统配置模块
- 主题定制:利用 Element Plus 的主题工具或 CSS 变量,支持用户切换主题色(如深色模式/浅色模式)。
- 布局调整:支持响应式布局,适配不同屏幕尺寸;提供组件大小调节滑块。
4. 数据库设计 (关键表)
4.1 用户表 (user)
| id | INT | 主键自增 |
| username | VARCHAR | 用户名 |
| password | VARCHAR | 密码 (MD5/BCrypt加密) |
| role | ENUM | 角色 (‘user’, ‘admin’) |
| create_time | DATETIME | 注册时间 |
4.2 检测记录表 (detection_record)
| id | INT | 主键 |
| user_id | INT | 外键,关联用户 |
| image_path | VARCHAR | 图片存储路径 |
| result_json | TEXT | 检测结果 (JSON格式,包含类别、置信度、坐标) |
| defect_count | INT | 缺陷总数 |
| status | TINYINT | 状态 (0: 失败, 1: 成功) |
| detect_time | DATETIME | 检测时间 |
5. 代码实现示例 (后端 Flask + YOLO)
以下为后端核心推理逻辑的伪代码示例:
from flask import Flask, request, jsonify
import cv2
import torch
from PIL import Image
import io
# 加载预训练的 YOLO 模型 (基于NEU-DET训练)
model = torch.hub.load('ultralytics/yolov5', 'custom', path='neu_det_best.pt')
app = Flask(__name__)
@app.route('/api/detect', methods=['POST'])
def detect():
if 'image' not in request.files:
return jsonify({'error': 'No image provided'}), 400
# 1. 获取图片
file = request.files['image']
img_bytes = file.read()
img = Image.open(io.BytesIO(img_bytes))
# 2. YOLO 推理
results = model(img)
# 3. 解析结果
# classes: [0,1,2,3,4,5] -> ['Crazing', 'Inclusion', …]
defects = results.pandas().xyxy[0].to_dict(orient="records")
# 4. 数据库存储逻辑 (此处省略数据库连接代码)
# save_to_db(user_id, defects, img_path)
return jsonify({
'success': True,
'defects': defects,
'total_count': len(defects)
})
if __name__ == '__main__':
app.run(debug=True)
6. 前端界面设计 (Vue 3 + Element Plus)
前端页面包含以下组件:
- 上传区:拖拽上传图片/视频。
- 展示区:Canvas 或 Image 标签展示原图和检测结果图。
- 数据区:表格展示具体的缺陷位置和置信度。
7. 部署方案
- 开发环境:Windows/Linux + Anaconda + VSCode。
- 生产环境:
- 前端:打包为静态文件,部署在 Nginx 服务器。
- 后端:使用 Gunicorn 或 Java Jar 包部署在 Linux 服务器。
- 模型服务:可考虑使用 TensorRT 优化推理速度,或者使用 ONNX 格式部署。



