大模型视觉 · VisionAgent / 落地实践

医药行业穿戴合规监测

单机位、四项防护、一趟一结论——系统在人进门之前把「还差哪件」直接显示给本人,不卡顺序

本篇要点

  • 关键矛盾。这条通道要的不是「按固定手顺做完」,而是「进门前一件都不少」。硬卡顺序会让人被反复拦停,系统很快被绕过去。
  • 约束强度是配出来的。刻意不上顺序状态机,改成可乱序完成的清单;同一套能力换个编排方式就能支持强制手顺的车间。
  • 本轮锁存是关键一招。四项穿戴各引一路、本轮内触发过就保持成立,手套先于防护服完成不影响结果,也不会因遮挡被判回未完成。
  • 状态机只剩三个圈。顺序交给事件层之后,状态机只管一趟的起止与清零——这是省下来的复杂度。
  • 少样本起步。整个项目 8 张现场帧、4 个类别;加一项穿戴=补几张帧+清单加一格,不重训模型。
案例 01画面里的绿色轮廓与蓝色「编号: 类别名」都是系统实时输出,未做后期标注;右侧六格是给操作人员看的清单面板,当前项蓝色、已完成绿色。 整段 1 分 54 秒未做剪辑,是一个人从开门到放行的完整过程。

现场是一条狭长的更衣通道,通道口已有一台俯视相机。需求是在不改通道布局、不加穿戴传感器的前提下,判断人在进入工作区域之前四项防护是否穿到位,并且当场把结论给到本人。

01/6项目要求

先想清楚要卡的到底是什么

更衣类场景很容易被默认成强制手顺问题——上一个洁净区项目就是这样。但这条通道的验收标准只有一句:进入工作区域时,发套、口罩、防护服、手套四项都在身上。

先戴手套还是先穿防护服,现场不关心。真按固定顺序卡,结果是人被反复拦下来重做,系统很快就被绕过去——约束加错了地方,比不加更糟

所以这里刻意不上顺序状态机,改成一份可乱序完成的清单,另外用两个动作给流程划边界:开门作为这一趟的起点,展示双手作为收尾确认。约束强度是配置出来的,不是模型定死的——这一点决定了同一套能力能同时覆盖松要求和严要求的车间。

实测一趟更衣的完整记录

下面这张表是从上面那段录像里逐秒读面板状态得到的,不是示意值。注意第 77 秒那一行:手套已经判为完成,防护服还在待检测——乱序通过在现场是真的会发生,也确实被系统接住了。

时刻 面板变化 说明
0:05 开始(门把手)→ 已完成 门把手被单独圈出,这一趟开始计时
0:25 发套、口罩 → 已完成 此时人刚换完上身,两项先后落定
1:17 手套 → 已完成 防护服此时仍是待检测,顺序被允许颠倒
1:46 防护服 → 已完成 四项凑齐,清单只剩收尾项
1:47 结束(双手)→ 已完成 绿色横幅:穿戴合格,可以进入工作区域
1:50 六格复位为待检测 等下一个人,无需人工干预
现场约束 系统怎么满足
单机位俯视全程 直接接入既有 CCTV,尽量利旧
结论要在进门之前给出 本地实时推理,面板与横幅当场刷新
原始视频不出厂 推理在车间本地边缘设备完成,只出结论与留证
操作人员不接受培训 六格清单+一句放行提示,看颜色就知道还差哪件
穿戴要求会加项 加一项=补几张现场帧+清单加一格,不重训模型

边界立项时就把能做和不做写在纸上

能做

  • 发套/口罩/防护服/手套是否穿戴
  • 进入工作区域前是否四项齐全
  • 这一趟更衣的起止与耗时
  • 未凑齐即进门

部分能做

  • 口罩覆盖是否到位:需脸部特写机位
  • 手套是否双手都戴:俯视机位下会互相遮挡

明确不做

  • 拉链/袖口是否收紧
  • 口罩反戴、落地后继续使用
  • 洁净服效期
  • 固定手顺(本现场不要求,故未启用)

02/6张量流

六个算子在画布上连成一条流

整套配置的骨架是一张张量流画布。实施人员从左侧算子库拖出算子、按数据流向连线、在节点里填参数,不写一行代码。先看完整的一张,后面三节讲的都是双击某个节点之后的事。

