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 65b320f..5698b67 100644 --- a/app/src/main/java/com/sw/platecabinet/activity/LoginByFaceActivity.kt +++ b/app/src/main/java/com/sw/platecabinet/activity/LoginByFaceActivity.kt @@ -245,9 +245,15 @@ class LoginByFaceActivity : BaseActivity(), }) recognizeViewModel.recognizeUserId.observe(this, Observer { result: CompareResult? -> - Timber.i("recognizeUserId observe userId = ${result?.faceEntity?.userName}") + loadLogInfo("collectFace,recognizeUserId observe userId = ${result?.faceEntity?.userName}") + if (result?.faceEntity == null) { + loadLogInfo("collectFace,recognizeUserId 未识别到人脸信息,开始采集") + isCollectFace = true + collectFace() + return@Observer + } currentUserId = result?.faceEntity?.userName - plateEnable = true +// plateEnable = true openPlate(currentUserId) }) @@ -266,7 +272,7 @@ class LoginByFaceActivity : BaseActivity(), } private var currentPlateInfo: EquipmentUserInfo? = null - private var plateEnable = true + private var plateEnable = false /** * 打开餐盘柜 @@ -290,15 +296,19 @@ class LoginByFaceActivity : BaseActivity(), item.faceId = userId item.updateTime = DateTimeUtils.getDateTimeString() item.plateNumber = null - //打开柜子 - PlateUtils.open(this, item.equipmentBoxCode, false) plateEnable = false + debouncer.debounce { + //打开柜子 + PlateUtils.open(this, item.equipmentBoxCode, false) + } currentPlateInfo = item MyApp.plateList = items SpTool.savePlateData(items) } } + private val debouncer by lazy { Debouncer(3000) } + private fun initArcView() { //在布局结束后才做初始化操作 binding.dualCameraTexturePreviewRgb.getViewTreeObserver().addOnGlobalLayoutListener(this) @@ -317,7 +327,7 @@ class LoginByFaceActivity : BaseActivity(), EventBus.getDefault().unregister(this) // getFaceScheduler?.shutdown() - checkFaceScheduler?.shutdown() +// checkFaceScheduler?.shutdown() super.onDestroy() } @@ -518,6 +528,8 @@ class LoginByFaceActivity : BaseActivity(), if (rgbCameraHelper != null && rgbCameraHelper!!.isStopped) { loadLogInfo("collectFace,resumeCamera: ") rgbCameraHelper!!.start() + } else { + recognizeViewModel.onPreviewFrame(ByteArray(1382400), true) } } @@ -535,7 +547,6 @@ class LoginByFaceActivity : BaseActivity(), }, 1000) return } - faceDataList.clear() isCollectFace = false plateEnable = true collectCount = 0 @@ -546,8 +557,8 @@ class LoginByFaceActivity : BaseActivity(), it.cancel() it.start() } - initFaceScheduler() - checkFaceState() +// initFaceScheduler() +// checkFaceState() } catch (e: Exception) { e.printStackTrace() } @@ -612,12 +623,12 @@ class LoginByFaceActivity : BaseActivity(), } // private var getFaceScheduler: ScheduledExecutorService? = null - private var checkFaceScheduler: ScheduledExecutorService? = null - - private fun initFaceScheduler() { -// getFaceScheduler = Executors.newScheduledThreadPool(1) - checkFaceScheduler = Executors.newScheduledThreadPool(1) - } +// private var checkFaceScheduler: ScheduledExecutorService? = null +// +// private fun initFaceScheduler() { +//// getFaceScheduler = Executors.newScheduledThreadPool(1) +// checkFaceScheduler = Executors.newScheduledThreadPool(1) +// } private fun getFaceDataBlock(block: (String) -> Unit) { if (userFaceInfo == null || userFaceInfo?.faceFeature?.featureData == null) { @@ -631,8 +642,6 @@ class LoginByFaceActivity : BaseActivity(), block(faceData) } - private var faceDataList: MutableList = mutableListOf() - private fun loadLogInfo(msg: String) { Timber.tag(TAG).d( msg) } @@ -647,9 +656,9 @@ class LoginByFaceActivity : BaseActivity(), sendFaceData(faceData) loadLogInfo("collectFace,saveFaceInfo: ----------12,人脸数据发送完成时间:${DateTimeUtils.getDateTimeString()}-----------") - runOnUiThread { - openPlate(tempUserId) - } +// runOnUiThread { +// openPlate(tempUserId) +// } loadLogInfo("collectFace,saveFaceInfo: ----------8,保存人脸取特征数据-----------") val faceDao = FaceDatabase.getInstance(this).faceDao() @@ -664,6 +673,7 @@ class LoginByFaceActivity : BaseActivity(), loadLogInfo("collectFace,saveFaceInfo: ----------10,人脸数据保存完成-----------") recognizeViewModel.refreshFaceList() loadLogInfo("collectFace,saveFaceInfo: ----------11,刷新人脸数据-----------") + runOnUiThread { recognizeViewModel.onPreviewFrame(ByteArray(1382400), true) } loadLogInfo("---------------------------------") collectCount = 0 } catch (e: Exception) { @@ -749,33 +759,33 @@ class LoginByFaceActivity : BaseActivity(), }.start() } - private val WAITING_TIME = 3 * 1000L - private var checkStartTime = 0L +// private val WAITING_TIME = 3 * 1000L +// private var checkStartTime = 0L private fun checkFaceState() { - checkStartTime = System.currentTimeMillis() - - checkFaceScheduler?.scheduleWithFixedDelay( - { - checkFaceBlock() - }, 5L, 5L, TimeUnit.MILLISECONDS - ) +// checkStartTime = System.currentTimeMillis() +// +// checkFaceScheduler?.scheduleWithFixedDelay( +// { +// checkFaceBlock() +// }, 5L, 5L, TimeUnit.MILLISECONDS +// ) } private var isCollectFace = false - private fun checkFaceBlock() { - loadLogInfo("collectFace,currentUserId=${currentUserId}") - if (currentUserId.isNullOrBlank().not()) { - isCollectFace = false - - checkFaceScheduler?.shutdown() - return - } - if (System.currentTimeMillis() - checkStartTime >= WAITING_TIME) { - //超过1秒采集人脸并识别 - checkFaceScheduler?.shutdown() - isCollectFace = true - collectFace() - } - } +// private fun checkFaceBlock() { +// loadLogInfo("collectFace,currentUserId=${currentUserId}") +// if (currentUserId.isNullOrBlank().not()) { +// isCollectFace = false +// +// checkFaceScheduler?.shutdown() +// return +// } +//// if (System.currentTimeMillis() - checkStartTime >= WAITING_TIME) { +//// //超过1秒采集人脸并识别 +//// checkFaceScheduler?.shutdown() +//// isCollectFace = true +//// collectFace() +//// } +// } } \ No newline at end of file diff --git a/lib_face/src/main/java/com/sw/plate/utils/arcface/face/FaceHelper.java b/lib_face/src/main/java/com/sw/plate/utils/arcface/face/FaceHelper.java index 017c983..d075ffb 100644 --- a/lib_face/src/main/java/com/sw/plate/utils/arcface/face/FaceHelper.java +++ b/lib_face/src/main/java/com/sw/plate/utils/arcface/face/FaceHelper.java @@ -652,9 +652,16 @@ public class FaceHelper implements FaceListener { }); } + private int failCount = 0; private void searchFace(final FaceFeature faceFeature, final Integer trackId) { CompareResult compareResult = FaceServer.getInstance().searchFaceFeature(faceFeature, frEngine); if (compareResult == null || compareResult.getFaceEntity() == null) { + failCount++; + Log.d(TAG, "collectFace,searchFace查询失败"+failCount+"次"); + if (failCount >= 2) { + recognizeCallback.onRecognized(null, LivenessInfo.UNKNOWN, false); + return; + } retryRecognizeDelayed(trackId); return; } 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 06e3215..5550152 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 @@ -505,7 +505,7 @@ public class RecognizeViewModel extends ViewModel implements RecognizeCallback { } } } else { -// recognizeUserId.postValue(new CompareResult(null, 0f)); + recognizeUserId.postValue(new CompareResult(null, -1f)); } }); }