feat(v1): add temporal fall state machine

This commit is contained in:
ila
2026-07-21 09:59:53 +08:00
parent 3c0e11f811
commit 1f6bbd8f98
8 changed files with 231 additions and 26 deletions
+9
View File
@@ -152,3 +152,12 @@
- 阻塞:无。
- 决策:状态机只接收按 ID 的可用证据与单调秒数;视频帧率、空帧、来源断流和拒绝姿态都不能缩短确认窗口或创建事件。
- 下一步:写入 T-105 失败测试。
## 【2026-07-21】T-105 实现按 ID 的时序摔倒状态机(完成)
- 状态:DONE
- 变更:新增 `v1/fall_state.py`,为每个 `track_id` 独立维护 NORMAL、SUSPECT、CONFIRMED、RECOVERING。只有连续、可用的倒地候选达到 1–3 秒确认窗口才产生一个 `FallEvent`;确认后持续帧不会重复返回事件,拒绝证据会打断疑似持续时间,恢复证据持续后才回到 NORMAL。
- 验证:先运行 `python -m pytest v1/tests/test_fall_state.py -v`,确认因缺少 `v1.fall_state` 导入失败;实现后状态机测试 6 passed,完整 V1 测试在本轮最后一次运行时为 20 passed,`python -m compileall -q v1 demo` 通过。
- 阻塞:无任务内 blocker。当前尚未创建把 Pose/跟踪/证据喂给状态机的应用编排层,因此不能把这些单元测试误称为真实视频摔倒检测验收。
- 决策:确认窗口在构造时强制限制为 1–3 秒;同一人员的时钟与事件序号隔离。声音、弹窗、截图与 JSONL 仍由 T-201/T-202 实现,状态机不执行这些副作用。
- 下一步:T-201,实现顶部双 Tab 的 PyQt 监控/设置界面,并保持其不直接执行事件判断。