diff --git a/app/src/main/java/com/sw/face/collect/MainActivity.kt b/app/src/main/java/com/sw/face/collect/MainActivity.kt index 183a9e3..87920e1 100644 --- a/app/src/main/java/com/sw/face/collect/MainActivity.kt +++ b/app/src/main/java/com/sw/face/collect/MainActivity.kt @@ -67,6 +67,9 @@ import com.sw.plate.utils.arcface.facedb.entity.FaceEntity import com.sw.plate.utils.arcface.model.UserFaceInfo import com.sw.plate.utils.arcface.viewmodel.RecognizeViewModel import com.sw.plate.utils.arcface.viewmodel.RecognizeViewModel.REGISTER_STATUS_READY +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.launch +import kotlinx.coroutines.withContext import java.io.File import java.util.Arrays import java.util.concurrent.atomic.AtomicBoolean @@ -123,6 +126,16 @@ class MainActivity : BaseActivity(), ViewTreeObserver.OnGlo //重新识别按钮 resetRecognizeState() } + binding.btnClear.setOnClickListener { + lifecycleScope.launch { + withContext(Dispatchers.IO) { + val faceDao = FaceDatabase.getInstance(this@MainActivity).faceDao() + faceDao.deleteAll() + faceDao.resetId() + ToastUtils.showToast("已完成") + } + } + } } private fun checkCameraPermission() { @@ -169,7 +182,7 @@ class MainActivity : BaseActivity(), ViewTreeObserver.OnGlo private val livenessType = LivenessType.IR private var openRectInfoDraw = false private val regDebouncer = Debouncer(3000) - private val leftDebouncer = Debouncer(30*1000) + private val leftDebouncer = Debouncer(30 * 1000) private var registerHandler: RegisterCallbackHandler? = null private fun isFitData(userFaceInfo: UserFaceInfo?): Boolean { @@ -244,10 +257,10 @@ class MainActivity : BaseActivity(), ViewTreeObserver.OnGlo }) recognizeViewModel.recognizeConfiguration.observe( - this, - Observer { recognizeConfiguration: RecognizeConfiguration? -> - //Timber.i("recognizeConfiguration: observe = ${recognizeConfiguration.toString()}") - }) + this, + Observer { recognizeConfiguration: RecognizeConfiguration? -> + //Timber.i("recognizeConfiguration: observe = ${recognizeConfiguration.toString()}") + }) recognizeViewModel.recognizeNotice.observe(this, Observer { notice: String? -> //Timber.i("recognizeNotice observe notice = $notice") }) @@ -470,7 +483,7 @@ class MainActivity : BaseActivity(), ViewTreeObserver.OnGlo return layoutParams } - private fun initRgbCamera() { + private fun initRgbCamera() { val cameraListener: CameraListener = object : CameraListener { override fun onCameraOpened( camera: Camera, @@ -627,11 +640,11 @@ class MainActivity : BaseActivity(), ViewTreeObserver.OnGlo val previewConfig: PreviewConfig = recognizeViewModel.previewConfig rgbCameraHelper = DualCameraHelper.Builder().previewViewSize( - Point( - binding.dualCameraTexturePreviewRgb.measuredWidth, - binding.dualCameraTexturePreviewRgb.measuredHeight - ) - ).rotation(windowManager.defaultDisplay.rotation).additionalRotation(0) // 角度 + Point( + binding.dualCameraTexturePreviewRgb.measuredWidth, + binding.dualCameraTexturePreviewRgb.measuredHeight + ) + ).rotation(windowManager.defaultDisplay.rotation).additionalRotation(0) // 角度 .previewSize(recognizeViewModel.loadPreviewSize()) .specificCameraId(previewConfig.rgbCameraId).isMirror(true) .previewOn(binding.dualCameraTexturePreviewRgb).cameraListener(cameraListener).build() @@ -726,8 +739,9 @@ class MainActivity : BaseActivity(), ViewTreeObserver.OnGlo return nv21Data } -// // 调用示例:构造 1920×1080 的全黑帧(长度 1382400) - val emptyFrame = createBlackNV21Frame(1920, 1080) + // // 调用示例:构造 1920×1080 的全黑帧(长度 1382400) +// val emptyFrame = createBlackNV21Frame(1920, 1080) + private val emptyFrame = createBlackNV21Frame(1280, 720) // // 传递“空帧” // recognizeViewModel.onPreviewFrame(emptyFrame, true) @@ -806,7 +820,9 @@ class MainActivity : BaseActivity(), ViewTreeObserver.OnGlo private fun judgeRecognizeState(): Boolean { val rectColor = binding.dualCameraFaceRectView.rectColor - if (rectColor == RecognizeColor.COLOR_SUCCESS && currentUserId.isNullOrBlank().not() && facePreviewInfoList.isNullOrEmpty().not()) { + if (rectColor == RecognizeColor.COLOR_SUCCESS && currentUserId.isNullOrBlank() + .not() && facePreviewInfoList.isNullOrEmpty().not() + ) { loadLogInfo("userId=$currentUserId") openPlateDebouncer.debounce { openPlate(currentUserId) @@ -922,14 +938,24 @@ class MainActivity : BaseActivity(), ViewTreeObserver.OnGlo //1-会员、2-临时用户 it.userType = if (faceModel.isMember) "1" else "2" } - faceDao.insert(faceEntity) + val faceId = faceDao.insert(faceEntity) loadLogInfo("collectFace,saveFaceInfo: ----------10,人脸数据保存完成-----------") - recognizeViewModel.refreshFaceList() +// recognizeViewModel.refreshFaceList(true) + faceEntity.faceId = faceId + recognizeViewModel.addFace(faceEntity) + ToastUtils.showToast("faceCount = ${faceDao.faceCount}") +// recognizeViewModel.registerFace() loadLogInfo("collectFace,saveFaceInfo: ----------11,刷新人脸数据-----------") - runOnUiThread { -// recognizeViewModel.onPreviewFrame(ByteArray(1382400), true) - recognizeViewModel.onPreviewFrame(emptyFrame, true) - } +// runOnUiThread { +//// recognizeViewModel.onPreviewFrame(ByteArray(1382400), true) +// binding.dualCameraFaceRectView.clearFaceInfo() +// recognizeViewModel.clearLeftFace(facePreviewInfoList) +// recognizeViewModel.onPreviewFrame(emptyFrame, true) +// isRecognition = false +// binding.root.postDelayed({ +// isRecognition = true +// }, 1000) +// } loadLogInfo("---------------------------------") collectCount = 0 } catch (e: Exception) { @@ -1022,11 +1048,11 @@ class MainActivity : BaseActivity(), ViewTreeObserver.OnGlo val previewConfig = recognizeViewModel.previewConfig irCameraHelper = DualCameraHelper.Builder().previewViewSize( - Point( - binding.dualCameraTexturePreviewIr.measuredWidth, - binding.dualCameraTexturePreviewIr.measuredHeight - ) + Point( + binding.dualCameraTexturePreviewIr.measuredWidth, + binding.dualCameraTexturePreviewIr.measuredHeight ) + ) // .previewViewSize(Point(4,3)) .rotation(windowManager.defaultDisplay.rotation) .specificCameraId(previewConfig.irCameraId) diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 0f47bd0..191e78c 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -215,4 +215,15 @@ android:layout_height="match_parent" /> + + + \ No newline at end of file diff --git a/lib_face/src/main/java/com/sw/plate/utils/arcface/faceserver/FaceServer.java b/lib_face/src/main/java/com/sw/plate/utils/arcface/faceserver/FaceServer.java index da36a0e..70fef1c 100644 --- a/lib_face/src/main/java/com/sw/plate/utils/arcface/faceserver/FaceServer.java +++ b/lib_face/src/main/java/com/sw/plate/utils/arcface/faceserver/FaceServer.java @@ -621,4 +621,10 @@ public class FaceServer { rect.inset(-padding, -padding); return rect; } + + public void registerFace(Context context, FaceEngine frEngine) { + List faceEntityList = FaceDatabase.getInstance(context).faceDao().getAllFaces(); + registerFaceFeatureInfoListFromDb(frEngine, faceEntityList); + } + } 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 81f0e16..87a542f 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 @@ -347,7 +347,14 @@ public class RecognizeViewModel extends ViewModel implements RecognizeCallback { } public void refreshFaceList() { - FaceServer.getInstance().initFaceList(App.getContext(), frEngine, faceCount -> loadFaceList = true, true); + refreshFaceList(true); + } + public void refreshFaceList(boolean recognize) { + loadFaceList = false; + FaceServer.getInstance().initFaceList(App.getContext(), frEngine, faceCount -> { + Log.i(TAG, "unInitEngine: faceCount=" + faceCount); + loadFaceList = true; + }, recognize); } /** @@ -596,7 +603,7 @@ public class RecognizeViewModel extends ViewModel implements RecognizeCallback { if (recognizeStatus != null) { if (recognizeStatus == RequestFeatureStatus.FAILED) { color = RecognizeColor.COLOR_FAILED; - }else if (recognizeStatus == RequestFeatureStatus.SUCCEED) { + } else if (recognizeStatus == RequestFeatureStatus.SUCCEED) { color = RecognizeColor.COLOR_SUCCESS; } else if (recognizeStatus == RequestFeatureStatus.TO_RETRY) { color = RecognizeColor.COLOR_UNKNOWN; @@ -674,4 +681,12 @@ public class RecognizeViewModel extends ViewModel implements RecognizeCallback { String[] size = ConfigUtil.getPreviewSize(App.getContext()).split("x"); return new Point(Integer.parseInt(size[0]), Integer.parseInt(size[1])); } + + public void registerFace() { + FaceServer.getInstance().registerFace(App.getContext(), frEngine); + } + + public void clearAllFaces() { + FaceServer.getInstance().clearAllFaces(); + } }