feat(v1): per-frame fall decision diagnostics overlay
PersonAnalysis now carries the policy Evidence; view_model builds a Qt-free per-person diagnostic line (acc/horiz/ang/rapid/cand/state, or the reject reason) and VideoView overlays it in a corner. Read-only, no decision change; locates where a real fall stops. 67 tests pass. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -289,3 +289,12 @@
|
||||
- 阻塞:界面角落叠加渲染需 Windows + PyQt5 冒烟;诊断字符串构建与管线暴露策略证据在本环境可测。
|
||||
- 决策:`FallPipeline` 的 `PersonAnalysis` 增加策略 `Evidence`(`is_fall_candidate`/`is_recovery_candidate`),`view_model` 增 Qt-free 的 `person_diagnostic_line` 与 `MonitorViewState.diagnostics`,GUI 在画面角落叠加;不改判定逻辑,只暴露 `accepted/horizontal/角度/rapid/candidate/state` 与拒绝原因。
|
||||
- 下一步:先写诊断字符串失败测试,再实现管线暴露与叠加渲染。
|
||||
|
||||
## 【2026-07-21】T-208 每帧摔倒判定诊断叠加(完成)
|
||||
|
||||
- 状态:DONE
|
||||
- 变更:`pipeline.py` 的 `PersonAnalysis` 增加策略 `Evidence` 字段(`is_fall_candidate`/`is_recovery_candidate`)并在 `process` 中填充。`view_model.py` 新增 Qt-free `person_diagnostic_line`(accepted 时输出 `acc=1 horiz/ang/rapid/cand`,拒绝时输出 `acc=0 <reason>`)与 `MonitorViewState.diagnostics`。`gui.py` 的 `VideoView` 在画面左上角半透明叠加每人诊断行。不改任何判定逻辑,只暴露决策中间量。
|
||||
- 验证:新增 view_model 三项测试(accepted 决策字段格式、拒绝原因格式、build_monitor_view 每人一行诊断);`python3 -m pytest v1/tests -q` 为 67 passed;`python3 -m compileall -q v1 demo` 退出码 0。真实链路冒烟:假适配器立位人经真实 `FallPipeline`→`build_monitor_view` 得到 `P-0001 NORMAL acc=1 horiz=0 ang=90deg rapid=0 cand=0`(立位躯干近垂直、角度 90°、非水平、无快速下移、非候选,符合预期)。
|
||||
- 阻塞:画面角落叠加渲染需 Windows + PyQt5 冒烟;诊断构建与管线暴露本环境已验证。
|
||||
- 决策:诊断只读、不改判定;用于定位 1.2 米俯视实测中摔倒未确认卡点——重点看 `rapid`(俯视下髋部图像位移小,可能长期为 0,即根本进不了 SUSPECT)、`acc`(摔倒瞬间膝踝质量是否被拒)、以及是否进了 SUSPECT 但未撑满 1.8s。
|
||||
- 下一步:据现场诊断读数决定调阈值还是换俯视判据(可能需新 task);继续 T-203 现场验收。
|
||||
|
||||
Reference in New Issue
Block a user