From f473d1f174498bc5cbaf5cdec5c2326ff571a235 Mon Sep 17 00:00:00 2001 From: mazengfei <331023091@qq.com> Date: Mon, 19 Jan 2026 17:55:16 +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/DeviceInitActivity.kt | 2 +- .../activity/LoginByFaceActivity.kt | 187 ++++++++++-------- .../com/sw/platecabinet/adapter/LogAdapter.kt | 10 +- .../com/sw/platecabinet/utils/CrashHandler.kt | 6 +- .../main/res/layout/list_item_log_info.xml | 2 +- .../arcface/viewmodel/RecognizeViewModel.java | 6 +- 6 files changed, 122 insertions(+), 91 deletions(-) diff --git a/app/src/main/java/com/sw/platecabinet/activity/DeviceInitActivity.kt b/app/src/main/java/com/sw/platecabinet/activity/DeviceInitActivity.kt index 3538400..f5a9ff4 100644 --- a/app/src/main/java/com/sw/platecabinet/activity/DeviceInitActivity.kt +++ b/app/src/main/java/com/sw/platecabinet/activity/DeviceInitActivity.kt @@ -63,7 +63,7 @@ class DeviceInitActivity : BaseActivity() { // } // } }.start() - viewModel.getUserFaceCache() +// viewModel.getUserFaceCache() viewModel.getDeviceConfig { deviceConfig -> runOnUiThread { if (deviceConfig == null) { 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 11b3c0c..3f5d90c 100644 --- a/app/src/main/java/com/sw/platecabinet/activity/LoginByFaceActivity.kt +++ b/app/src/main/java/com/sw/platecabinet/activity/LoginByFaceActivity.kt @@ -53,6 +53,7 @@ import com.sw.platecabinet.model.response.EquipmentUserInfo import com.sw.platecabinet.socket.LanServer import com.sw.platecabinet.socket.LanServerListenerImpl import com.sw.platecabinet.socket.TcpClient +import com.sw.platecabinet.utils.Debouncer import com.sw.platecabinet.utils.IntervalExecutor import com.sw.platecabinet.utils.PermissionHelper import com.sw.platecabinet.utils.PlateUtils @@ -99,8 +100,8 @@ class LoginByFaceActivity : BaseActivity(), } } - private var logList: MutableList = mutableListOf() - private val logAdapter by lazy { LogAdapter(logList) } +// private var logList: MutableList = mutableListOf() +// private val logAdapter by lazy { LogAdapter(logList) } override fun initialize() { instance = this @@ -126,23 +127,26 @@ class LoginByFaceActivity : BaseActivity(), // binding.btnCollectFace.setOnClickListener { collectFace() } - binding.rvLogInfo.let { - it.layoutManager = LinearLayoutManager(this, LinearLayoutManager.VERTICAL, true) - it.adapter = logAdapter - } - - binding.btnLogState.let { - it.tag = false - it.setImageResource(R.drawable.ic_log_show) - it.setOnClickListener { v -> - binding.rvLogInfo.visible() - val state = it.tag.toString().toBooleanStrictOrNull() ?: false - it.tag = state - it.setImageResource( - if (state) R.drawable.ic_log_hide else R.drawable.ic_log_show - ) - } - } +// binding.rvLogInfo.let { +// it.layoutManager = LinearLayoutManager(this, LinearLayoutManager.VERTICAL, true) +// it.adapter = logAdapter +// } +// +// binding.btnLogState.let { +// it.tag = false +// it.setImageResource(R.drawable.ic_log_show) +// it.setOnClickListener { v -> +// binding.rvLogInfo.run { +// val state = it.tag.toString().toBooleanStrictOrNull() ?: false +// if (state) visible() else gone() +// } +// val state = it.tag.toString().toBooleanStrictOrNull() ?: false +// it.tag = state +// it.setImageResource( +// if (state) R.drawable.ic_log_hide else R.drawable.ic_log_show +// ) +// } +// } } private fun checkCameraPermission() { @@ -230,6 +234,10 @@ class LoginByFaceActivity : BaseActivity(), recognizeViewModel.recognizeUserId.observe(this, Observer { result: CompareResult? -> Timber.i("recognizeUserId observe userId = ${result?.faceEntity?.userName}") +// if (result?.faceEntity == null) { +// collectFace() +// return@Observer +// } currentUserId = result?.faceEntity?.userName // viewModel.getUserInfoById(memberId = userId) // ToastUtils.showToast(currentUserId) @@ -263,33 +271,38 @@ class LoginByFaceActivity : BaseActivity(), } private var currentPlateInfo: EquipmentUserInfo? = null + private var debouncer = Debouncer(5000) /** * 打开餐盘柜 */ private fun openPlate(userId: String?) { - Log.d(TAG, "openPlate: userId=$userId") - getPlateData { items -> - Log.d(TAG, "openPlate: items:${Gson().toJson(items)}") - // 未查询到当前用户,查询第一个未绑定的餐盘 - val item = items.firstOrNull { it.plateNumber.isNullOrEmpty().not() } - Log.d(TAG, "openPlate: item2:${item}") - if (item == null) { - //暂无餐盘 - ToastUtils.showToast("暂无餐盘,请联系管理人员!") - goInitActivity() - return@getPlateData - } - Log.d(TAG, "openPlate: item3:${item}") - item.faceId = userId - item.updateTime = DateTimeUtils.getDateTimeString() - item.plateNumber = null - //打开柜子 - PlateUtils.open(this, item.equipmentBoxCode, false) + debouncer.debounce { + Log.d(TAG, "openPlate: userId=$userId") + getPlateData { items -> + Log.d(TAG, "openPlate: items:${Gson().toJson(items)}") + // 未查询到当前用户,查询第一个未绑定的餐盘 + val item = items.firstOrNull { it.plateNumber.isNullOrEmpty().not() } + Log.d(TAG, "openPlate: item2:${item}") + if (item == null) { + //暂无餐盘 + ToastUtils.showToast("暂无餐盘,请联系管理人员!") + goInitActivity() + return@getPlateData + } + Log.d(TAG, "openPlate: item3:${item}") + item.faceId = userId + item.updateTime = DateTimeUtils.getDateTimeString() + item.plateNumber = null + //打开柜子 + PlateUtils.open(this, item.equipmentBoxCode, false) - currentPlateInfo = item - MyApp.plateList = items - SpTool.savePlateData(items) + currentPlateInfo = item + MyApp.plateList = items + SpTool.savePlateData(items) + + debouncer.reset() + } } } @@ -594,7 +607,6 @@ class LoginByFaceActivity : BaseActivity(), loadLogInfo("collectFace: -----------1,开始采集人脸,开始时间:${DateTimeUtils.getDateTimeString()}----------") if (isFirstOpen) return loadLogInfo("collectFace: ----------2,isFirstOpen=false-----------") - logAdapter.addData("collectFace: ----------22222222,isFirstOpen=false-----------") if (facePreviewInfoList.isNullOrEmpty()) { loadLogInfo("collectFace: ----------3,未检测到人脸信息-----------") return @@ -605,8 +617,17 @@ class LoginByFaceActivity : BaseActivity(), recognizeViewModel.updateRegisterStatus(REGISTER_STATUS_READY) loadLogInfo("collectFace: ----------5,人脸采集中-----------") getFaceData { faceData -> - userFaceInfo = null - saveFaceInfo(faceData) +// userFaceInfo = null + Thread { + val faceDao = FaceDatabase.getInstance(this).faceDao() + val entity = faceDao.queryByUserName(tempUserId) + if (entity != null) { + //已存在用户 + loadLogInfo("collectFace,saveFaceInfo: ----------9,数据库已存在该人脸数据-----------") + return@Thread + } + saveFaceInfo(faceData) + }.start() } } @@ -628,12 +649,15 @@ class LoginByFaceActivity : BaseActivity(), // toast("您已采集过人脸信息") // return@startIntervalTask // } - loadLogInfo("collectFace,getFaceData: ----------6,正在获人脸取特征数据") +// loadLogInfo("collectFace,getFaceData: ----------6,正在获人脸取特征数据") if (userFaceInfo == null) { return@startIntervalTask } loadLogInfo("collectFace,getFaceData: ----------7,拿到人脸取特征数据-----------") - val faceData = Base64.encode(userFaceInfo!!.faceFeature!!.featureData) + val faceData: String? = Base64.encode(userFaceInfo?.faceFeature?.featureData) + if (faceData.isNullOrBlank()) { + return@startIntervalTask + } block(faceData) checkFaceJob?.cancel() job?.cancel() @@ -643,7 +667,7 @@ class LoginByFaceActivity : BaseActivity(), private fun loadLogInfo(msg: String) { Log.d(TAG, msg) - logAdapter.addData(msg) +// logAdapter.addData(msg) } private var facePreviewInfoList: MutableList? = null @@ -673,43 +697,42 @@ class LoginByFaceActivity : BaseActivity(), } private fun saveFaceInfo(faceData: String) { - Thread { - try { - loadLogInfo("collectFace,saveFaceInfo: ----------8,保存人脸取特征数据-----------") - val faceDao = FaceDatabase.getInstance(this).faceDao() - val entity = faceDao.queryByUserName(tempUserId) - if (entity != null) { - //已存在用户 - loadLogInfo("collectFace,saveFaceInfo: ----------9,数据库已存在该人脸数据-----------") - return@Thread - } - val faceEntity = FaceEntity( - tempUserId, - null, - Base64.decode(faceData) - ).also { - it.userType = "2" - } - faceDao.insert(faceEntity) - loadLogInfo("collectFace,saveFaceInfo: ----------10,人脸数据保存完成-----------") - recognizeViewModel.refreshFaceList() - loadLogInfo("collectFace,saveFaceInfo: ----------11,刷新人脸数据-----------") - sendFaceData(faceData) - loadLogInfo("collectFace,saveFaceInfo: ----------12,人脸数据发送完成时间:${DateTimeUtils.getDateTimeString()}-----------") - loadLogInfo("---------------------------------") - collectCount = 0 - } catch (e: Exception) { - e.printStackTrace() - loadLogInfo("collectFace,saveFaceInfo: ----------13,人脸采集异常:${e.message}-----------") - collectCount++ - if (collectCount <= 5) { - collectFace() - } else { - loadLogInfo("collectFace,saveFaceInfo: ----------14,${collectCount}次人脸采集异常:${e.message}-----------") - ToastUtils.showToast("人脸采集异常:${e.message}") - } + try { + checkFaceJob?.cancel() + + sendFaceData(faceData) + loadLogInfo("collectFace,saveFaceInfo: ----------12,人脸数据发送完成时间:${DateTimeUtils.getDateTimeString()}-----------") + + runOnUiThread { + openPlate(tempUserId) } - }.start() + + loadLogInfo("collectFace,saveFaceInfo: ----------8,保存人脸取特征数据-----------") + val faceDao = FaceDatabase.getInstance(this).faceDao() + val faceEntity = FaceEntity( + tempUserId, + null, + Base64.decode(faceData) + ).also { + it.userType = "2" + } + faceDao.insert(faceEntity) + loadLogInfo("collectFace,saveFaceInfo: ----------10,人脸数据保存完成-----------") + recognizeViewModel.refreshFaceList() + loadLogInfo("collectFace,saveFaceInfo: ----------11,刷新人脸数据-----------") + loadLogInfo("---------------------------------") + collectCount = 0 + } catch (e: Exception) { + e.printStackTrace() + loadLogInfo("collectFace,saveFaceInfo: ----------13,人脸采集异常:${e.message}-----------") + collectCount++ + if (collectCount <= 5) { + collectFace() + } else { + loadLogInfo("collectFace,saveFaceInfo: ----------14,${collectCount}次人脸采集异常:${e.message}-----------") + ToastUtils.showToast("人脸采集异常:${e.message}") + } + } } private var collectCount = 0; diff --git a/app/src/main/java/com/sw/platecabinet/adapter/LogAdapter.kt b/app/src/main/java/com/sw/platecabinet/adapter/LogAdapter.kt index c26d005..7d9b89a 100644 --- a/app/src/main/java/com/sw/platecabinet/adapter/LogAdapter.kt +++ b/app/src/main/java/com/sw/platecabinet/adapter/LogAdapter.kt @@ -1,11 +1,13 @@ package com.sw.platecabinet.adapter +import android.os.Handler +import android.os.Looper import android.view.LayoutInflater import android.view.ViewGroup import androidx.recyclerview.widget.RecyclerView import com.sw.platecabinet.databinding.ListItemLogInfoBinding -class LogAdapter(var list: MutableList) : RecyclerView.Adapter { +class LogAdapter(var list: MutableList) : RecyclerView.Adapter() { override fun onBindViewHolder(holder: ViewHolder, position: Int) { holder.binding.tvLogText.text = list[position] @@ -23,8 +25,10 @@ class LogAdapter(var list: MutableList) : RecyclerView.Adapter { if (similarPass) { - if (recognizeUserId != null) { - recognizeUserId.postValue(compareResult); - } + recognizeUserId.postValue(compareResult); boolean isAdded = false; List compareResults = compareResultList.getValue(); if (compareResults != null && !compareResults.isEmpty()) { @@ -497,6 +495,8 @@ public class RecognizeViewModel extends ViewModel implements RecognizeCallback { getFaceItemEventMutableLiveData().postValue(new FaceItemEvent(compareResults.size() - 1, EventType.INSERTED)); } } + } else { +// recognizeUserId.postValue(new CompareResult(null, 0f)); } }); }