大模型视觉VisionAgent 落地实践
EN

项目落地实践 / 包装过程监控

家电包装工位漏装检测项目落地

一台相机架在包装工位上方。泡沫箱到位开工,说明书、袋子、水壶、底座逐件装进腔位,收尾动作一出现就结算:清单齐出 OK,缺件出 NG,并且指出缺的是哪一件。推理跑在产线本地的边缘 GPU 上。

Leo

这篇讲什么

  1. 包装是出厂前最后一道人工工序,箱子一封,装了什么就看不回来了——为什么要在装的那一刻看。
  2. 怎么把工位拆成 6 个语义分割类别,让 NG 报告能说出缺的是哪一件,而不只是"缺件"。
  3. 怎么用 7 个事件把"看见了"变成"装进去了",把手拿着物料路过挡掉。
  4. 怎么用一张 状态图表达清单关系和套袋先于入壶的物理约束,换机型改图不改代码。
  5. 每类 1–10 张样本图、几分钟配置完,一台边缘盒子带多条工作流。
01

现场是什么样

Scene

工位在包装线末端。传送带上先摆好两块泡沫缓冲件,一块带水壶腔位,一块带说明书和配件腔位。工人依次把说明书放进右侧腔位、给水壶套上塑料袋、把套好袋的水壶放进左侧腔位、再放上底座,最后铺膜收尾,整件流向封箱机。

视频 工位一件完整装填过程,画面上的彩色轮廓和文字是系统实时输出的分割结果,每种颜色对应一个类别。工服上的标识已做虚化处理。
02

关键矛盾:箱子一封,就查不回来了

Problem

装填本身不难,难的是漏装在现场没有任何痕迹。

漏一本说明书,客户开箱才发现,是一条投诉加一次补寄;漏一个底座,整机装不起来,退回来的是整箱运费加拆箱返工。这些成本全部发生在工厂外面,而产生它的那两秒钟,在工位上看起来和正常的一件毫无区别。

常见的兜底手段是整箱称重。问题是量级对不上:整箱几公斤,说明书几十克,落在泡沫和纸箱本身的重量波动里;就算称出了差异,得到的信息也只是"轻了",不知道少的是哪一件,还得整箱拆开找。

所以判断必须发生在装的那一刻,而且结论要具体到件:不是"这箱有问题",是"这箱少了一本说明书"。

这就把问题推给了视觉,而包装件恰恰是传统 AOI 最不擅长的一类目标:白泡沫压在白泡沫上,塑料袋是透明的,说明书大半塞进腔位只露一个角。形状不规则、边界靠反光、和背景同色——模板匹配框不住,固定阈值也分不开。再加上家电换型频繁,一个机型一套泡沫、一套清单,模板做一版用不了几周。

我们用少样本语义分割来解这一层:不去框物体,而是描出它的轮廓。每类先给 1–10 张样本图,标注完几分钟就能跑起来,换机型不用重训一版模型,只是再补几张图。

03

张量流:七个算子串成一条流

Pipeline

整套逻辑不是写出来的,是在画布上连出来的。左边是算子库,拖到画布上连线就成了一条流。

张量流编辑器:包装过程监控工作流
图 1 张量流编辑器。选中的是语义分割·包装件节点,它的输出是这条流后面所有判断的唯一依据。
节点做的事这个项目里的配置
视频流相机把工位画面接进来1 路 RTSP,工位俯拍
图像预处理去噪、增强、归一化压曝光,保住白泡沫的腔位边缘
语义分割·包装件逐帧描出每个类别的轮廓6 类
事件探测把轮廓变成"发生了什么"7 个事件
状态机把事件攒成一件的结论5 状态 / 3 动作
存图把判 NG 的那一帧留下来只在 NG 时触发
串口设备把结果发给产线RS232 上报每件的结论

分成这几层是有意的:认得出是模型的事,算不算数是事件层的事, 判 OK 还是 NG是状态机的事。三件事分开,后面换机型、改判据才不会牵一发动全身。

04

