融合YOLO与DeepSeek大模型的钢铁表面缺陷智能检测系统|工业视觉质检全栈项目
融合YOLO与DeepSeek大模型的钢铁表面缺陷智能检测系统|工业视觉质检全栈项目

当前钢铁制造产线表面质检普遍依赖人工肉眼巡检,存在三大核心行业痛点:1. 人工长期目视疲劳,微小裂纹、细微划痕漏检率常年高于22%,批量工件质检一致性极差;2. 传统机器视觉仅输出缺陷框坐标,无法自动给出缺陷成因、工艺整改建议,仍需资深工程师人工研判;3. 现有检测工具仅支持单张图片离线分析,不兼容工业摄像头实时流、视频批量文件夹自动化处理,难以对接产线流水线。
本项目打通目标检测深度学习+大模型工业诊断全链路,基于标准NEU-DET钢材缺陷数据集训练YOLO检测模型,配套前后端完整Web管理平台,实现6类钢材表面缺陷实时识别、批量自动化处理、大模型智能质检分析、缺陷数据可视化统计,一站式解决钢铁行业表面质量智能化升级需求,适配钢厂质检车间、材料实验室、智能制造产线多场景落地。
一、项目核心概述
本项目命名NEU-DET钢铁裂纹智能检测系统,是一套端到端工业视觉缺陷检测全栈解决方案。底层采用YOLO深度学习目标检测框架完成钢材表面6大类缺陷定位识别,上层接入DeepSeek大语言模型对检测结果做专业工业诊断分析;后端采用Python Flask算法推理服务+Java SpringBoot业务管理双服务架构,前端基于Vue3+Element-Plus搭建可视化管理平台,支持图片/视频/工业摄像头实时多路检测、批量文件夹自动化推理、多角色权限管控、缺陷数据图表统计、界面自定义个性化配置。
整套项目交付包含完整标注数据集、预训练模型权重、全注释源码、一键部署文档,可直接二次开发适配铝、铜、板材等其他金属表面检测场景。
1.1 可识别6类钢材表面缺陷清单
| 缺陷英文名称 | 中文缺陷释义 | 工业场景危害 |
|---|---|---|
| Crazing | 表面微裂纹 | 轧制后应力开裂,成品报废 |
| Inclusion | 内部夹杂物 | 材质杂质,降低钢材力学性能 |
| Patches | 表面斑块 | 氧化、锈蚀形成局部色差缺陷 |
| Pitted Surface | 麻面凹点 | 酸洗/轧制产生密集点状凹陷 |
| Rolled-in Scale | 轧入氧化皮 | 高温轧制氧化皮压入板材表层 |
| Scratches | 表面划痕 | 输送、辊道摩擦产生线性损伤 |

二、技术全栈架构分层说明
2.1 深度学习推理层(Python)
- 检测框架:YOLO系列(Pytorch实现)
- 大模型接口:DeepSeek API对接,缺陷智能诊断
- Web推理服务:Flask 轻量图像推理接口
- 数据处理:OpenCV、PIL、Numpy、Albumentations数据增强


2.2 后端业务服务层(Java)
- 核心框架:SpringBoot 2.7、MyBatis-Plus
- 数据库:MySQL 8.0(存储用户、检测记录、缺陷统计数据)
- 权限模块:RBAC多角色权限控制、操作日志持久化

2.3 前端可视化层
- 基础框架:Vue3 + TypeScript
- UI组件库:Element-Plus
- 可视化图表:ECharts(缺陷类型统计、月度质检报表)
- 网络请求:Axios封装全局请求拦截器

