2026-07-20 22:05:55 +08:00
# 当前实现状态
> 本文是可覆盖的当前快照;历史执行记录见 [../progress.md](../progress.md)。
## 当前快照
2026-07-22 15:05:31 +08:00
- 日期:2026-07-22
2026-07-22 16:01:28 +08:00
- 阶段:V1 客户演示闭环、T-301 模型导出一致性与 T-302 Go 技术 Spike 已验收;下一个任务是 T-303(复现 V1 事件引擎并做录像回归)。判定灵敏度默认已放宽(低位俯视:持续水平即可疑,膝踝可缺,水平阈值 45°),确认窗为主防误报闸。
2026-07-21 19:43:49 +08:00
- 已验证环境:Windows PowerShell; Python 3.8.10; Ultralytics 8.3.205; PyQt5 可导入。注意:当前 WSL/Linux 环境未安装 PyQt5,且其 ultralytics/torch 版本与该基线不兼容(模型前向不可用),故 GUI 可视化与真实模型端到端渲染只在 Windows 验证;本环境用 Qt-free 的 `view_model.py` 单元测试与假适配器管线冒烟覆盖视图逻辑。
2026-07-20 22:05:55 +08:00
- 旧生产基线:`demo/main.py` 、`demo/fall_detection_gui.py` 、`demo/detect_fall.py` 、`demo/best.pt` 。
2026-07-21 22:56:14 +08:00
- 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` ,窗口只渲染)。新增 `v1/alerts.py` :按 `event_id` 去重,对首次 CONFIRMED 保存带标注截图、追加 JSONL 事件行,并经可注入 `AlertSink` ( Windows 侧 `QtAlertSink` 提供声音与一次性弹窗)触发一次声音/弹窗。新增 `v1/camera.py` (RTSP URL 构建 + 有界连接测试抓帧)与 `config.py` 的结构化来源(host/端口/通道/账号/密码,凭证百分号编码)、`write_local_camera_source` ;设置页新增摄像头连接分组、测试连接与预览,以及传输协议/连接超时/低延迟三项抓流调优(由 `config` 存值、`app` 开流前写入 `OPENCV_FFMPEG_CAPTURE_OPTIONS` )。真实海康流已用 `VideoSource(STREAM)` 连通(1920× 1080)。
2026-07-22 16:01:28 +08:00
- V2 代码:已创建 Go 模块和受控 Spike。`cmd/spike` 用 FFmpeg 读取本地 BGR 帧、将其预处理为 640 tensor,并用 `onnxruntime_go` 对锁定 ONNX 执行一次推理;`cmd/ui-spike` 是可编译的 Windows Walk 双 Tab 外壳。它们不含 NMS/关键点解析、跟踪、状态机、RTSP、报警或发布打包,不能作为客户演示版。
2026-07-20 23:06:54 +08:00
- 非代码设计工件: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 任务顺序。
2026-07-22 16:01:28 +08:00
- 测试:`python -m compileall -q v1 demo` 已通过(含 `gui.py` 、`app.py` 、`alerts.py` 、`camera.py` 语法);`./init.ps1` 当前运行 V1 测试为 88 passed、1 skipped,覆盖配置、视频源、Pose、跟踪、证据、领域规则、状态机、管线、视图模型、报警工件、摄像头/URL 构建、抓流参数拼串、每帧诊断、灵敏度放宽、截图标注、断流重连、事件汇总、灵敏度写回和最新帧丢弃。T-302 的 `CGO_ENABLED=1 go test ./...` 通过;Go Spike 对 848× 480 本地录像首帧生成 1,228,800 元素输入并获得 470,400 元素 ONNX 输出;Walk UI Spike 以 `CGO_ENABLED=0 go build ./cmd/ui-spike` 编译通过。这些只验证管线、视图与报警工件可运行,不表示摔倒识别准确率或 Go 行为等价。`init.ps1` 会检查运行时依赖、编译旧基线并运行 V1 测试,但不会安装软件包。
2026-07-20 22:05:55 +08:00
- 模型:`demo/best.pt` 可加载为 YOLO Pose,类别 `person` , `kpt_shape=[17, 3]` ;与 `D:\PythonP\fall_detection\best.pt` 哈希一致。
- 当前标准启动:`./init.ps1` 。
- 当前标准验证:`python -m compileall -q demo` 。
2026-07-22 16:01:28 +08:00
- 当前 blocker:没有 T-303 的代码阻塞;但 Go 尚未验证与 V1 的预后处理、NMS、关键点、跟踪、状态机和事件延迟一致,不能把 T-302 的单帧推理表述为可演示的 V2。ONNX Runtime DLL、FFmpeg/FFprobe 仍须在 T-304 以版本、来源和哈希纳入发布包;现场录像和事件工件保持本机不提交。
2026-07-20 22:05:55 +08:00
全局环境的 `pip check` 存在其他项目的包冲突,因此它不是 Silver Pose 的验收命令。`init.ps1` 只检查本项目实际导入的 OpenCV、NumPy、Ultralytics 与 PyQt5,并在命令非零退出时失败。
## 当前目录要点
| 路径 | 状态 | 说明 |
| --- | --- | --- |
| `demo/` | 已有 | 旧 Python GUI、Pose 模型与样例视频;当前单帧规则不适合作为正式事件逻辑。 |
2026-07-22 16:01:28 +08:00
| `v1/` | 已验收 | Python V1 正式实现、现场验收记录与发布工具。 |
| `v2/` | Spike 已完成 | Go 模块、ONNX/视频命令行 Spike 与 Windows Walk UI 外壳;尚不是完整 V2。 |
2026-07-20 22:05:55 +08:00
| `docs/` | 已有 | Harness Coding 文档、任务和计划。 |
| `tests/` | 不适用 | V1 测试将在 `v1/tests/` 下创建。 |
| `artifacts/` | 待创建 | 本地事件截图和 JSONL,不提交。 |
## 任务状态
2026-07-22 16:01:28 +08:00
- 已完成:T-000、T-101~T-106( V1 地基与事件管线)、T-201( PyQt 双 Tab)、T-202(本地报警/截图/JSONL)、T-203(海康 RTSP 与断流恢复)、T-204(正反例录像与现场验收)、T-205(客户演示脚本与发布包)、T-206(结构化摄像头配置与连接测试)、T-207(抓流低延迟参数)、T-208(每帧诊断叠加)、T-209(放宽俯视灵敏度)、T-210(截图 ASCII 标注)、T-211(灵敏度设置页)、T-212(实时流最新帧)、T-213(截图中文标注)、T-301( ONNX 一致性)、T-302( Go 推理、视频/UI Spike)。
2026-07-22 15:10:11 +08:00
- 正在进行:无。
2026-07-22 16:01:28 +08:00
- 下一个可领取:T-303(实现 Go 事件引擎与 V1 回归对比)。
2026-07-20 22:05:55 +08:00
## 当前可运行内容
```powershell
./ 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` 追加真实验证记录。