张量流编辑器界面:左侧算子库按全部、相机、大模型、外设、逻辑、输出分类,画布上视频流相机、图像预处理、语义分割、事件探测、状态机五个节点连成主线,状态机再接一个存图节点
界面 01本项目配好的张量流。主线是视频流相机 → 图像预处理 → 语义分割 → 事件探测 → 状态机,状态机的「状态变化」输出再接一个存图节点留关键帧。整条流只有 6 个节点,图中蓝框选中的是语义分割节点,双击进界面 02。
算子 配什么 为什么单独成一层
视频流相机 RTSP/HTTP 流地址、点位 利旧现有 CCTV,视频只在本地流转
图像预处理 去噪、增强、归一化 通道内外光照差异大,先拉平再进模型
语义分割 每类最小面积、检出置信度、防抖帧数 「看见」只在这里训,每类 1–10 张现场帧起步
事件探测 E0–E5 的判定逻辑 把轮廓翻译成业务语言,纯配置
状态机 轮次起止与清零 只管一趟的边界,改动成本最低
存图 触发时机、保存路径 留可复核的关键帧,不进控制回路

加一项穿戴(比如鞋套):分割节点补一行类别、补几张现场帧,事件探测加一个事件和一路引用,状态机不动。改成强制手顺:只动状态机,检测层与模型都不动。换一条通道:整条流复制过去,类别沿用。

03/6语义分割

让系统看见穿戴件

为什么用像素级轮廓而不是画框:这条通道狭长,人侧身、弯腰、半穿是常态,防护服与墙面同为浅色,手套和裸手轮廓接近。只给一个方框,判不出这件东西在不在该在的位置上。轮廓给出的是形状和位置,判定层才有东西可用。

语义分割标注界面:顶部缺陷类型选为 13 口罩,左侧为画笔、多边形、擦除等标注工具,中间左窗格是人工标注的橙色蒙版、右窗格是模型给出的绿色轮廓与类别标签,右侧图像列表共 8 张图像 4 个类别,底部为保存标注、迁移、检测按钮
界面 02配「看见」的全部界面就是这一个:选好缺陷类型(图中是「13 口罩」),用多边形圈出目标,点检测。左窗格是人工标注的橙色蒙版,右窗格是模型跑出来的结果——绿色轮廓与蓝色类别标签是系统自己画的,来自本项目运行录像的真实帧。留意右上角计数:整个项目 8 张图像、4 个类别。类别编号 1、12、13、16 并不连续——类别表里已有的目标远多于这个项目用到的几项。
编号 类别名 在流程里的角色 现场难点
1 开始(开门) 流程起点,触发这一趟计时 把手细长、金属反光,需贴合轮廓而非方框
12 发帽 清单第一项 与深色头发对比弱,俯视下可见面积小
13 口罩 清单独立一项 侧脸时可见面积小,靠面积阈值放宽
16 手套 清单独立一项 与裸手轮廓接近,穿戴过程中形态变化大

面板上写的是「发套」,检测类别叫「发帽」,这不是笔误——清单项属于业务口径,检测类别属于模型口径,两者由判定层做映射。想改叫法、想把两个类别并成一项验收、想把一项拆成两个类别分别判,都只在配置里动。

04/6事件判定

乱序可通过是怎么配出来的

分割只负责看见像素,业务要的是「发套戴上了」「可以放行了」这种可判定事件。判定逻辑在事件编排器里搭:从原语库拖判定积木、在节点属性里选目标类别,再用「与/或/非」组合成成立条件。

GPU 事件编排器界面:左侧原语库按全部、关系、逻辑、判定、信号分类,中间画布上四个事件引用原语以本轮锁存方式引用四项穿戴事件,与一个物体存在原语经与门组合成放行确认事件,右侧为六个事件清单与节点属性
界面 03双击张量流的「事件探测」节点进入。图中在配 E5 放行确认:四项穿戴各用一个事件引用原语接进来,引用方式选本轮锁存,第五路是收尾动作「双手」的物体存在,五路经「与 (AND)」组合。乱序可通过就是这么来的——锁存的含义是「本轮内触发过就保持为 1,直到这一轮结束清零」,所以手套先于防护服完成不影响结果,完成后也不会因为袖口遮挡又被判回未完成。
原语 怎么配 本项目用在哪
物体存在 目标类别(可多选)+检测区域 E0–E4:开门、发套、口罩、防护服、手套;E5 的「双手」
事件引用 引用事件+引用方式(本轮锁存/当前结果) E5:四项穿戴各引一路,全取本轮锁存
与/或/非 连线组合多个原语 E5:五路条件全部成立才放行
物体不存在 必选 1 个类别,无则触发 「中途摘掉口罩」这类倒退动作,暂未启用
数量检测 比较模式+阈值 手套需左右各一;俯视机位会互相遮挡,暂未启用

