先看系统在更衣间实际在做什么,再看这套东西是怎么配出来的。
画面里的彩色掩膜与类别名是系统实时输出:防护口罩、防护头罩、防护连体衣、防护目镜、防护手套逐件识别, 「系鞋带」这类动作单独成事件 · 本地边缘推理,视频不出厂。 上面是 38 秒精华,按更衣顺序取的五个片段; 完整 11 分钟连续记录 未做剪辑。
现场已有 CCTV。需求是在不改生产工艺、不改原有声光报警的前提下, 对更衣顺序、防护用品穿戴结果做实时识别、记录与预警,形成可追溯的审计数据。 客户名称不公开,方案怎么落地可以公开。
传统 AOI 和目标检测擅长回答「画面里有没有口罩」。但更衣的验收标准是 「口罩→头罩→连体衣→鞋→目镜→手套,一步不能少、一步不能颠倒」。 这两件事差别很大:前者是单帧判断,后者是带记忆的流程判断。 所以本项目把系统拆成两层——大模型负责看见,状态机负责判顺序。 这也决定了后面改规则时,改的是状态机配置,不是重新训练模型。
| 维度 | 现场约束 | 系统怎么满足 |
|---|---|---|
| 视频基础 | 已有 CCTV / NVR,RTSP 取流 | 直接接入,尽量利旧;细粒度点位再加近景 |
| 合规 | 不改工艺、不改原报警策略 | AI 做旁路观察层,不进控制回路 |
| 数据安全 | 原始视频不出厂 | 车间本地边缘 GPU 推理,只出事件与证据 |
| 审计 | 事件可追溯、可复核 | 关键帧 + 短视频 + 置信度 + 命中的事件与规则 |
| 可维护 | SOP 会变,不能每次都返厂 | 改顺序改配置;新增识别目标 1–10 张现场帧起步 |
| 能做 | 部分能做 | 明确不做 |
|---|---|---|
|
更衣步骤顺序与漏步 防护口罩 / 头罩 / 连体衣 / 目镜 / 手套是否穿戴 系鞋带等关键动作 未穿好即进入洁净区 摸脸 / 靠墙 / 坐操作台 |
手消毒(能见喷壶动作,不见是否出液) 口罩覆盖是否到位 / 头发外露(需脸部特写镜头) |
洁净服效期日期 拉链 / 袖口是否收紧 口罩反戴、落地继续使用 「大幅度转身」这类无法量化的主观要求 |
立项时就把「能做 / 部分能做 / 不做」写在纸上,验收不扯皮。 系统复用现有摄像头、本地推理、不改报警策略——IT 和 QA 两边都过得去。 新规则靠配置不靠重训,试点期改得动。
为什么用像素级语义分割而不是画框:更衣间里人是侧身、弯腰、半穿状态, 防护服和墙面同为浅色、手套和裸手轮廓接近。框回归在这种场景很容易把「拿在手上」当成「穿在身上」。 分割给出的是掩膜,可以进一步用面积和位置区分「拿着」与「穿好」。
| 分割类别 | 掩膜颜色 | 判什么 | 难点 |
|---|---|---|---|
| NG1 防护口罩 | 洋红 | 存在性 | 侧脸时可见面积小,靠面积阈值放宽 |
| NG2 防护头罩 | 青 | 存在性 | 与连体衣同色系,靠位置在头部区域区分 |
| NG3 防护连体衣 | 绿 | 穿戴完整性 | 「拿在手上」与「穿在身上」需按掩膜与人体重合度区分 |
| NG4 防护目镜 | 紫 | 存在性 | 反光强,需覆盖不同光照的样本 |
| NG5 防护手套 | 蓝紫 | 存在性(左右各一) | 内层手套与外层手套形态相近,靠颜色 + 数量区分 |
依托 Transformer 少样本能力,新增一类目标只要 1–10 张现场帧,数分钟就能完成配置并看到结果。 补样本后点「迁移」做增量优化,不必推倒重训。 换产线、换更衣间时,类别与样本可以迁移复用,这也是同一套系统能覆盖多工位、多产线的原因。
分割只负责看见像素,业务要的是「头罩戴好了」「连体衣穿上了」这种可判定事件。 事件本身在状态机里定义,判定逻辑在事件编排器里搭: 从原语库拖判定积木、在节点属性里选目标类别,再用「与 / 或 / 非」组合成成立条件。 改判定只动参数和连线,不必重训模型。
E ∈ R⁶,选中节点的参数为 P ∈ R³。| 原语(均标注为 GPU算子) | 怎么配 | 本项目用在哪 |
|---|---|---|
| 物体存在 | 目标类别(可多选)+ 检测区域 + 切图框 | E0–E2、E4:口罩 / 头罩 / 连体衣 / 目镜是否穿戴 |
| 物体不存在 | 必选 1 个类别,无则触发 | 「摘掉头罩」这类倒退动作的判定 |
| 数量检测 | 比较模式(等于 / 大于 / 区间)+ 阈值 | E5:手套需左右各一,数量 = 2 |
| 速度检测 | 运动速度阈值(px/s)+ 持续帧数 | E3:系鞋带这类动作事件,不看物体存在 |
| 宽度 / 角度检测 | 长短轴比;参考角度与最大偏差 | 可选加严,本项目暂未启用 |
| 与 (AND) / 或 (OR) / 非 (NOT) | 连线组合多个原语 | E2:连体衣存在 且 头罩存在 |
一个事件只判一件事;先把分割调稳再动阈值。 误报优先加防抖帧数,漏报优先降最小掩膜面积与检出置信度。 目标类别下拉直接引用标注工具里定义的那 5 类,改判定不必碰模型。 事件之间可互相引用,若引用成环需改用「本轮锁存」而非「当前结果」。
顺序强制不靠额外写 NG 规则,而是靠「非预期事件一律自环」: 只有「当前状态 × 对应事件」这一格填了目标状态,流程才前进一步。 跳步不推进,缺步永远走不到终点。需要报警或写记录时,把动作 (A) 挂在对应转移上。 改手顺只改这份配置,不必重训分割模型。
E ∈ R⁷(含一个「空事件」),状态-动作张量 S,A ∈ R⁷。下半「📊 规则表」:行为当前状态、列为事件,绿字格是目标状态,其余一律「↻ 自环」。这就是顺序强制的全部实现——没有一条 NG 规则,跳步自然走不通。| 状态 | 等待的事件 | 事件怎么判 | 走通后 |
|---|---|---|---|
| S0 等待防护口罩 | E0 防护口罩确认 | 物体存在(防护口罩) | → S1 |
| S1 等待防护头罩 | E1 防护头罩确认 | 物体存在(防护头罩) | → S2 |
| S2 等待防护连体衣 | E2 防护连体衣确认 | 连体衣存在 且 头罩存在 | → S3 |
| S3 等待系鞋带 | E3 系鞋带确认 | 动作区速度 + 持续帧数 | → S4 |
| S4 等待防护目镜 | E4 防护目镜确认 | 物体存在(防护目镜) | → S5 |
| S5 等待防护手套 | E5 防护手套确认 | 手套存在 且 数量 = 2 | → S6 更衣完成 |
| S6 更衣完成 | — | 记 OK 并写入耗时与关键帧 | 终点 |
插一步(比如加手消毒):加一个状态 + 一个事件,去事件编排器给它搭判定逻辑,再在规则表里改两格目标状态。 调顺序:只改规则表里绿字格的位置。 换更衣间:状态机整份复制,分割类别沿用,补少量现场帧做迁移即可。 全过程不动模型,也不需要我们的算法人员在现场。
前面三层不是三个独立工具,而是同一条张量流上的节点,在配置界面里拖出来连好即可。 整条流没有一行代码:节点从左侧节点库拖出,端口连线定数据流向,参数在节点里填。
| 节点 | 配什么 | 为什么放在这一层 |
|---|---|---|
| 视频接入 | RTSP 地址、取流帧率、点位 | 利旧现有 CCTV,视频只在本地流转 |
| 图像预处理 | 去噪、增强、归一化 | 更衣间光照差异大,先拉平再进模型 |
| 语义分割 | 5 类防护用品,每类 1–10 张现场帧 | 看见是模型的事,只在这里训 |
| 事件探测 | 6 个事件的判定逻辑(原语 + 与或非) | 把像素翻译成业务语言,纯配置 |
| 状态机 | 7 状态 × 7 事件的规则表 | 顺序与验收标准都在这里,改动成本最低 |
| 事件输出 | OK/NG 事件、关键帧 + 短视频、旁路 HMI | 不进控制回路,满足合规要求 |
| 项 | 说明 | 谁负责 |
|---|---|---|
| RTSP 地址与只读账号 | 按点位给出流地址;只读即可 | 甲方 IT |
| 边缘服务器 / 智能体硬件 | 带 GPU,放在视频能到达的机柜 | 甲方采购或由我们提供 |
| 网络策略 | 只拉视频、只推事件;不需要外网 | 甲方 IT |
| 存储与备份 | 证据保留周期、配置文件备份策略 | 双方确认 |
| 账号权限 | 操作员 / 复核员 / 管理员三级 | 甲方指定 + 平台配置 |
一台边缘智能体可同时承载多路相机、多个张量流:更衣间、缓冲间、无菌操作台可以共用一台设备与一套配置界面。 新增工位主要是加相机、复制张量流、补少量现场帧,不需要新增一套系统。