Files
silver_pose/docs/adr/2026-07-22-t302-go-spike-decision.md
T

2.8 KiB
Raw Blame History

T-302 · Go 推理、视频与 Windows UI Spike 决策

  • 状态:已接受,作为 T-303/T-304 的实施前提
  • 日期:2026-07-22
  • 范围:仅验证 Windows 开发环境的单帧推理、录像解码和 UI 技术路线;不等于 V2 行为验收或客户演示验收。

结论

  1. Pose 运行时采用 github.com/yalue/onnxruntime_go v1.31.0,CPU 路径,且启动时必须显式指定 onnxruntime.dll。包装器当前使用 ONNX Runtime C API 26,构建机须固定 Go、CGO_ENABLED=1 和 MinGW;运行端不依赖 Python,但必须随发布物携带版本、来源和 SHA-256 都已锁定的匹配 DLL。
  2. 视频接入采用受控 ffmpeg.exe 子进程。它解码录像或 RTSP 为 bgr24 原始帧;T-304 将锁定 ffmpeg.exe/ffprobe.exe 的版本和哈希,并实现来源状态、超时、取消与重连。当前不采用 GoCV,因为此机没有可用的 OpenCV/GoCV 开发绑定。
  3. Windows UI 采用 github.com/lxn/walk。它提供原生窗口、顶部 Tab 和控件,UI Spike 在 CGO_ENABLED=0 下可编译。正式 UI 继续使用文档中的浅灰蓝底、白色卡片和“红色只表示 CONFIRMED”的语义;Walk 只在 UI 线程渲染,不能调用解码、ONNX 或状态机。

验证证据

命令行 Spike 使用 demo/1.mp4 的第一帧(848×480),从 FFmpeg 获取准确的 1,221,120 字节 BGR 帧,转为 1×3×640×640 的 1,228,800 个 float32 输入;锁定 v2/assets/best.onnx 输出为 1×56×8400 的 470,400 个值。实际运行输出:

SPIKE_OK frame=848x480 input=1228800 output=470400 max=685.7795

go test ./... 在 CGO_ENABLED=1 下通过,且 go build ./cmd/ui-spike 在 CGO_ENABLED=0 下通过。最小测试覆盖 BGR 尺寸拒绝、letterbox 后 RGB/CHW 布局、Pose 输入长度拒绝和 UI 视觉令牌。

开发机的 ONNX Spike 暂时使用 Go 模块缓存内的 test_data/onnxruntime.dll,仅用于证明接口可执行;它不是允许交付的 DLL 来源,也未被拷入仓库。

拒绝的路线

  • GoCV/OpenCV:未配置 Windows 开发库、pkg-config 或 CGO 绑定,无法据实声称可用于 V2。
  • Fyne:初次 Windows 构建进入 OpenGL/CGO 编译并在 120 秒内未完成,且遗留编译进程;对于当前“稳定现场演示”的目标,引入的 UI 图形链复杂度不合适。随后已停止这些精确的临时进程,没有修改用户文件。

不在本任务中的内容

当前 Go letterbox 是最小 Spike(nearest-neighbour)。它尚未完成或证明与 V1 等价的缩放/补边、NMS、关键点解析、坐标还原、人员跟踪、事件状态机、RTSP 断流、声音、弹窗、截图和打包。T-303 必须以同一录像的关键点、事件数量、非报警案例和确认延迟证明 V1/V2 等价;T-304 才可形成部署与现场演示闭环。