语义分割:类别怎么分,取决于 NG 要说什么

Segmentation

模型这一层只回答一件事:这一帧画面里,哪一块像素属于哪一类。

语义分割标注界面:套袋类别
图 2 标注界面。左侧人工描轮廓,右侧实时对照模型输出——标得对不对,当场就能看见。

我们分了 6 类:泡沫箱、说明书、套袋、放水壶、放底座、结束。为什么不简单分成"有件/无件"两类?因为报表上写"缺件"没人会去处理,写"缺说明书"才有人立刻去补。类别的粒度,是被 NG 报告要说的那句话决定的,不是被模型能力决定的。

为什么用分割而不是检测框:塑料袋和泡沫腔位都不是矩形。一个框套在水壶上,只能说明"水壶在这一带";一条沿着腔位边缘收进去的轮廓,才能说明"水壶真的落进腔里了"。软包装件的判断,差别就在这一点上。

每类先给 5–10 张样本图。跑一轮,把认错的帧挑出来补进训练集,再跑一轮,整个过程在这一个界面里完成,不需要离线训练环境。换到另一个机型,泡沫形状变了、清单变了,做法是一样的——补图,不是重做。

05

事件探测:看见了,不等于装进去了

Events

分割每一帧都在输出掩膜。但"这一帧看见了说明书"和"说明书装进去了",是两件事。

工人从料盒里抽出说明书、举过工位、放下去——整个过程中说明书一直在画面里。如果一看见就算数,那么手拿着物料路过、拿起来又放回料盒、甚至旁边工位的物料入镜,都会被记成一次装填。这类误触发比漏检更危险:漏检只是没拦住一件,误触发会让系统在真的漏装时报 OK。

GPU 事件编排器:结束·清单齐事件
图 3 事件编排器。事件由若干 GPU 原语组合而成,图中配的是结束 · 清单齐。

装填类事件(E1–E4)统一用两个条件与起来:目标出现在指定腔位内,并且连续静止若干帧。落进腔位的物料是不动的,手上拿着的物料一直在动,这一条就把路过和试放全部挡在外面。腔位范围在界面上框,帧数在界面上填,改这两个参数不需要动模型。

事件触发条件状态机拿它做什么
E0 泡沫箱到位两块泡沫出现在工位区域并静止开一件新的
E1 放说明书说明书落进右侧腔位并静止清单计数 +1
E2 套袋袋子套上壶体并静止清单计数 +1,同时开放入壶
E3 放水壶水壶落进左侧腔位并静止清单计数 +1
E4 放底座底座落进配件腔位并静止清单计数 +1
E5 结束 · 清单齐收尾动作出现 且 已装项数 = 4判 OK,出记录
E6 结束 · 有缺项收尾动作出现 且 已装项数 < 4判 NG,存图并标出缺哪件

E5 和 E6 用的是另一种组合:物体存在(收尾动作)与数量检测(已装项数)。为什么要有一个显式的收尾动作作为结算信号——因为包装件不像加工件会自己流走,工人铺膜收尾这个动作,是现场唯一稳定标志"这一件我做完了"的时刻。抓住它,就有了明确的结算点,不必去猜一件什么时候算结束。

06

状态机:清单关系和物理先后,画在一张图上

State machine

事件是散点,状态机把它们攒成一件的结论。整套判定逻辑就是这张图,没有代码。

状态图编辑器:包装过程监控状态机
图 4 状态图编辑器。5 个状态、3 个动作,右侧是同一套东西的张量视图。

说明书和底座:清单关系,不是先后关系

这两件放在哪一步都合格,工人各有各的顺手路径。所以它们挂在 S1 的自环上:每触发一次,清单计数加一,状态不变。系统关心的是收尾时这个集合齐不齐,而不是它们按什么次序进来。

套袋和放水壶:这一对有物理先后

水壶必须先套袋再入腔——不套袋直接放进泡沫,运输中壶体和泡沫摩擦会刮花外观件。这是工艺上的硬约束,不是习惯问题,所以要在图上卡住。

