# 技术栈 > 本文是唯一的选型与命令速查表;模块职责见 [04-architecture.md](04-architecture.md)。 ## V1:Python 验证版 | 维度 | 选型 | 状态 | 理由 | | --- | --- | --- | --- | | 运行时 | CPython 3.8.10 | 已验证 | 当前环境可导入现有依赖;升级 Python 需单独任务验证。 | | 桌面 UI | PyQt5 | 已验证 | 现有 GUI 已使用,适合实时画面、弹窗和信号线程。 | | 视频与图像 | OpenCV(含 FFmpeg) | 已验证 | 读取 RTSP、绘制叠加层和保存截图。 | | Pose 推理 | Ultralytics 8.3.205 + YOLOv8 Pose | 已验证 | 当前 `best.pt` 能加载为 17 点 person Pose 模型。 | | 跟踪 | Ultralytics ByteTrack | 已定 | 为时序事件提供人员 ID;实现前需用现场录像验证 ID 稳定性。 | | 事件逻辑 | 纯 Python 模块 + pytest | 已定 | 与 GUI 解耦,便于正反例录像回归。 | | 本地配置 | JSON 示例文件 + 未跟踪的 `config.local.json` | 已定 | 不把 RTSP 凭证提交仓库。 | | 日志与截图 | JSONL + PNG/JPG 文件 | 已定 | 无数据库的可审计演示证据。 | | 声音 | Windows `winsound` | 已定 | 不增加额外音频依赖。 | | 测试 | pytest、compileall、录像回放 smoke | 已定 | 覆盖纯逻辑与可观察演示行为。 | ## V2:Go 部署版 | 维度 | 选型 | 状态 | 理由 | | --- | --- | --- | --- | | 语言 | Go | 已定 | 面向长时间 RTSP 运行、并发控制和单一交付物。 | | 模型工件 | 固定输入尺寸的 ONNX Pose 模型 | 已定 | Go 不直接加载 `.pt`;模型由已验收 V1 权重导出并记录哈希。 | | 推理运行时 | ONNX Runtime 或经 Spike 验证的等价 Go 运行时 | 待 T-302 决定 | 选择标准是 Windows 打包、Pose 输出、CPU/GPU 与持续运行稳定性。 | | 视频输入与绘制 | Go 方案待 T-302 Spike 决定 | 待定 | 必须读取 RTSP、保留 BGR/RGB 与 letterbox 一致性,并满足现场显示。 | | 演示 UI | 本地网页壳或轻量桌面壳待 T-302 Spike 决定 | 待定 | 不在未验证视频帧展示能力前锁定 UI 框架。 | | 测试 | `go test ./...` + V1 回归录像 | 已定 | V2 行为必须与 V1 基线对照。 | ## 关键选型纪律 - V1 不引入新模型、数据库、云服务或重量级告警依赖。 - RTSP 凭证仅来自环境变量或未跟踪本地文件;示例配置只含变量名。 - V2 的 ONNX 预处理、NMS、关键点解析、坐标还原和阈值必须与 V1 录像基线一致。 - 如果 V2 需要 GPU 专用引擎,必须记录显卡、驱动、运行时版本和回退 CPU 路径;不能将硬件绑定伪装成通用稳定性。 ## 当前可运行命令 | 用途 | 命令 | | --- | --- | | 基线检查 | `./init.ps1` | | 旧代码编译检查 | `python -m compileall -q demo` | | 旧 GUI 启动 | `Set-Location demo; python main.py` | | V1 测试 | T-101 创建 `v1/requirements.txt` 和测试后写入真实 `pytest` 命令 | | V2 测试 | T-302 创建 Go 模块后使用 `go test ./...` | ## 演进决策 - 先保持 Python 3.8.10 与现有依赖,避免为了升级环境打断演示基线;V1 验收后再评估支持期限与升级。 - `best.pt` 是 Pose 基线,不是默认永久模型;只有同一现场录像的量化比较能决定是否改用官方权重、提高输入尺寸或做数据适配。