菜品识别画面稳定触发接入记录
设置页中的“画面稳定后识别”已接入菜品识别主流程。
本次没有改动人脸识别流程,也没有修改
datalibrary。
目标链路
USB 菜品相机 NV21 帧 → 画面稳定判定 → YingeoAiSDK.aiAutoRecognition(...)
参考实现
参照 yingeoai-sdk-restaurant-demo:每约 200ms 计算一次
8×8 亮度平均哈希,比较相邻帧差异;画面发生明显变化后,重新稳定时触发一次识别。
- 稳定画面保持不变时不会重复触发。
- 画面再次变化并稳定后重新触发。
- 直接使用 NV21 亮度数据,不额外创建全尺寸 Bitmap。
业务代码变更
FrameStabilityDetector.java
- 从 NV21 中央区域提取 8×8 亮度采样并生成 64 位平均哈希。
- 通过相邻帧汉明距离判断变化和稳定。
- 灵敏度沿用设置页已有的 1~10。
- 首帧只建立基线,稳定后只触发一次。
DishRecognitionActivity.java
- 页面恢复时读取稳定识别开关和灵敏度。
- 开启时每 200ms 执行稳定判定,通过后才调用菜品识别 SDK。
- 关闭时保持原有连续菜品识别行为。
- 预览重启、页面恢复和订单清空时重置稳定基线。
FrameStabilityDetectorTest.java
新增 4 项测试,覆盖单次触发、变化后重新触发、灵敏度和状态重置。
变更边界
DishRecognitionActivity.javaFrameStabilityDetector.javaFrameStabilityDetectorTest.java
未修改人脸识别代码、datalibrary、设置页布局和设置项文案。
验证结果
| 验证项 | 结果 |
|---|---|
| 稳定判定聚焦测试 | 4 项通过 |
| 应用模块完整单元测试 | 33 项通过,0 失败,0 错误,0 跳过 |
| Debug 构建 | BUILD SUCCESSFUL |
| APK | app/build/outputs/apk/debug/app-debug.apk |
待真机验证
自动化验证不能替代真实菜品相机画面测试。需要在目标设备上确认现场光线、
相机噪声及灵敏度 1、4、10 下的实际触发体验。
- 关闭开关时保持连续菜品识别。
- 打开开关后,移动餐盘期间不触发,停止后触发一次。
- 稳定画面不重复触发,再次移动并稳定后重新触发。
- 从设置页返回后,新配置立即生效。
结论
“画面稳定后识别”已在银歌菜品识别 SDK 调用前生效。 自动化测试和 Debug 构建通过,真机灵敏度体验待设备回归。