☰
AI Agent+计算机视觉:产线质量控制的台前幕后与落地指南
2026/10/22 3:23:28 网站建设 项目流程

一个质量控制AI Agent的台前幕后:当计算机视觉成为产线上的“眼睛”

如果你是制造业的工程师或技术管理者,最近两三年一定高频听到“AI质检”“智能制造”这类词。但说实话,大多数号称“AI质检”的项目,落地后往往只是训练了一个目标检测模型,把原来人工看的缺陷改成模型看,然后挂一个大屏。这有价值,但离“智能化”还有距离——它不会根据连续出现的缺陷趋势主动调整产线,不会把视觉结果和上一道工序的参数关联起来,更不会在“良率优先”和“产量优先”之间做动态权衡。

我最近在跟某跨平台系统项目的时候,完整做了一套“企业AI Agent的计算机视觉技术应用:质量控制”的落地实践。简单说,就是用AI Agent作为中枢,把计算机视觉的缺陷检测能力、产线设备的状态数据、MES里的批次信息和人员处置流程串起来,形成一套“能感知、会判断、可执行、能学习”的质量控制闭环。这篇文章不聊概念,直接拆解我是怎么设计这个系统的、视觉部分的核心参数怎么定、Agent的决策逻辑怎么写、现场踩了哪些坑,以及这套东西到底值不值得投入。

1. 标题背后的真实需求:质量控制为什么需要AI Agent

1.1 传统机器视觉的“天花板”

质量控制里的机器视觉不是新鲜事。十年前很多工厂就上了CCD视觉检测,用固定光源、固定相机,靠像素阈值、边缘检测、模板匹配来做外观判定。这类系统有个很典型的问题:检测标准是写死的,环境一变就容易崩。产品换型要重新调参,光源老化会影响灰度分布,来料颜色有轻微批次差异就可能连续误杀。更麻烦的是,传统视觉系统只能回答“OK/NG”,回答不了“为什么NG”“以前出现过吗”“要不要停线”。

我见过一条电子装配线,视觉检测设备每天夜里都会出现一批“不明原因”的NG报警,操作员只能反复重启设备。后来查了两个月日志,发现是因为夜班旁边的叉车充电区电压波动,导致光源亮度细微变化。传统视觉系统感知不到这类“背景因素”,因为它的世界里只有像素阈值。

1.2 AI Agent比“一个检测模型”多出来的东西

AI Agent在这个场景里不是“玄学”。它的核心价值是把孤立的视觉结果变成连贯的决策链。一个目标检测模型输出了“第102号工位当前产品外观缺陷类型为划痕,置信度0.78”,这只是一条信息。但加上一个Agent,它就能做到:

  • 把这条信息和过去30分钟同类缺陷发生频率做对比,判断是偶发还是趋势异常;
  • 调取前序工位的设备参数,发现“划痕缺陷率上升”和“贴装压力下降”存在时间相关性,从而给出检修建议;
  • 综合当前订单交期和不良率阈值,决定是“继续生产待观察”“自动分拣隔离”还是“立刻停线人工复核”;
  • 把整个推论过程记录成结构化事件,回传给MES和质量分析系统,而不是只在屏幕上弹一个红色感叹号。

所以,质量控制里的AI Agent,本质上是给视觉系统装了一个会推理、有记忆、能行动的“大脑”。这跟大模型聊天机器人完全是两码事——工业场景里Agent更接近一个带状态机的自动化决策系统,只是它调度的是视觉模型、设备接口和业务规则。

1.3 这个方案适合谁

如果你的产线还停留在“人工目检”或“传统光电检测”阶段,这套东西不适合你一上来就上,得先把基础视觉检测跑通。真正适合的画像大概是:

  • 产线已经有工业相机或者能安装相机的工位;
  • 产品不良率需要精细统计,但不是“零缺陷”的绝对标准件;
  • 缺陷种类多、特征变化快,用传统规则写不完;
  • 质量管理人员希望从“事后抽检”升级到“过程预警”。

