静止对象检测
什么是静止对象?
当被追踪的对象在连续多帧中保持几乎相同的位置时,Frigate会将其判定为静止对象。这个判定阈值可在配置文件的detect -> stationary -> threshold
中设置,默认值为帧率的10倍(即10秒)。一旦对象被判定为静止,除非检测到其内部发生运动或位置变化,否则将保持静止状态。
静止对象检测的意义
对象被判定为静止后,Frigate将不再持续对其运行对象检测。这能有效降低资源消耗,避免对无运动变化的对象进行冗余检测。同时使系统具备上下文感知能力,例如可以选择性保留录像片段,仅记录对象处于活动状态的时段。
需要注意的是,单纯的光线变化(如停放的车辆受光照变化)不会使静止对象重 新变为活动状态。
参数调优
默认配置如下:
detect:
stationary:
interval: 50 # 检测间隔帧数
threshold: 50 # 静止判定阈值
interval
:设置对静止对象运行检测的频率。默认每50帧检测一次,确保对象仍然存在threshold
:对象需要保持静止的连续帧数才能被判定为静止
注意:无法通过调整interval
完全禁用静止对象追踪。
技术实现原理
Frigate并非从一开始就支持静止对象追踪功能。让我们通过一个实际案例说明其必要性:
假设需要记录所有进入车道的车辆:
-
简单方案:仅在车道区域检测到运动时运行对象检测
- 但无法确定车辆的行驶轨迹(左转/右转进入)
- 无法关联之前在路边停留的车辆
- 当车道附近有人修剪草坪时,难以区分车辆和园丁的运动
-
进阶方案:通过对象追踪赋予唯一ID
- 需要解决多目标交叉时的ID分配问题
- 当被追踪车辆接近路边停放的车辆时:
- 车灯反射会导致误检测出多个车辆
- 原有单一检测框突然变成多个检测框
- 传统算法(如卡尔曼滤波)在这种情况下错误率较高
-
静止对象追踪的优势:
- 预先标记路边停放车辆为静止对象
- 新出现的车辆会被识别为独立目标
- 大幅降低ID分配错误率(虽然仍不完美)
当前系统最大的挑战是处理对象完全遮挡的情况(如一辆车完全挡住另一辆车)。这是未来版本需要改进的方向。