8.4 KiB
8.4 KiB
当前实现状态
本文是可覆盖的当前快照;历史执行记录见 ../progress.md。
当前快照
- 日期:2026-07-22
- 阶段:V1 客户演示闭环、T-301 模型导出一致性、T-302 Go 技术 Spike 与 T-303 Go 事件引擎均已关闭;T-304 正在实现 Go 实时演示、报警和发布。判定灵敏度默认已放宽(低位俯视:持续水平即可疑,膝踝可缺,水平阈值 45°),确认窗为主防误报闸。
- 已验证环境: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,窗口只渲染)。新增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)。 - V2 代码:T-303 已落地
internal/pose(Ultralytics 114 letterbox、BGR→RGB/CHW、YOLO Pose NMS、17 点及坐标还原)与internal/fall(中心点跟踪、质量/几何证据、策略、四态状态机和事件 ID);cmd/regression使用 FFmpeg 顺序回放本机录像并将 ONNX Pose 接入事件引擎。用户已手动确认 T-303 完成,但其缺少部署边界内真实正例录像的事实仍保留在诊断记录中。T-304 已新增安全 V2 配置、FFprobe/FFmpeg 有界重连源、后台监控装配、叠加 PNG/JSONL 证据、浅色 Walk 双 Tab 操作窗口和cmd/silver-pose正式装配命令;窗口只接收完成帧和可靠告警队列。v2/scripts/build-v2-release.ps1已在本机从显式 ONNX/DLL/FFmpeg/FFprobe 输入生成临时发布目录与哈希清单。现场 RTSP、声音、弹窗、截图和安全模拟摔倒的目视验收尚未完成,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、alerts.py、camera.py语法);./init.ps1当前运行 V1 测试为 88 passed、1 skipped。T-303 的CGO_ENABLED=1 go test ./...通过。对同一 317 帧本机录像,V1 回放得到 253 个有人帧、263 人次、0 个 CONFIRMED;Go 回放得到 255 个有人帧、265 人次、0 个 CONFIRMED。该录像经用户确认是摔倒正例,二者的 0 事件是漏检,不是“无报警反例”通过:V1 在 2.400–2.467 秒仅有 3 帧横向候选,随后倒地人体的 Pose 置信度降至 0.012,并在 3.000 秒帧以 0.01 推理仍无任何人体姿态。它是室外斜视且有字幕遮挡,超出当前固定俯视大厅/走廊验收边界;降低检测阈值至 0.10 仍为 0 事件。人次差异来自 OpenCV/FFmpeg 解码像素不同,不能据此声称 Go 已完成真实正例一致性。Go 合成正例契约和 V1 状态机均在 1.81 秒时产生一个CONFIRMED。Walk UI Spike 以CGO_ENABLED=0 go build ./cmd/ui-spike编译通过。这些不表示摔倒识别准确率或完整 Go 客户演示已验收。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:T-303 已由用户手动确认关闭,但仍缺少一段经同意、无敏感信息且符合固定俯视大厅/走廊、全身大部分可见边界的本机正例录像及其 V1 确认事件/延迟基线;因此不能将其表述为真实正例录像级一致性证明。
demo/1.mp4虽是真实摔倒,但已诊断为 Pose 漏检,不能作为此项验收正例。T-304 的本机发布清单已锁定 ONNX Runtime DLL、FFmpeg/FFprobe 和 ONNX 哈希;最终现场 RTSP、声音、弹窗、事件截图/JSONL、断流恢复与安全摔倒验收仍需要未跟踪凭证、现场网络与现场人员,均不得提交。
全局环境的 pip check 存在其他项目的包冲突,因此它不是 Silver Pose 的验收命令。init.ps1 只检查本项目实际导入的 OpenCV、NumPy、Ultralytics 与 PyQt5,并在命令非零退出时失败。
当前目录要点
| 路径 | 状态 | 说明 |
|---|---|---|
demo/ |
已有 | 旧 Python GUI、Pose 模型与样例视频;当前单帧规则不适合作为正式事件逻辑。 |
v1/ |
已验收 | Python V1 正式实现、现场验收记录与发布工具。 |
v2/ |
T-304 进行中 | Go ONNX 后处理、事件引擎和本机摔倒漏检回放已实现;正在补齐实时演示、报警与发布。 |
docs/ |
已有 | Harness Coding 文档、任务和计划。 |
tests/ |
不适用 | V1 测试将在 v1/tests/ 下创建。 |
artifacts/ |
待创建 | 本地事件截图和 JSONL,不提交。 |
任务状态
- 已完成: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)、T-303(Go 事件引擎与 V1 回归对比,用户手动确认)。
- 正在进行:T-304(Go 实时演示、报警和打包)。
当前可运行内容
./init.ps1
Set-Location demo
python main.py
# 本机录像 Go 回归(需本机 ONNX Runtime DLL、FFmpeg 与已锁定 ONNX 工件)
Set-Location ..\v2
$env:CGO_ENABLED='1'
go run ./cmd/regression --help
# V2 正式应用(需未提交 config.local.json 与环境变量 RTSP)
go run ./cmd/silver-pose --config config.local.json
已知事实和限制
- 当前
demo/的摔倒判定来自单帧、硬编码阈值和任意规则短路;界面部分阈值不会传入实际逻辑。 - 当前模型是通用 person Pose 模型,不是摔倒事件分类模型。
- 当前机器在无 GPU 条件下,对 848×480 本地样例以 640 输入运行 Pose 的测量均值约为 64.5 ms/帧;这仅是模型推理,不是端到端 RTSP/GUI 性能承诺。
- V1 的客户演示范围限于固定俯视大厅/走廊、全身大部分可见、单路本地视频。
更新本文件时,必须同步 06-tasks.md 的任务状态,并向 ../progress.md 追加真实验证记录。