我下面的整套方案就是围绕这个画像展开的。它不追求用AI替代所有质检员,而是让AI先把重复性的、人眼容易疲劳的检测工作接住,再由Agent把信息变成能指导决策的动作。

2. 整体架构设计:感知、认知、决策、执行四层

2.1 四层架构到底怎么划分

我这套系统的架构可以拆成四层,每层都是独立模块,方便后续单独升级。用一句话概括:视觉层负责“看清”,Agent层负责“想明白”,执行层负责“做干净”。

层级核心组件职责
感知层工业相机、光源、传感器采集高质量图像和环境参数
认知层缺陷检测模型、OCR模块、分类模型从图像中提取质量特征,输出结构化“检测结果”
决策层AI Agent(规则引擎+时间序列分析+记忆库)综合分析视觉结果、设备数据、历史记录,给出处置决策
执行层MES接口、PLC、机械臂、告警服务执行分选、停机、通知、记录等动作

这里面最容易被忽略的是感知层。很多人以为“买个好相机”就行,实际上光源和安装角度对视觉模型的影响,比模型本身还大。我后面会专门讲参数的坑。

2.2 Agent在质量闭环里的三种角色

我在实际设计里,让同一个Agent身兼三个角色,对应不同的功能模块:

  • 观察者:持续消费视觉系统的输出流,缓存最近N条质量事件,在内存里维护每分钟缺陷率、缺陷类型分布等统计量。
  • 调度者:当质量指标触达阈值时,调用外部工具——比如给PLC发停线指令、给MES写复检工单、给告警服务发通知,并等待结果确认。
  • 记录员:把每一次决策的输入(视觉特征、统计指标、设备参数)和输出(决策类型、动作结果)组合成一条结构化日志,存进时序数据库,供后续复盘和模型迭代。

这个设计有个好处:视觉模型升级不影响决策逻辑,业务规则调整也不需要重新训练视觉模型。有一次我们要换一套新的相机,感知层换了驱动,认知层接口做了适配,Agent层几乎没动。

2.3 边缘部署还是集中式服务

我测试过两种部署形态。第一种是边缘一体机,直接在产线旁边放一台带GPU的工控机,视觉推理和Agent全部本地跑,时延最低,断网不影响产线。第二种是集中式推理服务,几台相机通过工业交换机把图像推到中心服务器,统一推理和决策,方便统一管理模型版本,但对网络稳定性要求高,一旦拥塞就会出现“图像堆积-检测超时”的连锁问题。

我的最终建议是混合形态:感知识别放边缘,Agent决策层放一台中心服务器,因为Agent需要聚合的数据源多,放中心更灵活。视觉模型推理一张图大概需要80-150ms,Agent决策只需要2-5ms,中心决策完全来得及。

3. 视觉识别核心:检测什么、怎么训练、怎么算准

3.1 数据采集比模型结构重要十倍

做质量控制视觉系统,最忌讳一上来就找公开数据集练模型。公开数据集里没有你产线的光源角度,没有你的产品划痕形态,更没有你的灰尘分布。我这次用的数据全部来自生产现场。

我在工位上固定了一台1200万像素工业相机,拍摄节拍是每2秒一张,连续采集了一周,大概拿到25万张图像,其中约8万张是人工标注过的缺陷样本。这个标注比例看着不高,但覆盖了产线所有能出现的缺陷类型。

有一点必须提醒:不要只采集“缺陷”图像,更要采集“正常”和“容易误判”的图像。我踩过坑——第一版模型误检率高达7%,最后分析发现是因为训练集里几乎全是明显缺陷,而产线上大量的“擦痕但不影响功能”“脏污但符合出厂标准”模糊区域,模型没见过,全部判成了NG。后来补了大量良品边界样本,误检率才降下来。

