16337 5b2440c467 refactor(aiot): 离岗检测算法v2.0 - 全面重构
重构目标:
- 更清晰的状态机设计
- 滑动窗口平滑检测结果
- 更准确的告警判断逻辑

核心改进:
1. 状态机优化(6个状态 → 7个状态)
   - INIT: 初始化
   - CONFIRMING_ON_DUTY: 上岗确认中
   - ON_DUTY: 在岗
   - CONFIRMING_OFF_DUTY: 离岗确认中
   - OFF_DUTY_COUNTDOWN: 离岗倒计时
   - ALARMED: 已告警
   - NON_WORK_TIME: 非工作时间

2. 滑动窗口机制
   - 10秒滑动窗口,存储检测历史
   - 计算命中率(person_count / total_frames)
   - 上岗条件:命中率 ≥ 70%(允许30%漏检)
   - 离岗条件:命中率 = 0(窗口内完全没人)

3. 参数优化
   - confirm_on_duty_sec: 上岗确认(默认10秒)
   - confirm_off_duty_sec: 离岗确认(默认30秒)
   - confirm_return_sec: 回岗确认(默认10秒)
   - leave_countdown_sec: 离岗倒计时(默认300秒)
   - 向后兼容:confirm_leave_sec → confirm_off_duty_sec

4. 状态监控增强
   - get_state() 返回详细状态信息
   - 包含倒计时剩余时间、检测命中率等

5. 日志分级
   - INFO: 关键状态转换(确认上岗、确认离岗)
   - DEBUG: 次要状态转换(进入确认状态)
   - WARNING: 告警触发

技术细节:
- 使用deque实现O(1)滑动窗口更新
- 兼容旧参数名(confirm_leave_sec)
- 回岗自动发送resolve事件
- 非工作时间自动清理状态

影响范围:
- 告警判断更准确(抗漏检干扰)
- 状态转换更合理(细化确认流程)
- 调试更友好(详细状态信息)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-12 15:41:05 +08:00
2026-02-02 14:49:47 +08:00
Description
边缘推理层
37 MiB
Languages
Python 100%