警戒线为什么总是漏报

视觉算法 · 2026-07-12 · 6 分钟

脚点、轨迹和死区:把「有人经过」变成稳定、可解释的跨线事件。

这次跨线调整在家用调试环境中复现和验证。让算法判断"有人越过了这条线",听起来是个几何问题。做下去才发现,难点全在不稳定上。

用什么点代表"人在哪"

最直觉的做法是拿检测框中心。但人的框会随姿势变化——蹲下、伸手、背包——框中心跟着漂,于是在线附近会来回横跳。

改用检测框底边中点当脚点。人站在哪里,脚就在哪里;上半身怎么动都不影响。一个小改动,抖动消失大半。

单帧判断不够,要看轨迹

只比较相邻两帧的位置,任何一次漏检都会造成一次假跨越。所以做跨帧的同类目标关联,把同一个人的位置连成轨迹,再判断轨迹与线段的关系。

贴着线来回走的人

最常见也最难缠的场景:一个人在警戒线旁边来回踱步,脚点反复穿过线。每次都算一次越线,就是刷屏式误报。

解决办法是在线的两侧各设一段死区:脚点必须"从死区外进入、穿过线、再离开对侧死区",才算一次完整跨越。中途折返不算。

防抖的本质不是让判断更迟钝,而是让判断基于一段完整的运动,而不是一个瞬间的位置。

三条改动落地后,本地触发的一次事件置信度约 0.90;该值是单次模型输出,准确率和误报率需要另行评估。跨线判定本身有 6 个专项测试,每个对应一类边界:两侧观测、线段外不触发、抖动不误报、斜线门槛、非线 ROI 兼容、非法输入 fail-closed(宁可漏报也不误报)。

几何逻辑的好处是它可以被完整测试——这也让后续很少有人敢在这里引入回归。