做法是加一个中间态 S2 已套袋:套袋(E2)把状态推到 S2,放水壶(E3)只在 S2 上被接受,接受之后回到 S1 继续装别的。这样就形成一道闸——没套袋就把壶放进去,E3 落在 S1 上不被接受,清单计数不会加,这一件走到收尾时必然缺一项,直接落进 NG。 不需要为"顺序错了"单独写一条规则,闸门结构本身就把它兜住了。

结算:收尾动作一出现就下结论

状态含义出去的路
S0 等待泡沫箱工位空着E0 → S1
S1 装填中已开件,清单在累计 E1 / E4 自环(A2 计数 +1);E2 → S2;E5 → S3;E6 → S4
S2 已套袋入壶这道闸已打开E3 → S1(A2 计数 +1)
S3 本件完成清单齐A0 出记录,回 S0
S4 本件 NG收尾时仍有缺项A1 出记录 + 存 NG 图,回 S0
运行界面:包装过程监控工作流
图 5 运行界面。检测记录按件一行,缺哪一项直接落在对应那一列上——第 145 件缺说明书,第 142 件缺底座。
07

规则按现场定制,不用重做一套

Customization

家电这类现场,机型换得比产线改得勤。判定规则留在状态图上,就是为了让改动停在配置层。

现场提出的怎么改要不要重训
换机型,多一个配件加一类,加一个事件,清单项数改成 5补该类的样本图
这个机型说明书放箱外把 E1 从清单里去掉不用
允许工人当场补装S4 上加一条补装事件回 S1不用
只报警不判 NG把 A1 换成只推消息、不出 NG 记录不用
换结算信号(封箱机下压)E5/E6 换一个原语组合不用
多机型混线一台边缘盒子挂多条工作流,切机型切流不用

这套东西的复制成本,主要在样本图和腔位框上,不在代码上。 同一台边缘盒子可以同时带多个工位、多条工作流,新工位上线是复制一份配置再调参数,不是重新做一个项目。

08

上线要准备什么

Deployment
项要点
相机位 俯拍,画面覆盖两块泡沫的全部腔位;机位偏一点没关系,但不要让操作者的身体长时间压住腔位
光 白泡沫容易过曝,把曝光往下压一档,保住腔位边缘的层次;透明袋子靠反光成形,别打正对镜头的强光
算力 一台边缘 GPU 盒子放在产线旁,画面不出厂,也不用等云端往返
样本 每类 5–10 张起步,跑一轮把认错的帧补回去再跑一轮
接口 结果经串口上报,NG 触发存图;要不要联动封箱机看现场
调试 先只看不判,跑两天,确认没有误报再开判定
09

复盘

Takeaways
  1. 软包装件用分割,不用检测框。泡沫腔位、透明袋子都不是矩形,轮廓才说得清"东西落进去了"。
  2. 类别怎么分,看 NG 报告要说什么。先想清楚现场拿到这条记录要做什么动作,再倒推类别粒度。
  3. 误触发比漏检更危险。防误报要放在事件层解决——加区域、加静止条件,而不是指望模型自己想明白。
  4. 物理约束画进图里,比写成规则更省事。套袋先于入壶用一个中间态就卡住了,不用为顺序单独写判据。
  5. 判定规则留在状态图上。换机型是改图,不是改代码,这是这类现场能长期用下去的前提。

包装工位的共同点是:品类多、清单变化快、每件都要人工完成。少样本配置让新机型上线的成本降到补几张图,边缘推理让判断留在产线本地,状态图让工艺约束以可读的形式沉淀下来——同一套东西,换个工位、换个工厂,仍然是这三步。

Leo

作者介绍

计算机视觉方向博士,研究方向为少样本分割与视频行为理解;12 年工业视觉一线经验,累计交付 30+ 条产线、100+ 工位。

当前关注边缘 GPU 推理优化、跨域泛化与现场数据闭环——让同一套配置方式在不同工厂、不同工艺之间可复制。文章记录项目实施中的实际配置、判断逻辑与现场结果。