3.2 检测模型选型:分割比分类更实用

质量控制视觉任务,不建议只用简单的图像分类(“OK/NG”)。因为分类模型告诉你“这产品坏了”,但它不告诉你“坏在哪里”,也不方便Agent提取缺陷面积、位置、形状特征。我这次用的是实例分割+目标检测混合方案:

  • 对划痕、压伤、脏污这类区域性缺陷,用分割模型提取缺陷像素掩膜,可以算出面积、长径比、位置;
  • 对螺丝缺失、标签倾斜、导线错位等结构化缺陷,用目标检测框定位,输出类别和置信度。

模型主干选了一个轻量化的分割网络,在边缘工控机上能跑到每秒8帧,完全满足2秒节拍。如果你产线节拍很快(0.3秒一件),那得考虑专用硬件加速,或者把图像裁小、降低分辨率。质量检测的图像分辨率不要盲目追求高,够用就行。我们一开始用1200万像素全图推理,慢且不说,模型还容易过拟合细碎纹理。后来裁到512x512ROI区域,精度反而更稳定。

3.3 置信度阈值怎么定:算给你看

很多团队启动时都会问:模型置信度阈值设多少?0.9?0.8?这不能拍脑袋。我系统里是这么算的:

先统计现场数据。假设正常产品占99%,缺陷产品占1%。模型在验证集上的表现是:缺陷召回率90%,误检率(良品被判为缺陷的比例)2%。那么用贝叶斯公式算一算,在所有被判为缺陷的结果里,真正是缺陷的比例约为:

[ PPV = \frac{0.9 \times 0.01}{0.9 \times 0.01 + 0.02 \times 0.99} \approx 0.3125 ]

也就是说,就算模型单独看已经很准,在缺陷率只有1%的产线上,每判出3个NG,差不多只有1个是真NG,另外2个是误杀。这个结果直接决定了Agent不能无脑执行“NG就停线”,否则产线一天要停几十次。

所以我给Agent设计了一个双阈值机制:

  • 置信度大于0.92且缺陷面积大于设定值,直接判NG并分选;
  • 置信度在0.75到0.92之间,标记为“疑似缺陷”,进入缓存区;
  • 当“疑似缺陷”在连续20件产品里出现超过3次,才触发“停线复核”动作。

这个机制让误检对产线的影响大幅下降。质量控制系统的目标不是让模型完美,而是让模型的不完美不变成产线的灾难。

3.4 视觉结果的结构化输出

Agent不能直接吃图像,视觉层必须输出结构化JSON。我们约定的字段是:

{ "detection_id": "20250615_102340_005", "timestamp": 1750017820, "product_id": "P-20250615-2331", "defects": [ { "type": "scratch", "bbox": [120, 340, 160, 380], "area_px": 845, "confidence": 0.93 } ], "quality_score": 82.5, "verdict": "suspect" }

Agent只认这个结构化协议。如果哪天上了一套供应商A的视觉系统,只要把它的输出映射成这个JSON格式,Agent完全不用改,这算是面向接口编程的老经验了。

4. 实操走一遍:搭建一个装配质量视觉检测Agent

4.1 场景和需求

我拿一个简化场景做演示:某零部件的装配工位,要求检测装配后产品上有没有贴装正确,包括标签是否缺失、是否歪斜、条码是否可读。检测节拍2秒,不合格品需要自动分拣到隔离料道。

这套需求分两部分:一是视觉识别,二是Agent决策。下面给出一套基于Python的参考实现。代码用Python写是为了方便阅读,生产环境建议用C++或把Python服务容器化部署。

4.2 视觉识别模块:定位、矫正、读取、判定

先处理图像,用OpenCV做定位角度校正和区域裁剪:

