From a8bbf68b9b4f00daa2b3df2c891f127a43d7d14a Mon Sep 17 00:00:00 2001 From: lvmeng <848755140@qq.com> Date: Tue, 3 Feb 2026 18:51:13 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../activity/LoginByFaceActivity.kt | 84 ++++++++++--------- 1 file changed, 44 insertions(+), 40 deletions(-) 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 6e906b0..1bbbd40 100644 --- a/app/src/main/java/com/sw/platecabinet/activity/LoginByFaceActivity.kt +++ b/app/src/main/java/com/sw/platecabinet/activity/LoginByFaceActivity.kt @@ -52,6 +52,7 @@ import org.greenrobot.eventbus.EventBus import org.greenrobot.eventbus.Subscribe import org.greenrobot.eventbus.ThreadMode import timber.log.Timber +import java.io.File import java.util.concurrent.atomic.AtomicBoolean /** @@ -196,9 +197,7 @@ class LoginByFaceActivity : BaseActivity(), getFaceDataBlock { faceData, headBmp -> isCollecting.set(false) isCollectFace = false - Thread { - sendFaceData(faceData, headBmp) - }.start() + sendFaceData(faceData, headBmp) } return@setOnRegisterFinishedCallback } @@ -291,7 +290,6 @@ class LoginByFaceActivity : BaseActivity(), * 如果similar>=0.3&&similar<=0.8时,暂时不作为失败情况,再识别5次如果similar<0.8则作为识别失败处理 */ private fun loadFaceRecognizeResult2(result: CompareResult?) { - // 无有效结果直接忽略 val similar = result?.similar ?: return @@ -302,7 +300,6 @@ class LoginByFaceActivity : BaseActivity(), ) if (similar >= faceSuccessThreshold) { - val userId = result.faceEntity?.userName if (userId.isNullOrBlank()) { loadLogInfo("collectFace,recognizeUserId 识别成功但 userId 为空,忽略") @@ -332,7 +329,6 @@ class LoginByFaceActivity : BaseActivity(), } if (similar <= faceFailThreshold || retryFailCount >= maxFailCount) { - loadLogInfo( "collectFace,recognizeUserId 识别失败,开始采集 similar=$similar, " + "retry=$retryFailCount, time=${DateTimeUtils.getDateTimeString()}" @@ -342,7 +338,6 @@ class LoginByFaceActivity : BaseActivity(), return } - retryFailCount = 0 isCollectFace = true collectFace()//采集人脸 @@ -766,6 +761,8 @@ class LoginByFaceActivity : BaseActivity(), loadLogInfo("collectFace: ----------5,人脸采集中-----------") } + private val uploadFaceDebouncer = Debouncer(10000) + /** * 改为上传人脸数据,不需要发生人脸数据到收银端 */ @@ -780,6 +777,18 @@ class LoginByFaceActivity : BaseActivity(), ToastUtils.showToast("获取人脸照片失败") return } + uploadFaceDebouncer.debounce { + addUserFace(faceData, imageFile) + } +// // 给某个客户端发送 +// val jsonObject = JSONObject().also { +// it.put("type", "faceFeature") +// it.put("content", faceData) +// } +// tcpClient?.send(jsonObject) + } + + private fun addUserFace(faceData: String, imageFile: File) { settingViewModel.addUserFace(faceData, imageFile) { status, faceModel -> loadLogInfo("collectFace,saveFaceInfo: ----------12,人脸数据发送完成时间:${DateTimeUtils.getDateTimeString()},结果:$status-----------") if (status.not()) { @@ -792,14 +801,11 @@ class LoginByFaceActivity : BaseActivity(), loadLogInfo("collectFace,sendFaceData: ----------12,发送人脸数据成功但接口返回为null,faceData=${faceData}") return@addUserFace } - saveFaceInfo(faceModel) + Thread { + saveFaceInfo(faceModel) + uploadFaceDebouncer.reset() + }.start() } -// // 给某个客户端发送 -// val jsonObject = JSONObject().also { -// it.put("type", "faceFeature") -// it.put("content", faceData) -// } -// tcpClient?.send(jsonObject) } private fun getFaceDataBlock(block: (String, Bitmap) -> Unit) { @@ -829,33 +835,31 @@ class LoginByFaceActivity : BaseActivity(), private var currentUserId: String? = null private fun saveFaceInfo(faceModel: UserFaceModel) { - Thread { - try { - loadLogInfo("collectFace,saveFaceInfo: ----------8,保存人脸取特征数据-----------") - val faceDao = FaceDatabase.getInstance(this).faceDao() - val faceEntity = FaceEntity( - faceModel.userId, - null, - Base64.decode(faceModel.faceFeatureStr) - ).also { - //1-会员、2-临时用户 - it.userType = if (faceModel.isMember) "1" else "2" - } - faceDao.insert(faceEntity) - loadLogInfo("collectFace,saveFaceInfo: ----------10,人脸数据保存完成-----------") - recognizeViewModel.refreshFaceList() - loadLogInfo("collectFace,saveFaceInfo: ----------11,刷新人脸数据-----------") - runOnUiThread { recognizeViewModel.onPreviewFrame(ByteArray(1382400), true) } - loadLogInfo("---------------------------------") - collectCount = 0 - } catch (e: Exception) { - e.printStackTrace() - loadLogInfo("collectFace,saveFaceInfo: ----------13,人脸采集异常:${e.message}-----------") - collectCount++ - loadLogInfo("collectFace,saveFaceInfo: ----------14,${collectCount}次人脸采集异常:${e.message}-----------") - ToastUtils.showToast("人脸采集异常:${e.message}") + try { + loadLogInfo("collectFace,saveFaceInfo: ----------8,保存人脸取特征数据-----------") + val faceDao = FaceDatabase.getInstance(this).faceDao() + val faceEntity = FaceEntity( + faceModel.userId, + null, + Base64.decode(faceModel.faceFeatureStr) + ).also { + //1-会员、2-临时用户 + it.userType = if (faceModel.isMember) "1" else "2" } - }.start() + faceDao.insert(faceEntity) + loadLogInfo("collectFace,saveFaceInfo: ----------10,人脸数据保存完成-----------") + recognizeViewModel.refreshFaceList() + loadLogInfo("collectFace,saveFaceInfo: ----------11,刷新人脸数据-----------") + runOnUiThread { recognizeViewModel.onPreviewFrame(ByteArray(1382400), true) } + loadLogInfo("---------------------------------") + collectCount = 0 + } catch (e: Exception) { + e.printStackTrace() + loadLogInfo("collectFace,saveFaceInfo: ----------13,人脸采集异常:${e.message}-----------") + collectCount++ + loadLogInfo("collectFace,saveFaceInfo: ----------14,${collectCount}次人脸采集异常:${e.message}-----------") + ToastUtils.showToast("人脸采集异常:${e.message}") + } } private var collectCount = 0