这次跨线调整在家用调试环境中复现和验证。让算法判断"有人越过了这条线",听起来是个几何问题。做下去才发现,难点全在不稳定上。
用什么点代表"人在哪"
最直觉的做法是拿检测框中心。但人的框会随姿势变化——蹲下、伸手、背包——框中心跟着漂,于是在线附近会来回横跳。
改用检测框底边中点当脚点。人站在哪里,脚就在哪里;上半身怎么动都不影响。一个小改动,抖动消失大半。
单帧判断不够,要看轨迹
只比较相邻两帧的位置,任何一次漏检都会造成一次假跨越。所以做跨帧的同类目标关联,把同一个人的位置连成轨迹,再判断轨迹与线段的关系。
贴着线来回走的人
最常见也最难缠的场景:一个人在警戒线旁边来回踱步,脚点反复穿过线。每次都算一次越线,就是刷屏式误报。
解决办法是在线的两侧各设一段死区:脚点必须"从死区外进入、穿过线、再离开对侧死区",才算一次完整跨越。中途折返不算。
防抖的本质不是让判断更迟钝,而是让判断基于一段完整的运动,而不是一个瞬间的位置。
三条改动落地后,本地触发的一次事件置信度约 0.90;该值是单次模型输出,准确率和误报率需要另行评估。跨线判定本身有 6 个专项测试,每个对应一类边界:两侧观测、线段外不触发、抖动不误报、斜线门槛、非线 ROI 兼容、非法输入 fail-closed(宁可漏报也不误报)。
几何逻辑的好处是它可以被完整测试——这也让后续很少有人敢在这里引入回归。