import cv2 import numpy as np def locate_label(img): gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 高斯滤波去噪,半径选5是因为标签边缘宽度约为3-5像素 blurred = cv2.GaussianBlur(gray, (5, 5), 0) # 标签与产品背景灰度差异明显时,Canny阈值50/150即可 edges = cv2.Canny(blurred, 50, 150) contours, _ = cv2.findContours(edges, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) if not contours: return None # 取面积最大轮廓作为标签区域 label_contour = max(contours, key=cv2.contourArea) rect = cv2.minAreaRect(label_contour) return rect

角度矫正这一步很关键。装配过程中标签可能歪斜,如果不矫正,后面的条码识别和字符识别根本没法做。我直接用旋转矩阵把标签区域拉正:

def rectify_label(img, rect): (cx, cy), (w, h), angle = rect # OpenCV的angle范围是[-90,0],需要归一化 if angle < -45: angle = -(90 + angle) else: angle = -angle rot_mat = cv2.getRotationMatrix2D((cx, cy), angle, 1.0) rotated = cv2.warpAffine(img, rot_mat, (img.shape[1], img.shape[0])) return rotated

然后是条码和字符可读性判定。这里我不实际去解码,而是用一个“成像清晰度”代理指标:对矫正后的标签区域拉普拉斯方差。如果方差低于阈值,说明图像模糊,条码很可能扫不出来:

def check_blur(roi): gray = cv2.cvtColor(roi, cv2.COLOR_BGR2GRAY) laplacian_var = cv2.Laplacian(gray, cv2.CV_64F).var() # 阈值需要根据现场实验标定,我这里用600是因为3000万产品统计出来的分界点 return laplacian_var < 600

最后把结果统一成前面说的JSON结构。注意计分规则:标签位置偏转角度超过3度、面积小于标准区域的80%、清晰度低于阈值,任何一条触发都标记为缺陷。

4.3 Agent决策逻辑:有记忆、有统计、有动作

这是整套系统里最像“AI Agent”的部分。我的实现是一个带滑窗统计和时间序列判断的决策器:

from collections import deque import time class QualityControlAgent: def __init__(self): self.history = deque(maxlen=200) self.suspect_count = 0 self.threshold_rate = 0.15 # 连续30件产品缺陷率超过15%则告警 def observe(self, vision_result): # 这里简化,实际会做字段校验和时间戳对齐 self.history.append(vision_result) return self.analyze() def analyze(self): recent = list(self.history)[-30:] if len(recent) < 30: return {"action": "continue", "reason": "accumulating"} defect_count = sum(1 for r in recent if r["verdict"] in ("ng", "suspect")) defect_rate = defect_count / 30.0 if defect_rate > self.threshold_rate: return self.act("halt") if defect_count >= 3 and defect_rate <= self.threshold_rate: self.suspect_count += 1 if self.suspect_count >= 3: self.suspect_count = 0 return self.act("recheck") return {"action": "continue", "reason": "normal"} def act(self, action): if action == "halt": # 实际调用PLC停线接口,这里以日志替代 return {"action": "halt", "reason": "defect_rate_threshold_exceeded"} if action == "recheck": return {"action": "recheck", "reason": "suspect_accumulated"} return {"action": "continue", "reason": "normal"}

这个Agent虽然没有大语言模型也没有神经网络,但已经具备“记忆(历史滑窗)、分析(缺陷率统计)、决策(双阈值)、行动(停线/复检)”,完全符合一个工程意义上的Agent定义。工业现场不需要炫技,需要的是可预期的行为。

4.4 联动执行:分选、记录、通知

Agent决策出“halt”之后,不能只写日志。我的实现里通过一个执行器模块跟产线交互:

def execute(action): if action["action"] == "halt": # 调用MES的工单挂起接口 + PLC停机指令 mes_client.suspend_order("ORDER-20250615-001") plc_client.stop_station(102) notifier.send("质量预警:102工位缺陷率超阈值,已自动停线") elif action["action"] == "recheck": # 转移到人工复检缓冲区 plc_client.reject_to_buffer(102) notifier.send("疑似缺陷积累,已隔离3件,请人工复检")