三、核心功能模块详解
3.1 多模式图像缺陷检测模块(四大推理模式)
- 单张图片上传检测:支持本地图片拖拽上传,实时返回缺陷标注图、置信度、缺陷类别坐标
- 批量文件夹批量推理:上传本地文件夹压缩包,自动遍历全部图片批量检测,生成汇总统计报表
- 视频流离线分析:上传工业监控视频,逐帧抽取画面完成缺陷检测,输出缺陷出现时间戳
- 工业摄像头实时在线监测:对接USB/工业千兆相机,网页端实时渲染检测画面,缺陷实时弹窗告警
3.2 DeepSeek大模型智能诊断模块(核心创新点)
传统视觉检测仅输出坐标框,本系统将YOLO检测输出的缺陷类型、数量、置信度、缺陷尺寸数据封装结构化Prompt传入DeepSeek大模型,自动输出:
- 当前缺陷产生工艺成因分析
- 轧制、酸洗、热处理工序整改建议
- 同类缺陷批量出现的产线风险预警
- 行业标准下缺陷等级判定(合格/待复检/报废)
3.3 数据可视化与统计模块
- ECharts渲染缺陷类型分布饼图、每日缺陷数量折线图、缺陷尺寸区间直方图
- 按用户、时间、缺陷类型多维度筛选检测历史记录
- 支持检测报表Excel导出,用于车间质量台账归档
3.4 用户权限管理系统
- 管理员账号:全量检测记录查看、用户新增/禁用、系统参数配置、日志全量查询
- 普通质检账号:仅查看本人上传检测任务,无用户管理权限
- 全操作行为日志记录:登录、图片上传、批量推理、系统配置修改全程留痕
3.5 前端个性化界面定制
- 多套主题色自由切换
- 页面布局拖拽调整、组件尺寸自定义
- 检测结果展示面板可自定义显示字段(置信度、缺陷面积、大模型分析文本)
四、核心深度学习代码片段(带场景注释)
4.1 NEU-DET数据集标签转换脚本(XML转YOLO TXT)
# 场景注释:工业钢材缺陷数据集专用坐标转换,适配NEU-DET原始XML标注,解决小裂纹坐标越界问题
import os
import xml.etree.ElementTree as ET
def convert_xml_to_yolo(img_size, box):
"""
img_size: (图片宽, 图片高)
box: [xmin, xmax, ymin, ymax] 原始像素坐标
return: YOLO归一化中心坐标 x,y,w,h [0~1]
"""
dw = 1.0 / img_size[0]
dh = 1.0 / img_size[1]
x_center = (box[0] + box[1]) / 2.0
y_center = (box[2] + box[3]) / 2.0
w = box[1] - box[0]
h = box[3] - box[2]
# 归一化
x = x_center * dw
y = y_center * dh
w = w * dw
h = h * dh
# 边界截断,防止微小裂纹标注超出画面
x = max(min(x, 1.0), 0.0)
y = max(min(y, 1.0), 0.0)
w = max(min(w, 1.0), 0.0)
h = max(min(h, 1.0), 0.0)
return (x, y, w, h)
# NEU-DET固定6类缺陷映射
class_mapping = {
"crazing": 0,
"inclusion": 1,
"patches": 2,
"pitted_surface": 3,
"rolled-in_scale": 4,
"scratches": 5
}
def batch_convert(xml_dir, output_label_dir):
if not os.path.exists(output_label_dir):
os.makedirs(output_label_dir)
for xml_file in os.listdir(xml_dir):
if not xml_file.endswith(".xml"):
continue
tree = ET.parse(os.path.join(xml_dir, xml_file))
root = tree.getroot()
img_w = int(root.find("size/width").text)
img_h = int(root.find("size/height").text)
txt_name = xml_file.replace(".xml", ".txt")
with open(os.path.join(output_label_dir, txt_name), "w", encoding="utf-8") as f:
for obj in root.findall("object"):
cls_name = obj.find("name").text
if cls_name not in class_mapping:
continue
cls_id = class_mapping[cls_name]
bndbox = obj.find("bndbox")
xmin = float(bndbox.find("xmin").text)
xmax = float(bndbox.find("xmax").text)
ymin = float(bndbox.find("ymin").text)
ymax = float(bndbox.find("ymax").text)
yolo_box = convert_xml_to_yolo((img_w, img_h), [xmin, xmax, ymin, ymax])
f.write(f"{cls_id} {yolo_box[0]} {yolo_box[1]} {yolo_box[2]} {yolo_box[3]}\n")
if __name__ == "__main__":
batch_convert(xml_dir="./neu_det/xml", output_label_dir="./neu_det/labels/train")
4.2 YOLO推理Flask接口(对接前端图片检测请求)
# 场景注释:工业Web推理服务,GPU加速推理,返回缺陷坐标+类别+置信度,同步调用DeepSeek生成诊断文本
from flask import Flask, request, jsonify
import torch
import base64
from PIL import Image
import io
from ultralytics import YOLO
import requests
app = Flask(__name__)
# 全局预加载模型,避免重复初始化耗时(工业并发场景性能优化)
DEVICE = "cuda" if torch.cuda.is_available() else "cpu"
MODEL_PATH = "./weights/neu_det_best.pt"
model = YOLO(MODEL_PATH).to(DEVICE)
# DeepSeek大模型接口配置
DEEPSEEK_API_KEY = "xxx"
DEEPSEEK_URL = "https://api.deepseek.com/v1/chat/completions"
CLASS_NAME = ["微裂纹","夹杂物","斑块","麻面","轧入氧化皮","划痕"]
def llm_analysis(detect_result_list):
"""将YOLO检测结果传入大模型,生成工业质检分析建议"""
prompt = f"""你是资深钢铁工艺工程师,根据以下钢材表面缺陷检测数据给出成因、整改方案与质检判定:
检测缺陷列表:{detect_result_list}
输出要求:1.缺陷成因 2.产线整改措施 3.质量等级判定(合格/复检/报废)"""
headers = {"Authorization": f"Bearer {DEEPSEEK_API_KEY}", "Content-Type":"application/json"}
payload = {
"model": "deepseek-chat",
"messages": [{"role":"user","content": prompt}],
"temperature": 0.3
}
resp = requests.post(DEEPSEEK_URL, json=payload, headers=headers)
return resp.json()["choices"][0]["message"]["content"]
@app.route("/api/detect/image", methods=["POST"])
def detect_image():
if "file" not in request.files:
return jsonify({"code":400, "msg":"未上传检测图片"}), 400
file = request.files["file"]
img_bytes = file.read()
pil_img = Image.open(io.BytesIO(img_bytes)).convert("RGB")
# YOLO推理
results = model(pil_img, conf=0.25)
res = results[0]
detect_data = []
for box in res.boxes:
cls_idx = int(box.cls.cpu().numpy()[0])
conf = float(box.conf.cpu().numpy()[0])
xyxy = box.xyxy.cpu().numpy()[0].tolist()
detect_data.append({
"defect_type": CLASS_NAME[cls_idx],
"confidence": round(conf,4),
"box_xyxy": xyxy
})
# 调用大模型生成诊断
llm_report = llm_analysis(detect_data) if len(detect_data)>0 else "未检测到钢材表面缺陷,质检合格"
# 编码检测标注图返回前端
buf = io.BytesIO()
res.save(buf)
buf.seek(0)
img_base64 = base64.b64encode(buf.read()).decode("utf-8")
return jsonify({
"code":200,
"data":{
"detect_list": detect_data,
"llm_analysis": llm_report,
"result_img_base64": img_base64
}
})
if __name__ == "__main__":
# 工业部署关闭debug,host开放局域网访问
app.run(host="0.0.0.0", port=5000, debug=False)
4.3 摄像头实时检测核心推理循环
# 场景注释:工业相机实时流处理,每帧推理,缺陷置信度阈值告警,适配钢厂产线连续采集
import cv2
from ultralytics import YOLO
model = YOLO("./weights/neu_det_best.pt")
# 工业相机ID,USB相机填0,千兆网口相机填RTSP地址
cap = cv2.VideoCapture(0)
cap.set(cv2.CAP_PROP_FRAME_WIDTH, 1280)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 720)
CONF_THRESHOLD = 0.3
print("工业摄像头实时检测启动,按Q退出")
while cap.isOpened():
ret, frame = cap.read()
if not ret:
break
# 单帧推理
pred = model(frame, conf=CONF_THRESHOLD)[0]
plot_frame = pred.plot()
# 存在缺陷弹窗提示
if len(pred.boxes) > 0:
cv2.putText(plot_frame, "DEFECT DETECTED", (30,60), cv2.FONT_HERSHEY_SIMPLEX, 2, (0,0,255), 3)
cv2.imshow("Steel Surface Real-Time Detect", plot_frame)
if cv2.waitKey(1) & 0xFF == ord("q"):
break
cap.release()
cv2.destroyAllWindows()
五、项目完整交付清单
- 标准化NEU-DET钢材缺陷数据集:1800张标注图像,6类缺陷完整YOLO格式标签
- 训练完成YOLO预训练权重best.pt,针对钢材微小裂纹优化训练
- 全栈源码:Pytorch推理代码、Flask算法服务、SpringBoot后端、Vue3前端完整工程
- 全套部署文档:Windows/Linux环境依赖安装、CUDA显卡加速配置、MySQL初始化脚本、前后端联调步骤
- 多模式检测完整实现代码:单图、批量、视频、摄像头实时检测全套逻辑
- DeepSeek大模型对接封装代码,可快速替换其他LLM接口
六、适配落地场景
- 钢铁热轧/冷轧车间表面在线质检流水线
- 金属材料实验室板材缺陷抽样检测
- 制造业质量管控部门离线批量工件抽检
- 高校深度学习工业视觉课题实验平台
- 有色金属(铝、铜、合金)表面缺陷检测二次开发
七、增值付费定制服务
- 远程服务器环境部署、模型调试优化
- 完整模型训练全流程线上讲解(数据增强、调参、损失优化、精度提升)
- 定制化功能开发:缺陷尺寸测量、产线PLC对接、缺陷自动分拣联动
- 模型性能调优:轻量化推理、TensorRT加速、小目标裂纹检测精度提升
- 多系统集成:MES生产管理系统、工厂看板大屏对接开发
八、项目拓展优化方向(深度思考)
- 多尺度特征融合:引入CFPNet上下文特征金字塔,提升微小裂纹检出率,解决钢材低对比度缺陷漏检问题
- 模型轻量化:导出ONNX/TensorRT模型,适配边缘工控机、嵌入式设备离线检测
- 时序缺陷分析:对视频流缺陷做时序统计,识别持续性产线故障,提前预警设备磨损
- 多模态大模型升级:接入图像理解大模型,直接输入缺陷图片完成图文同步诊断
- 缺陷分割拓展:新增Mask分割分支,精准计算缺陷面积、破损占比,完善量化质检指标
#深度学习 #YOLO目标检测 #工业视觉 #钢材缺陷检测 #NEU-DET #大模型DeepSeek #智能制造 #质检系统 #Pytorch #SpringBoot #Vue3 #计算机视觉 #裂纹检测 #工业AI #全栈项目
更多推荐



所有评论(0)