人脸识别相似度阈值设置 Implementation Plan

Goal:在基础设置中增加 50~100 的人脸识别相似度阈值设置,未设置时显示并使用 70,保存后立即用于后续人脸搜索。
Architecture:配置类统一维护范围、默认值、MMKV 和 SDK 换算;设置页负责展示及弹框;人脸管理器每次检索读取最新值。
Tech Stack:Android Java、XML Resources、MMKV、JUnit 4、百度人脸 SDK。

文件职责与边界

Task 1:建立阈值配置契约并完成红绿测试

  1. 先创建失败测试,覆盖默认值 70、边界 49/50/70/80/100/101、空值、小数和非数字。
  2. 运行定向测试,确认因配置类不存在而失败。
  3. 新增 MMKV 键和 FaceRecognitionThresholdConfig,集中定义 MIN=50MAX=100DEFAULT=70、换算比例 100f
  4. 实现读取限制、保存限制、字符串输入校验和 SDK 换算。
  5. 再次运行定向测试,确认全部通过。
./gradlew testDebugUnitTest --tests com.zhct.traybinding.faceRecognition.config.FaceRecognitionThresholdConfigTest

Task 2:增加基础设置入口和输入交互

  1. 新增标题、提示、输入占位和错误文案;提示为“请输入 50~100 的整数,推荐 80”。
  2. 在人脸激活状态与检测超时之间增加 CustomSettingItemView 和现有样式分隔线。
  3. SetBasicFragment 初始化时读取配置并显示纯数字;无配置时显示 70
  4. 复用 ValidatedSettingInputPop,使用数字键盘;非法输入保留弹框,合法输入保存并即时刷新。
  5. 运行 Java 编译,确认资源、导入和 lambda 类型正确。
./gradlew compileDebugJavaWithJavac

Task 3:将最新阈值接入人脸搜索主流程

  1. 在取得搜索首项后读取 FaceRecognitionThresholdConfig.getSdkThreshold()
  2. 日志和成功判断统一使用局部不可变 thresholdScore
  3. 删除旧成员变量和按模型读取固定阈值的分支,不修改活体检测配置。
  4. 运行定向测试和 Java 编译。
  5. 用差异检查证明 BaseConfig.java 和 RGB 活体阈值未被修改。
./gradlew testDebugUnitTest --tests com.zhct.traybinding.faceRecognition.config.FaceRecognitionThresholdConfigTest compileDebugJavaWithJavac

Task 4:全量验证与变更记录

  1. 重新运行新增单元测试。
  2. 运行完整 Debug 单元测试和 Debug APK 构建。
  3. 检查配置键、默认值、范围、设置入口、保存和识别消费链路。
  4. 运行 git diff --check 并检查全部差异,不覆盖用户已有修改。
  5. 生成同名 Markdown/HTML 变更记录,记录命令、结果和人工设备验证项。
./gradlew testDebugUnitTest assembleDebug
git diff --check

最终人工检查清单

  1. 未设置时显示 70,识别使用 0.70f
  2. 设置项不出现“分”。
  3. 弹框预填当前值,提示范围 50~100 和推荐值 80
  4. 合法值即时保存刷新;非法值不改变原值。
  5. 下一次人脸搜索使用新值,无需重启。
  6. RGB 活体阈值 0.60 和现有用户修改保持不变。

完成边界

实现、自动化测试、构建、差异检查和变更记录全部有新鲜证据后才报告完成。项目 Git 保持只读,不执行拉取、暂存、提交、推送、分支切换、合并、变基、重置或清理。