本篇要点
- 要判的不是零件外观,是贴附动作有没有发生。防静电布贴上去就和背板同色同形,静态终检看不出漏没漏,只能在贴的那一刻抓。
- 五个类别(贴标签 + 四个位置的贴防静电布)各用 1–10 张样本图标注。缺件要指名道姓说缺哪一块,所以四块布按位置分成四个类别。
- 整条链路配在一张画布上:分割认得出、事件探测确认位置和稳定性、状态机累计到齐出结果,三层各改各的,互不影响。
- 判定规则全部落在状态图上,不在模型里,可以按客户现场规则定制,不重训、不改代码。
现场是什么样
装配线上的一个手工工位。工件带金属背板,随线体到位后,工人先在指定处贴一张标签,再把四块防静电布分别贴到背板上四个位置。贴完随线走,下一件接上。
关键矛盾:漏一块当场看不出来
防静电布贴在金属背板上,作用是把装配、搬运、包装过程中积累的静电导走。少贴一块,静电就有一条泄不掉的路径,最容易受伤的是背板后面那些敏感器件。
麻烦在于这种失效不当场暴露。工件继续往下走,整机点亮正常、功能测试也过,问题往往到老化测试甚至到用户手里才以花屏、黑屏、随机死机的形式出现。到那一步,追溯要翻整批,返修要整机拆解,成本和工位上贴一块布的成本完全不在一个量级。
所以这道工序的性质是:失效后果高,工位本身却没有任何防错手段。布是手撕手贴的,没有扭矩、没有计数、没有到位传感器;贴完位置很快被后续零件和上盖遮住,静态终检看不见;靠工人自检等于没有校验,抽检又覆盖不到每一件。
剩下唯一能在"贴的那一刻"确认的手段,就是看着它被贴上去。这是引入视觉的直接原因——不是为了替代终检,是因为终检根本看不到这一项。
于是判定规则收敛成很窄的两条:四块齐 = OK;工件走了还缺 = NG,并且要说清楚缺的是哪一块。下面几节就是把这两条拆成平台里的具体配置。
产出长这样
先看结果,再看怎么做出来的。运行界面上,右上是当前这件贴到了哪几块,右下是逐件记录。
张量流:一条流水把画面变成记录
平台里所有配置都落在一张画布上。画面从左边进来,一路走到右边出记录和存图,中间每个方块是一个算子,连线就是数据流向。这张图配好了,工位就跑起来了——没有脚本,没有编译,改完保存即生效。
| 算子 | 在这个工位做什么 | 关键参数 |
|---|---|---|
| 视频流相机 | 接工位上方相机的 RTSP 流 | 1080p / 25 fps |
| 图像预处理 | 抑制线体反光和车间顶灯的频闪 | 去噪、归一化 |
| 语义分割·贴附件 | 逐帧圈出贴标签和四块布的贴附区域 | 5 类 |
| 事件探测 | 把分割结果翻成"某块贴到了"这样的事件 | 7 个事件 |
| 状态机 | 管起点、累计块数、判齐不齐、出记录 | 4 状态 / 3 动作 |
| 存图 | NG 时自动存下当时的画面 | 仅 NG |
| 串口设备 | 把 OK/NG 送到工位灯和产线系统 | RS485 |
整条流跑在产线旁边的一台边缘 GPU 上。视频不出车间,也不依赖厂区网络的稳定性——网络断了,工位照常判、照常记,恢复后补传。
语义分割:告诉系统这块布贴上去长什么样
这一层解决"认得出"。做法是在标注工具里把几张现场帧上的贴附区域圈出来,给它一个类别号——不写规则,不调阈值,圈完就能训。
圈的是贴附这个动作的整体形态,不是那块布。手、正在按压的布、被贴的那块背板一起圈进去。只圈布,贴之前拿在手里和贴之后按在板上长得差不多;只圈手,四个位置又区分不开。
四块布之所以分成四个类别、而不是一个"防静电布"类加四个区域,原因很实际:NG 时要说清楚缺的是哪一块。工人拿着记录去补贴,需要知道去补哪个位置。四个位置的背板底纹、周边零件都不一样,模型区分起来也比想象中容易。加上贴标签,一共五类。
每类各标了几张。少样本能力在这里的实际意义是:一个新的贴附位从拿到现场图到能用,通常 1–10 张样本、几分钟配置。这决定了换机型时不需要把训练工程师再叫回现场——工艺员自己在标注界面上圈几张,点"检测"看效果,不行就再补两张。
调试期的判断标准很简单:拿一段没参与训练的现场录像回放,看五类轮廓是不是在该出现的时候出现、该消失的时候消失。轮廓抖、偶尔漏一两帧不用管,下一层会把它滤掉。
事件探测:手拿着布扫过去不算贴到
分割给出的是逐帧的"这里有个贴附形态"。要变成"第 4 块贴到了"这个判断,还差两个条件:位置对、稳得住。这一层就是干这个的,在事件编排器里配,不碰模型。
加上稳定性条件,是调试期实测出来的。早期只用"物体存在",工人从料盒取布、手越过背板时就会误触发——系统以为贴到了,实际布还在手上。这种误报最危险:它把漏贴件记成 OK,正好放过了这个项目要防的东西。用速度检测要求目标连续静止若干帧之后,这类误报消失。
"贴附位"这个检测区域同样重要。四块布长得一样,只有靠区域才能确认贴的是不是这个位置;另外相邻工位的工人偶尔会入画,不限定区域的话,别人的动作会被算到这一件上。区域是在这一页上画的框,改产线布局或换机型时改框就行。
| 事件 | 触发条件 | 用途 |
|---|---|---|
| E0 贴标签 | 标签类别 + 指定区域 + 稳定达标 | 开始一件 |
| E1 贴防静电布1 | 布 1 类别 + 贴附位 1 + 稳定达标 | 计入一块 |
| E2 贴防静电布2 | 同上,换类别和区域 | 同上 |
| E3 贴防静电布3 | 同上 | 同上 |
| E4 贴防静电布4 | 同上 | 同上 |
| E5 四块齐 | 数量检测:已贴块数 = 4 | 本件完成 |
| E6 离开未齐 | 物体不存在:工件离开工位,块数仍不足 4 | 判 NG,存图并标出缺哪块 |
E6 用的是"物体不存在"这个原语——工件走出检测区就意味着这一件结束了,该结算了。用工件本身当结算信号,比任何外部触发都可靠,也不需要额外接线。
状态机:一件的开始、累计和结算
到这一层,系统已经知道"哪一块贴到了"。剩下的是把这些事件攒成一件的结论。这件事完全由状态图决定,和模型无关。
自环是这张图的核心写法。它把四块布当成一个集合来累计:每贴到一块,状态不变,只让计数加一;真正的判定推迟到"齐了没有"这一刻。整张图上 NG 只有一种成因——工件走了而集合没满,缺哪一块从已经计入的类别里一看就知道。
这样写还有一个好处:加减贴附位不动结构。多一个位置,就多一个类别、多一个事件,把它接进同一个自环,再把 E5 的数量改一下,图的形状不变。
| 状态 | 在等什么 | 离开条件 |
|---|---|---|
| S0 等待贴标签 | 本件的起点动作 | E0 → S1 |
| S1 贴附中 | 四块防静电布 | E1–E4 自环(A2 计数 +1)/ E5 四块齐 → S2 / E6 离开未齐 → S3 |
| S2 本件完成 | — | 出记录(A0),复位到 S0 |
| S3 本件 NG | — | 出记录并存图(A1),复位到 S0 |
规则按现场定制,不用重做一套
同样是贴四块布,换一家工厂、换一条线,要求可能完全不同——有的多一个贴附位,有的只有两块是必检项,有的允许工人当场补贴,有的只想要报警不想判 NG。这类差异不该靠重新开发一套程序来吸收。
前面三层的分工在这里体现出价值:模型只管认得出,区域和稳定性管准不准,而"什么算合格"全部集中在状态图这一张画布上。所以定制通常不涉及训练,也不涉及代码——都是在图上改几笔:
| 现场提出的要求 | 怎么改 | 影响面 |
|---|---|---|
| 多一个贴附位 | 加一个类别和一个事件,接进 S1 的自环,改 E5 的数量 | 加 1 类 1 事件,图形不变 |
| 只有两块是必检项 | 改 E5 数量检测的判定条件和目标类别 | 改 1 个事件参数 |
| 允许工人当场补贴 | 从 S3 加一条回到 S1 的连线 | 加 1 条连线 |
| 只报警不判 NG | 把 S3 上的动作从"出记录并存图"换成"仅提示" | 改 1 个动作 |
| 换一种结算信号 | 把 E6 的原语从"物体不存在"换成产线到位信号 | 改 1 个原语 |
| 多机型混线,贴附位不同 | 一个机型一张工作流,按标签内容自动切换 | 复制工作流后改区域 |
定制不只是判定规则。记录里带哪些字段、NG 存不存图、存多久、结果是推给工位灯还是写进产线系统的哪个字段,都是在配置里定的。这个工位最后的落地形态就是这么谈出来的:现场只要工位灯和逐件记录,MES 那边只收 OK/NG 和缺件位置,其余不推。
把规则做成可配置的代价,是配置项比一套写死的程序多。但换来的是同一套东西能跟着工艺走——这个工位的判定规则在项目期内按现场要求调整过两次,两次都是当班改完、当班恢复生产,没有停线,也没有重新训练。
上线要准备什么
从 IT 和自动化的角度,这个工位需要落实的东西不多,但每一项都要提前定。
| 项目 | 要求 | 说明 |
|---|---|---|
| 相机 | 1080p 以上,25 fps,支持 RTSP | 机位要能俯视整个背板,四个贴附位都不被工人身体遮住 |
| 光照 | 工作面照度稳定,避免直射反光 | 金属背板反光是这个工位最常见的干扰源 |
| 算力 | 产线本地一台边缘 GPU | 一台可带多个工位,按相机路数配置 |
| 网络 | 相机与推理机同网段,千兆 | 推理在本地完成,不依赖厂区骨干网 |
| 输出 | RS485 或以太网 | 接工位灯/看板,或把逐件记录推给产线系统 |
| 数据留存 | NG 图本地存储,按天滚动 | 只存 NG,容量压力很小 |
调试期建议留一周。第一天装机位、跑通视频流;第二到三天标注五个类别、看回放调分割;第四到五天画贴附位的区域框、调稳定性条件;剩下两天空跑对比人工记录,确认没有误报。
复盘
一、把"认得出"和"判得准"分开,是这类项目能收敛的前提。模型只负责认贴附形态,位置、稳定性、结算规则全部放在模型外面配。现场调试时绝大部分时间花在后两层上,而它们改一次只要几分钟,不用等训练。
二、误触发比漏检危险得多。取料、手越过背板都可能让系统以为贴上了,把漏贴件记成 OK——正好放过这个项目要防的东西。解法不在模型里,而是在事件层加一个稳定性条件。
三、类别怎么分,取决于 NG 要怎么说。四块布分成四个类别,唯一的理由是缺件时要指名道姓说缺哪一块。先想清楚记录要长什么样,再回头定类别,比反过来省事得多。
四、把判定规则留在图上,是这套东西能跟着现场走的原因。加减贴附位、改必检项、换结算信号,都是改连线和参数。这一点在多工厂复制时的价值,比单点识别率高一两个点大得多。
这套方案适用于品类、工序、产线变化频繁,且缺陷"当场看不出来、流出去很贵"的手工工位。一台边缘 GPU 可以带多个工位、多条产线,配置方式在工位之间可以直接复制,规则再按各自现场调——这也是它比"为每个工位定制一套检测程序"更省的地方。
关于作者
计算机视觉方向博士,研究方向为少样本分割与视频行为理解;12 年工业视觉一线经验,累计交付 30+ 条产线、100+ 工位。
当前关注边缘 GPU 推理优化、跨域泛化与现场数据闭环——让同一套配置方式在不同工厂、不同工艺之间可复制。文章记录项目实施中的实际配置、判断逻辑与现场结果。