feat(v2): complete Go inference and UI spike

This commit is contained in:
ila
2026-07-22 16:01:28 +08:00
parent 104608751a
commit 22aadf2b26
16 changed files with 411 additions and 13 deletions
@@ -0,0 +1,32 @@
# 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 个值。实际运行输出:
```text
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 才可形成部署与现场演示闭环。