容易配错的地方:最小面积、检出置信度、防抖帧数是语义分割节点上的参数,不是事件的参数。调参顺序必须是先把分割调稳,再动事件的连线与引用方式——分割不稳的时候在事件层加条件,是在用逻辑补模型的账,越调越乱。

05/6轮次边界

状态机只剩三个圈

事件层已经把四项穿戴收成一个「放行确认」,剩下的问题只有一个:这一趟从哪一刻算开始、到哪一刻算结束、什么时候清零重来。这件事交给状态机。它是整套配置里最薄的一层——薄到只有三个圈,而这正是把顺序交给事件层之后省下来的复杂度。

状态图编辑器界面:画布上待机、更衣中、穿戴合格三个状态圆圈,由开门确认与放行确认两条事件转移连接,右侧为事件张量与状态-动作张量两个面板
界面 04双击张量流的「状态机」节点进入。整轮更衣只有三个状态:S0 待机、S1 更衣中、S2 穿戴合格,中间只有两条转移——E0 开门确认 开一轮,E5 放行确认 收一轮。四项穿戴一个都没出现在这张图上:它们已经在事件层用本轮锁存消化掉了。回到 S0 也不是图上的一条边,而是状态机节点的重置端口在轮次结束时清零,录像里第 110 秒六格复位就是这一下。右侧「状态-动作张量」里除了 3 个状态,还挂着唯一一个动作 A0 存图 · 放行,绑在 S2 上。
状态 进入条件 这一状态下在做什么 离开条件
S0 待机 系统启动,或上一轮结束后重置 只等门被拉开这一个信号 E0 开门确认
S1 更衣中 E0 开门确认 四项穿戴各自锁存,面板逐格转绿 E5 放行确认
S2 穿戴合格 E5 放行确认 触发 A0 存图,给出放行结论 重置端口清零,回到 S0

三个状态本身没什么可调的,真正要和车间确认的是拿什么当一趟的起点和终点。这个项目选了开门和双手出通道,理由很实际:两者都是稳定、单一、不会中途反复出现的视觉事件,用它们划轮次,统计出来的每趟耗时才有可比性。如果现场的门常开、或者一次进多人,起点就得换成别的锚点(比如站定在指定区域)——换的是 E0 这一个事件的判定逻辑,状态图不动

06/6现场落地

IT 要准备的是一张一次性清单

这套东西不涉及生产网改造。整个部署对甲方 IT 来说是一次性配合,之后的维护落在业务侧的配置界面里。

说明 谁负责
相机流地址与只读账号 按点位给出流地址,只读即可 甲方 IT
边缘服务器 带 GPU,放在视频能到达的机柜 甲方采购或由我们提供
现场显示终端 通道内一块屏,给操作人员看清单与放行提示 甲方提供位置与电源
网络策略 只拉视频、只推结论,不需要外网 甲方 IT
门禁联动(可选) 放行信号以旁路方式给出,不进控制回路 双方确认
存储与备份 留证保留周期、配置文件备份策略 双方确认

一台边缘智能体可同时承载多路相机、多条张量流:多条更衣通道、缓冲间、不同车间共用一台设备和一套配置界面。新增工位主要是加相机、复制流、补少量现场帧。

07项目体会

约束强度应该是一个配置项

这个项目我印象最深的是「别把顺序卡死」。前一个洁净区项目要求六步一步不能颠倒,这条通道只要求进门前一件不少——同样是更衣,约束强度差很远。

两个项目用的是同一套东西:同样的语义分割、同样的事件编排器、同样的状态机节点。差别只在编排方式:洁净区把事件逐个挂到状态机的转移上,跳步不推进;这条通道把事件用本轮锁存并进一个「放行确认」,谁先谁后都行。检测层完全不动。

能不能把这种差别做成配置项,而不是每次重做一套系统,是我判断一套视觉平台好不好用的标准。现场的人改得动,系统才留得下来。

另一个体会是结论给谁看。这个项目把结论直接给到本人:面板上少哪件是绿的一眼就看出来,不用等管理人员到场复核。约束只卡在真正要卡的地方,不制造无谓的拦停——现场愿意用,数据才是真的。

LEO

Leo

计算机视觉博士 · VisionAgent 方案与交付

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

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