这篇讲什么
- 包装是出厂前最后一道人工工序,箱子一封,装了什么就看不回来了——为什么要在装的那一刻看。
- 怎么把工位拆成 6 个语义分割类别,让 NG 报告能说出缺的是哪一件,而不只是"缺件"。
- 怎么用 7 个事件把"看见了"变成"装进去了",把手拿着物料路过挡掉。
- 怎么用一张 状态图表达清单关系和套袋先于入壶的物理约束,换机型改图不改代码。
- 每类 1–10 张样本图、几分钟配置完,一台边缘盒子带多条工作流。
现场是什么样
Scene工位在包装线末端。传送带上先摆好两块泡沫缓冲件,一块带水壶腔位,一块带说明书和配件腔位。工人依次把说明书放进右侧腔位、给水壶套上塑料袋、把套好袋的水壶放进左侧腔位、再放上底座,最后铺膜收尾,整件流向封箱机。
关键矛盾:箱子一封,就查不回来了
Problem装填本身不难,难的是漏装在现场没有任何痕迹。
漏一本说明书,客户开箱才发现,是一条投诉加一次补寄;漏一个底座,整机装不起来,退回来的是整箱运费加拆箱返工。这些成本全部发生在工厂外面,而产生它的那两秒钟,在工位上看起来和正常的一件毫无区别。
常见的兜底手段是整箱称重。问题是量级对不上:整箱几公斤,说明书几十克,落在泡沫和纸箱本身的重量波动里;就算称出了差异,得到的信息也只是"轻了",不知道少的是哪一件,还得整箱拆开找。
所以判断必须发生在装的那一刻,而且结论要具体到件:不是"这箱有问题",是"这箱少了一本说明书"。
这就把问题推给了视觉,而包装件恰恰是传统 AOI 最不擅长的一类目标:白泡沫压在白泡沫上,塑料袋是透明的,说明书大半塞进腔位只露一个角。形状不规则、边界靠反光、和背景同色——模板匹配框不住,固定阈值也分不开。再加上家电换型频繁,一个机型一套泡沫、一套清单,模板做一版用不了几周。
我们用少样本语义分割来解这一层:不去框物体,而是描出它的轮廓。每类先给 1–10 张样本图,标注完几分钟就能跑起来,换机型不用重训一版模型,只是再补几张图。
张量流:七个算子串成一条流
Pipeline整套逻辑不是写出来的,是在画布上连出来的。左边是算子库,拖到画布上连线就成了一条流。
| 节点 | 做的事 | 这个项目里的配置 |
|---|---|---|
| 视频流相机 | 把工位画面接进来 | 1 路 RTSP,工位俯拍 |
| 图像预处理 | 去噪、增强、归一化 | 压曝光,保住白泡沫的腔位边缘 |
| 语义分割·包装件 | 逐帧描出每个类别的轮廓 | 6 类 |
| 事件探测 | 把轮廓变成"发生了什么" | 7 个事件 |
| 状态机 | 把事件攒成一件的结论 | 5 状态 / 3 动作 |
| 存图 | 把判 NG 的那一帧留下来 | 只在 NG 时触发 |
| 串口设备 | 把结果发给产线 | RS232 上报每件的结论 |
分成这几层是有意的:认得出是模型的事,算不算数是事件层的事, 判 OK 还是 NG是状态机的事。三件事分开,后面换机型、改判据才不会牵一发动全身。
语义分割:类别怎么分,取决于 NG 要说什么
Segmentation模型这一层只回答一件事:这一帧画面里,哪一块像素属于哪一类。
我们分了 6 类:泡沫箱、说明书、套袋、放水壶、放底座、结束。为什么不简单分成"有件/无件"两类?因为报表上写"缺件"没人会去处理,写"缺说明书"才有人立刻去补。类别的粒度,是被 NG 报告要说的那句话决定的,不是被模型能力决定的。
为什么用分割而不是检测框:塑料袋和泡沫腔位都不是矩形。一个框套在水壶上,只能说明"水壶在这一带";一条沿着腔位边缘收进去的轮廓,才能说明"水壶真的落进腔里了"。软包装件的判断,差别就在这一点上。
每类先给 5–10 张样本图。跑一轮,把认错的帧挑出来补进训练集,再跑一轮,整个过程在这一个界面里完成,不需要离线训练环境。换到另一个机型,泡沫形状变了、清单变了,做法是一样的——补图,不是重做。
事件探测:看见了,不等于装进去了
Events分割每一帧都在输出掩膜。但"这一帧看见了说明书"和"说明书装进去了",是两件事。
工人从料盒里抽出说明书、举过工位、放下去——整个过程中说明书一直在画面里。如果一看见就算数,那么手拿着物料路过、拿起来又放回料盒、甚至旁边工位的物料入镜,都会被记成一次装填。这类误触发比漏检更危险:漏检只是没拦住一件,误触发会让系统在真的漏装时报 OK。
装填类事件(E1–E4)统一用两个条件与起来:目标出现在指定腔位内,并且连续静止若干帧。落进腔位的物料是不动的,手上拿着的物料一直在动,这一条就把路过和试放全部挡在外面。腔位范围在界面上框,帧数在界面上填,改这两个参数不需要动模型。
| 事件 | 触发条件 | 状态机拿它做什么 |
|---|---|---|
| E0 泡沫箱到位 | 两块泡沫出现在工位区域并静止 | 开一件新的 |
| E1 放说明书 | 说明书落进右侧腔位并静止 | 清单计数 +1 |
| E2 套袋 | 袋子套上壶体并静止 | 清单计数 +1,同时开放入壶 |
| E3 放水壶 | 水壶落进左侧腔位并静止 | 清单计数 +1 |
| E4 放底座 | 底座落进配件腔位并静止 | 清单计数 +1 |
| E5 结束 · 清单齐 | 收尾动作出现 且 已装项数 = 4 | 判 OK,出记录 |
| E6 结束 · 有缺项 | 收尾动作出现 且 已装项数 < 4 | 判 NG,存图并标出缺哪件 |
E5 和 E6 用的是另一种组合:物体存在(收尾动作)与数量检测(已装项数)。为什么要有一个显式的收尾动作作为结算信号——因为包装件不像加工件会自己流走,工人铺膜收尾这个动作,是现场唯一稳定标志"这一件我做完了"的时刻。抓住它,就有了明确的结算点,不必去猜一件什么时候算结束。
状态机:清单关系和物理先后,画在一张图上
State machine事件是散点,状态机把它们攒成一件的结论。整套判定逻辑就是这张图,没有代码。
说明书和底座:清单关系,不是先后关系
这两件放在哪一步都合格,工人各有各的顺手路径。所以它们挂在 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 |
规则按现场定制,不用重做一套
Customization家电这类现场,机型换得比产线改得勤。判定规则留在状态图上,就是为了让改动停在配置层。
| 现场提出的 | 怎么改 | 要不要重训 |
|---|---|---|
| 换机型,多一个配件 | 加一类,加一个事件,清单项数改成 5 | 补该类的样本图 |
| 这个机型说明书放箱外 | 把 E1 从清单里去掉 | 不用 |
| 允许工人当场补装 | S4 上加一条补装事件回 S1 | 不用 |
| 只报警不判 NG | 把 A1 换成只推消息、不出 NG 记录 | 不用 |
| 换结算信号(封箱机下压) | E5/E6 换一个原语组合 | 不用 |
| 多机型混线 | 一台边缘盒子挂多条工作流,切机型切流 | 不用 |
这套东西的复制成本,主要在样本图和腔位框上,不在代码上。 同一台边缘盒子可以同时带多个工位、多条工作流,新工位上线是复制一份配置再调参数,不是重新做一个项目。
上线要准备什么
Deployment| 项 | 要点 |
|---|---|
| 相机位 | 俯拍,画面覆盖两块泡沫的全部腔位;机位偏一点没关系,但不要让操作者的身体长时间压住腔位 |
| 光 | 白泡沫容易过曝,把曝光往下压一档,保住腔位边缘的层次;透明袋子靠反光成形,别打正对镜头的强光 |
| 算力 | 一台边缘 GPU 盒子放在产线旁,画面不出厂,也不用等云端往返 |
| 样本 | 每类 5–10 张起步,跑一轮把认错的帧补回去再跑一轮 |
| 接口 | 结果经串口上报,NG 触发存图;要不要联动封箱机看现场 |
| 调试 | 先只看不判,跑两天,确认没有误报再开判定 |
复盘
Takeaways- 软包装件用分割,不用检测框。泡沫腔位、透明袋子都不是矩形,轮廓才说得清"东西落进去了"。
- 类别怎么分,看 NG 报告要说什么。先想清楚现场拿到这条记录要做什么动作,再倒推类别粒度。
- 误触发比漏检更危险。防误报要放在事件层解决——加区域、加静止条件,而不是指望模型自己想明白。
- 物理约束画进图里,比写成规则更省事。套袋先于入壶用一个中间态就卡住了,不用为顺序单独写判据。
- 判定规则留在状态图上。换机型是改图,不是改代码,这是这类现场能长期用下去的前提。
包装工位的共同点是:品类多、清单变化快、每件都要人工完成。少样本配置让新机型上线的成本降到补几张图,边缘推理让判断留在产线本地,状态图让工艺约束以可读的形式沉淀下来——同一套东西,换个工位、换个工厂,仍然是这三步。
作者介绍
计算机视觉方向博士,研究方向为少样本分割与视频行为理解;12 年工业视觉一线经验,累计交付 30+ 条产线、100+ 工位。
当前关注边缘 GPU 推理优化、跨域泛化与现场数据闭环——让同一套配置方式在不同工厂、不同工艺之间可复制。文章记录项目实施中的实际配置、判断逻辑与现场结果。