Files
silver_pose/docs/current-state.md
T
ilaandClaude Opus 4.8 289f781134 feat(v1): add PyQt dual-tab monitor and settings UI
Qt-free view_model builds monitor view state and isolates the settings
draft from the running config snapshot; gui.py/app.py are a thin PyQt5
shell that only renders already-decided FrameAnalysis. 39 tests pass.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-21 19:43:49 +08:00

5.3 KiB
Raw Blame History

当前实现状态

本文是可覆盖的当前快照;历史执行记录见 ../progress.md。

当前快照

  • 日期:2026-07-21
  • 阶段:V1 事件管线与 PyQt 双 Tab 界面外壳已建立;T-201 已验收,等待 T-202。
  • 已验证环境:Windows PowerShell;Python 3.8.10;Ultralytics 8.3.205;PyQt5 可导入。注意:当前 WSL/Linux 环境未安装 PyQt5,且其 ultralytics/torch 版本与该基线不兼容(模型前向不可用),故 GUI 可视化与真实模型端到端渲染只在 Windows 验证;本环境用 Qt-free 的 view_model.py 单元测试与假适配器管线冒烟覆盖视图逻辑。
  • 旧生产基线:demo/main.py、demo/fall_detection_gui.py、demo/detect_fall.py、demo/best.pt。
  • V1 代码:已建立安全配置、显式 Replay/Stream 视频源、Pose、轻量跟踪、质量/几何证据、倒地领域规则、按 ID 四态事件机及 v1/pipeline.py 事件管线;运行事件带非敏感 config_version,缺帧/低质量/断流会中断证据确认。新增 v1/view_model.py(Qt-free 监控视图状态与设置草稿三份隔离)、v1/gui.py 薄 PyQt5 双 Tab 外壳与 v1/app.py 装配(FrameWorker 只发出已判定的 FrameAnalysis,窗口只渲染)。声音、弹窗、截图、JSONL 和真实 RTSP 接入尚未实现。
  • V2 代码:v2/ 目录存在但尚无实现。
  • 非代码设计工件:docs/ui/silver-pose-ui-ux-spec.md、docs/ui/2026-07-20-html-prototype-plan.md、docs/ui/silver-pose-v1-prototype.html 与 docs/ui/silver-pose-v2-prototype.html 已建立。v2 HTML 是符合正式浅色 Windows 规范的当前视觉参考:浅灰蓝底、白色卡片,红色只表示确认摔倒、其弹窗和事件证据;文件名中的 v2 只表示原型设计修订,不能理解为 Go V2 实现已开始。v1 HTML 保留为历史深色对照。两者均使用顶部双 Tab、设置草稿与状态交互,且画面、事件和时间都是模拟数据,不连接真实摄像头、模型或网络,也不改变 Phase 1 任务顺序。
  • 测试:python -m compileall -q v1 demo 已通过(含 gui.py、app.py 语法);python -m pytest v1/tests -v 当前有 39 项配置、视频源、Pose、跟踪、证据、领域规则、状态机、管线和视图模型测试并已通过。demo/1.mp4 的首两帧回放时间戳已验证为 0.000000 与 0.033333 秒;T-106 的真实模型/录像 smoke 在首帧得到 2 名已分析人员、第二帧得到 0 名人员且未创建事件;T-201 的视图冒烟以真实录像解码 + 真实管线 + 确定性假 Pose 适配器驱动 build_monitor_view,得到稳定 ID、box、14 段骨架、17/17 关键点与 NORMAL/success,断流帧 0 人且不显示摔倒标签。这些只验证管线与视图可运行,不表示摔倒识别准确率。init.ps1 会检查运行时依赖、编译旧基线并运行 V1 测试,但不会安装软件包。
  • 模型:demo/best.pt 可加载为 YOLO Pose,类别 person,kpt_shape=[17, 3];与 D:\PythonP\fall_detection\best.pt 哈希一致。
  • 当前标准启动:./init.ps1。
  • 当前标准验证:python -m compileall -q demo。
  • 当前 blocker:PyQt 界面外壳已实现但可视化冒烟需在 Windows 执行;本地报警/弹窗/截图/JSONL 闭环(T-202)尚未实现;尚无带标签的正反例回归录像及事件标签;真实海康 RTSP 流尚未接入,实时流单调计时策略尚待 T-203 在现场验证。

全局环境的 pip check 存在其他项目的包冲突,因此它不是 Silver Pose 的验收命令。init.ps1 只检查本项目实际导入的 OpenCV、NumPy、Ultralytics 与 PyQt5,并在命令非零退出时失败。

当前目录要点

路径 状态 说明
demo/ 已有 旧 Python GUI、Pose 模型与样例视频;当前单帧规则不适合作为正式事件逻辑。
v1/ 待开发 新 Python V1 的正式实现目录。
v2/ 待开发 Go V2 目录;V1 验收前不实现功能。
docs/ 已有 Harness Coding 文档、任务和计划。
tests/ 不适用 V1 测试将在 v1/tests/ 下创建。
artifacts/ 待创建 本地事件截图和 JSONL,不提交。

任务状态

  • 已完成:T-000(Harness 文档与旧基线快照)、T-101(V1 安全配置基线)、T-102(视频源与录像回放)、T-103(Pose 适配器与模型校验)、T-104(跟踪与姿态质量证据)、T-105(按 ID 时序状态机)、T-106(事件管线与事件契约)、T-201(顶部双 Tab 的 PyQt 监控与设置界面)。
  • 正在进行:无。
  • 下一个可领取:T-202(本地报警、弹窗、截图和 JSONL 日志)。

当前可运行内容

./init.ps1
Set-Location demo
python main.py

已知事实和限制

  • 当前 demo/ 的摔倒判定来自单帧、硬编码阈值和任意规则短路;界面部分阈值不会传入实际逻辑。
  • 当前模型是通用 person Pose 模型,不是摔倒事件分类模型。
  • 当前机器在无 GPU 条件下,对 848×480 本地样例以 640 输入运行 Pose 的测量均值约为 64.5 ms/帧;这仅是模型推理,不是端到端 RTSP/GUI 性能承诺。
  • V1 的客户演示范围限于固定俯视大厅/走廊、全身大部分可见、单路本地视频。

更新本文件时,必须同步 06-tasks.md 的任务状态,并向 ../progress.md 追加真实验证记录。