Add inference snapshot notify client

This commit is contained in:
gqc
2026-06-05 18:14:00 +08:00
parent b5fad0e94f
commit ebc7aaa11c
16 changed files with 2243 additions and 96 deletions
+84
View File
@@ -0,0 +1,84 @@
# 推理程序去抖与漏报优化记录
本文记录 `time_period_P_r30_linaro` 分支上的去抖和正例上报优化,方便复查代码改动。
## 现场问题
1808 设备上同时运行 6 到 7 个推理程序时,资源紧张会造成推理结果波动。旧逻辑要求同一类别数量连续稳定 3 次才上传,短暂漏检或低置信过滤可能让结果稳定成 `number=0`,随后又上传 `number=1`
管理程序只处理 `number > 0` 的识别消息,并根据持续时间判断是否触发后续视频合并和上报;目标消失不需要推理程序主动通知。因此推理程序侧不应主动上传 `number=0`
## 新逻辑
- 当前推理帧只要在 workspace 内检测到可上传目标,就进入正例候选。
- `prop >= conf_threshold` 记为 `strong_present`
- `0.30 <= prop < conf_threshold` 记为 `weak_present`,第一版也参与正例上传,用于降低漏报。
- `prop < 0.30` 记为 `filtered_low_conf`,不参与上传。
- workspace 外目标记为 `filtered_workspace`,始终不参与上传。
- 当前帧无可上传目标时,只记录 `no_target`,不上传 `number=0`
## 上传节流
同一最终上传编码 `class_idx``500ms` 最多上传一次正例:
```text
首次检测到某 class_idx:立即上传
持续检测到同一 class_idx:每 500ms 最多上传一次
未检测到:不上报,只记日志
```
上传 JSON 结构保持不变:
```text
serial
type
at
params[].class_idx
params[].name
params[].number
```
多个模型 label 如果映射到同一个 `class_idx`,继续合并数量后上传。`codes[i] == 0` 的类别仍不上传。
## 日志字段
本次增加/规范以下日志事件,写入可执行文件目录下 `.log/YYYY-MM-DD-yolov5.log`
- `frame_seen`:本次推理帧序号和原始检测数量。
- `strong_present`:超过阈值且在 workspace 内。
- `weak_present`:高于 0.30、低于阈值且在 workspace 内。
- `filtered_low_conf`:低于 0.30。
- `filtered_workspace`:不在 workspace 内。
- `upload_positive`:本帧触发正例上传。
- `upload_skip_throttle`:本帧有目标,但 500ms 节流跳过。
- `upload_skip_code0`:类别编码为 0,按旧规则不上传。
- `upload_skip_busy`:已有上传线程正在执行,跳过本次上传。
- `no_target`:本帧没有可上传目标。
- `upload_positive_payload`:实际组装进 JSON 的正例载荷。
日志清理策略:
- 程序启动后第一次写日志会清理旧日志。
- 程序长期运行跨天后,第一次打开新日期日志时也会清理旧日志。
- 只清理 `.log` 目录下命名匹配 `YYYY-MM-DD-yolov5.log` 的文件。
- 默认保留最近约 7 天日志。
## 额外风险修复
`main.cpp` 中 h264 分段轮转原来在内部重新声明了 `FILE *fpSave`,会遮蔽外层文件句柄。现在改为更新外层 `fpSave`,并在退出主循环后关闭当前句柄。
## 验收场景
- `1,0,1`:上传正例;中间 `0` 只记 `no_target`,不上传 `number=0`
- `1,弱命中,1`:弱命中参与正例链路,持续上传或被节流跳过,不归零。
- `0,0,0`:只记录 `no_target`,不上传。
- workspace 外目标:只记录 `filtered_workspace`,不上传。
- 多 label 同 `class_idx`:合并成同一个业务编码上传。
## 编译验证
`docs/cross_compile_wsl_linaro.md` 的 WSL + Linaro 路线编译,并检查:
- 产物为 aarch64 ELF。
- 不依赖 `GLIBC_2.33``GLIBC_2.34``GLIBCXX_3.4.29`
- 仍链接 `librknn_api.so`