菜品识别画面稳定重新布防修复方案
稳定门禁通过后,银歌菜品识别 SDK 能正常接受请求并返回结果。
问题位于稳定判定器没有正确重新布防,不在人脸识别或
datalibrary。
根因
- 只比较相邻帧。慢速移动时单步差异较小,即使累计变化明显也不会重新布防。
- 每个 8×8 分区只取一个固定像素,局部菜品变化可能完全避开采样点。
修复设计
相邻帧差异判断稳定 + 上次成功触发画面判断累计变化
| 基准 | 用途 |
|---|---|
previousHash | 判断当前画面是否重新稳定 |
lastTriggeredHash | 判断画面相对上次成功识别是否发生累计变化 |
- 首次稳定后产生识别候选。
- SDK 接受请求后确认本次触发基准。
- 累计变化超过灵敏度时锁存“画面已变化”。
- 相邻帧重新稳定后再次触发。
- SDK 拒绝或请求超时时保持重新布防并自动重试。
分区平均哈希
- 保留 8×8、64 位平均哈希和现有灵敏度范围。
- 每个分区计算多点平均亮度,不再只取一个固定像素。
- 使用有上限的步进采样控制性能,不创建全尺寸 Bitmap。
实施任务
一、补充回归测试
覆盖慢速累计变化、避开旧采样点的局部变化、请求失败自动重试。
二、改造稳定判定器
分离两种差异,增加请求接受/拒绝确认,并改为分区平均亮度。
三、接入菜品识别请求结果
在 DishRecognitionActivity 中处理 SDK 接受、失败、超时和暂停恢复。
验证方案
- 运行稳定判定聚焦测试。
- 运行应用模块完整单元测试和 Debug 构建。
- 确认差异没有触及人脸识别和
datalibrary。 - 真机验证首次放置、缓慢移动、局部换菜、静止不重复以及灵敏度 1/5/10。
变更边界
只修改菜品识别稳定判定组件、菜品识别页面接入点和对应单元测试;不修改设置页、人脸识别、datalibrary、支付契约和相机配置。
结论
双基准状态机解决慢速移动的累计变化漏检,分区平均亮度降低固定采样点漏检。自动化验证完成后仍需在目标菜品识别设备上进行现场灵敏度回归。