还有个容易忽略的环节:Agent执行动作之前,必须等待执行确认。PLC指令发出后如果一直没有确认到达,Agent不能继续分析下一批数据。我在系统里加了超时机制,超过3秒未确认就再次发送并告警。很多自动化事故就是“指令发出”被当成了“动作完成”。

4.5 关键参数计算:质量评分怎么写

我系统里给每个产品算了一个0-100的质量评分,用来给Agent作为输入特征。评分不是简单扣分,而是按缺陷类型和面积加权:

[ score = 100 - \sum_{defect} (w_{type} \times \frac{area}{area_{base}}) ]

划痕的权重是15,污渍是10,标签歪斜是20。面积比超过2倍还要额外加扣10分。这样2024十分直观:一条平均值以上的划痕,扣15分左右,产品评分85,属于“良品但需关注”;面积大的划痕可能扣到35分,直接进分选。

评分还有一个用途:不同客户的批次标准不一样。有些客户接受95分以上出厂,有些要求98分以上。Agent里可以针对不同订单配置不同阈值,这比改视觉模型参数简单多了。

5. 现场落地容易踩的坑:从误检狂魔到稳定运行

5.1 光线波动是最大的敌人

我前面提到过夜班光源电压不稳的问题。这个问题在视觉系统里非常普遍,我这次也没完全绕开。第一次上线时白天误检率1%,到了傍晚误检率飙到6%。排查发现夕阳从车间西侧窗户直射到工位上,光源变化导致图像整体偏黄,分割模型把阴影误判为污渍。

解决思路有三步。第一步物理遮光,给工位加装了遮光罩;第二步在图像预处理里加白平衡校准,用标准色卡做参考;第三步也是我强烈建议的,在感知层同时采集光源照度数据,把它作为特征传给Agent。如果照度超过正常工作范围,Agent会主动屏蔽视觉结果,要求人工介入,而不是让模型在一个没见过光照条件下瞎猜。

5.2 标注不一致会让你怀疑人生

第二版模型训完,缺陷分类准确率怎么都上不去。我让人工抽查标注数据,发现四个标注员里,只有两个对“轻微划痕”和“材料纹理”的边界理解一致,另外两个把材料本身的纹理大量标成了划痕。我用多人投票标注+仲裁机制解决:每张缺陷图至少三个标注,两个以上一致才采用,不一致的提交给质量主管仲裁。这一轮之后,模型准确率提升了将近6个百分点。

另一个和标注相关的坑是“标注偏移”。为了赶项目,标注员画缺陷轮廓画得很快,框的边界普遍比真实缺陷大一圈。这会导致模型学出来的缺陷范围虚胖,面积特征失真。后来我在数据管线里加了一个侵蚀操作,把标注掩膜向内收缩3像素,才把问题纠正过来。

5.3 Agent的“过度反应”问题

Agent停线阈值设得太敏感,产线一天停四次,车间主任脸都绿了。这个问题的本质是我前面算过的PPV问题——在缺陷率极低的场景,误报的绝对数量会盖过真实缺陷。我现在调整Agent逻辑时有一条铁律:任何告警动作必须先过“基线漂移”检测。也就是说,Agent不是看到缺陷率超阈值就停线,而是先确认这个异常不是视觉系统自身的漂移(比如光源波动、模型输入分布变化)。具体做法是让Agent同时监控视觉结果和感知层照度数据,只有两者都异常才执行停线。

5.4 实时性和时序对齐

这个地方我吃了大亏。视觉推理和Agent分析分布在两套进程,时间戳一开始用的是本机时间,结果跨服务器时间偏差超过200ms,Agent统计“最近30件”的时候会漏掉一部分数据。后来所有消息都统一用产线PLC的时钟源,通过NTP对时,并在消息里带上产品ID作为主键,Agent按产品ID去重,才算彻底解决。

