diff --git a/app/src/main/java/com/sw/platecabinet/activity/LoginByFaceActivity.kt b/app/src/main/java/com/sw/platecabinet/activity/LoginByFaceActivity.kt index fb2bbd7..8cc67e5 100644 --- a/app/src/main/java/com/sw/platecabinet/activity/LoginByFaceActivity.kt +++ b/app/src/main/java/com/sw/platecabinet/activity/LoginByFaceActivity.kt @@ -768,6 +768,8 @@ class LoginByFaceActivity : BaseActivity(), collectCount = 0 // tempUserId = "${System.currentTimeMillis()}" openPlateDebouncer.reset() + // 清空上次识别结果和 FaceHelper 内部状态,防止短时间内再次识别无法触发 + recognizeViewModel.resetFaceState() resumeCamera() registerHandler = RegisterCallbackHandler() diff --git a/app/src/main/java/com/sw/platecabinet/utils/Debouncer.kt b/app/src/main/java/com/sw/platecabinet/utils/Debouncer.kt index 3c36921..c86c4d0 100644 --- a/app/src/main/java/com/sw/platecabinet/utils/Debouncer.kt +++ b/app/src/main/java/com/sw/platecabinet/utils/Debouncer.kt @@ -1,6 +1,11 @@ package com.sw.platecabinet.utils +import timber.log.Timber + class Debouncer(private val delayMillis: Long) { + companion object { + const val TAG = "Debouncer" + } private var lastActionTime = 0L /** @@ -8,13 +13,15 @@ class Debouncer(private val delayMillis: Long) { * @param action 要执行的操作 * @return Boolean 是否执行了操作 (true=已执行, false=被防抖) */ - fun debounce(action: () -> Unit): Boolean { + fun debounce(tag:String = TAG, action: () -> Unit): Boolean { val currentTime = System.currentTimeMillis() if (currentTime - lastActionTime >= delayMillis) { + Timber.tag(tag).d("collectFace,recognizeUserId防止重复操作:执行action回调") lastActionTime = currentTime action() return true } + Timber.tag(tag).d("collectFace,recognizeUserId防止重复操作-----------------------") return false } diff --git a/lib_face/src/main/java/com/sw/plate/utils/arcface/viewmodel/RecognizeViewModel.java b/lib_face/src/main/java/com/sw/plate/utils/arcface/viewmodel/RecognizeViewModel.java index 5e0c7c9..0c82b36 100644 --- a/lib_face/src/main/java/com/sw/plate/utils/arcface/viewmodel/RecognizeViewModel.java +++ b/lib_face/src/main/java/com/sw/plate/utils/arcface/viewmodel/RecognizeViewModel.java @@ -397,6 +397,20 @@ public class RecognizeViewModel extends ViewModel implements RecognizeCallback { } } + /** + * 重置人脸识别状态:清空上次识别结果及 FaceHelper 内部的 recognizeInfoMap, + * 使下一帧进入时能重新触发识别流程。 + * 适用场景:短时间内再次识别、点击重试按钮等需要重新开始识别的时机。 + */ + public void resetFaceState() { + // 清空粘性 LiveData,防止旧结果被重新投递给 observer + recognizeUserId.postValue(null); + // 清空 FaceHelper 内部所有人脸状态,让 trackId 对应的状态回到 TO_RETRY + if (faceHelper != null) { + faceHelper.clearFacePreviewInfoList(); + } + } + /** * 释放操作 */