2026-07-23
开启“画面稳定后识别”后,首次稳定可以进入菜品识别;之后移动或更换餐盘,即使画面再次稳定也不会自动识别,只有点击“重新识别”后才恢复。
原稳定判定器只比较当前帧与上一采样帧,并在每次检查后覆盖上一帧基准。餐盘缓慢移动时,相邻两帧的变化可能始终不超过灵敏度阈值,最终画面虽然已经明显变化,判定器仍不会重新布防。
同时,原 8×8 哈希每个分区只读取一个固定像素,局部菜品变化可能避开采样点,进一步增加漏检概率。
问题位于菜品画面稳定判定流程,不在银歌菜品识别 SDK、人脸识别或 datalibrary。
实施方案见:
../docs/2026-07-23-dish-recognition-frame-stability-rearm-fix-plan.md../docs/2026-07-23-dish-recognition-frame-stability-rearm-fix-plan.html核心采用双基准状态机:
previousHash 用于判断相邻采样帧是否重新稳定。lastTriggeredHash 固定保存上一次成功提交识别的画面,用于累计判断餐盘是否发生变化。FrameStabilityDetector.javaDishRecognitionActivity.javaaiAutoRecognition(...) 接受请求后确认本次稳定触发。FrameStabilityDetectorTest.java在原有覆盖上补充:
app/src/main/java/com/cpt/aidishrecognition/ai/FrameStabilityDetector.javaapp/src/main/java/com/cpt/aidishrecognition/activity/DishRecognitionActivity.javaapp/src/test/java/com/cpt/aidishrecognition/ai/FrameStabilityDetectorTest.java本次没有修改设置页、人脸识别、datalibrary、支付流程或相机配置。
FrameStabilityDetectorTest:7 项通过,0 失败。:app:testDebugUnitTest:36 项通过,0 失败,0 错误,0 跳过。:app:assembleDebug:BUILD SUCCESSFUL。git diff --check:通过。app/build/outputs/apk/debug/app-debug.apk。菜品稳定识别已从“只看相邻帧变化”修正为“相邻帧判断稳定、上次成功触发画面判断累计变化”。该修复解决慢速变化后无法重新进入识别的问题,并补齐 SDK 拒绝、预测超时和自动化恢复后的重新布防。