fix(face): 修复短时间内再次识别无法触发的问题
新增 RecognizeViewModel.resetFaceState(),在 resetRecognizeState() 时 同时清空粘性 LiveData 和 FaceHelper 内部 recognizeInfoMap, 防止旧 trackId 状态残留导致识别流程无法重新触发。 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Sonnet 4.6
parent
ae708eeeed
commit
385ada4a0d
@@ -768,6 +768,8 @@ class LoginByFaceActivity : BaseActivity<ActivityLoginFaceBinding>(),
|
||||
collectCount = 0
|
||||
// tempUserId = "${System.currentTimeMillis()}"
|
||||
openPlateDebouncer.reset()
|
||||
// 清空上次识别结果和 FaceHelper 内部状态,防止短时间内再次识别无法触发
|
||||
recognizeViewModel.resetFaceState()
|
||||
resumeCamera()
|
||||
registerHandler = RegisterCallbackHandler()
|
||||
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 释放操作
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user