经验总结一句话:工业系统的数据链路,宁可多一个ID关联,也不要靠时间猜。

5.5 模型更新时别炸线

我试过在产线运行时直接热更新模型,结果新模型在某个特定光线下疯狂误报,产线停了十分钟我才反应过来。现在每次模型更新都走灰度发布流程:先在新模型上跑三天的旁路验证,只记录结果不参与决策;再把新模型的“决策差”统计出来,确认误杀率上升不超过0.5%,才正式切主服务。

下表是我这次维护的一个简易排查速查表:

现象优先排查方向常见根因
误检集中在傍晚光线变化遮光不足/白平衡失效
某一类缺陷漏检变多标注一致性变化新标注员标准偏差
停线后Agent不恢复执行确认超时PLC握手超时设置过短
某产品型号整体误检模型对新型号没见过需补充新型号数据
Agent告警但视觉正常基线漂移检测缺失Agent误判统计突变

6. 衡量价值与长期演进:这套系统到底值不值

6.1 指标不是只有准确率

质量控制系统的ROI至少要关注四个维度:

  • 漏检率:缺陷产品流出到客户手里的比例,这是质量底线;
  • 误检率/过杀率:良品被误判为缺陷的比例,直接影响重新检测和物料浪费;
  • 检测节拍:能不能跟上产线速度,跟不上一切白搭;
  • 决策时延:从发现问题到执行动作的延迟,决定损失能被控制在多小范围内。

我这次项目最终跑下来的数据是:漏检率从人工目检的2.3%降到了0.18%,过杀率控制在0.34%,单件检测加决策总耗时约0.5秒,节拍完全满足。说实话,漏检率下降是这套系统最大的价值。

6.2 ROI估算示例

我简单算过一笔账:一条产线两班倒需要4个质检员,年人力成本约35万。这套系统硬件加部署成本约25万,模型维护和算力费用第一年约8万。如果只算替代人力,回收期不到一年。但更值钱的其实是漏检率的下降——少发一块有缺陷的产品到客户现场,省下的客诉处理成本、差旅成本、品牌损失,远不是几个人力成本能衡量的。

当然这是理想情况。如果你的产线本身不良率极低、产品标准化程度极高、节拍又非常快,那这套系统的瓶颈会在视觉检测精度和Agent决策上的“误杀”,而不是省钱。我建议先算自己的不良率损失,再决定上不上。

6.3 下一步:从单点Agent到产线Agent群

我现在这套Agent还只是管一个工位。理想形态是多Agent协同:每个工位一个质检Agent,各自汇报质量事件,车间级Agent汇总所有工位状态,结合产量计划和设备预测维护模型,做更全局的调度。

比如A工位Agent报告“连续5件缺陷,疑似上游来料问题”,车间Agent可以自动通知上游工位Agent提高检测频次,同时调整本工位的分选策略,而不是简单停线等待人工处理。这个方向已经在规划了,核心难点不是算法,而是各工位之间的数据语义统一——同一类缺陷在不同工序叫法不一样,需要建立统一的质量本体。

写在最后的一个真实建议

我在这个项目里最深的体会是:AI Agent在质量控制里的作用,不是替代老师傅,而是把老师傅的判断习惯工程化。老师傅看一件产品,他脑子里不只有“OK/NG”,还有“这个划痕和上午那批有什么关系”“这台设备最近声音不太对”“这批料换供应商了要注意”。Agent干的就是把“关系”“声音不对”“注意一下”这些模糊信息变成可查询、可统计、可触发动作的数据逻辑。

如果你正准备做类似系统,我的建议是从一条产线、一个缺陷类型、一个环节开始,先把视觉模型跑稳,再多加Agent决策。别一上来就铺开。控制系统的价值来自“不漏过一个真缺陷,也不冤枉一个良品”,这件事需要现场数据一遍遍打磨,急不来。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询