This commit is contained in:
mazengfei
2026-01-21 13:00:58 +08:00
parent 8326ff0a03
commit de4e5d57e2
4 changed files with 83 additions and 68 deletions
@@ -425,7 +425,7 @@ abstract class BaseActivity<VB : ViewBinding> : AppCompatActivity() {
// private val initialDelay = 5 * 60 * 1000L // private val initialDelay = 5 * 60 * 1000L
// private val dealyMillis = 10 * 60 * 1000L // private val dealyMillis = 10 * 60 * 1000L
private val initialDelay = 1 * 60 * 1000L private val initialDelay = 1 * 60 * 1000L
private val dealyMillis = 1 * 60 * 1000L private val dealyMillis = 5 * 60 * 1000L
private var taskPageNo = 1 private var taskPageNo = 1
fun startFaceTask() { fun startFaceTask() {
faceTaskJob = faceTaskJob =
@@ -53,37 +53,37 @@ class DeviceInitActivity : BaseActivity<ActivityDeviceInitBinding>() {
// }, 1000) // }, 1000)
initPlateList() initPlateList()
showWaitingDialog("加载中……") showWaitingDialog("加载中……")
clearAllFace {
viewModel.getUserFaceCache()
viewModel.getDeviceConfig { deviceConfig ->
runOnUiThread {
if (deviceConfig == null) {
hideWaitingDialog()
ToastUtils.showToast("获取设备配置数据失败")
hideWaitingDialog()
goLoginActivity()
return@runOnUiThread
}
GlobalData.appId = deviceConfig.arcsoftAppId ?: ""
GlobalData.sdkKey = deviceConfig.arcsoftSdkKey ?: ""
GlobalData.activeKey = deviceConfig.arcsoftActiveKey ?: ""
binding.root.postDelayed({
hideWaitingDialog()
goLoginActivity()
}, 500)
}
}
}
// goLoginActivity()
}
private fun clearAllFace(block: () -> Unit) {
Thread { Thread {
val faceDao = FaceDatabase.getInstance(App.getContext()).faceDao() val faceDao = FaceDatabase.getInstance(App.getContext()).faceDao()
faceDao.deleteAll() faceDao.deleteAll()
faceDao.resetId() faceDao.resetId()
// runOnUiThread { runOnUiThread { block() }
// viewModel.getUserFaceCache {
// recognizeViewModel.refreshFaceList()
// }
// }
}.start() }.start()
viewModel.getUserFaceCache()
viewModel.getDeviceConfig { deviceConfig ->
runOnUiThread {
if (deviceConfig == null) {
hideWaitingDialog()
ToastUtils.showToast("获取设备配置数据失败")
hideWaitingDialog()
goLoginActivity()
return@runOnUiThread
}
GlobalData.appId = deviceConfig.arcsoftAppId ?: ""
GlobalData.sdkKey = deviceConfig.arcsoftSdkKey ?: ""
GlobalData.activeKey = deviceConfig.arcsoftActiveKey ?: ""
binding.root.postDelayed({
hideWaitingDialog()
goLoginActivity()
}, 500)
}
}
// goLoginActivity()
} }
override fun registerDataChange() { override fun registerDataChange() {
@@ -190,9 +190,17 @@ class LoginByFaceActivity : BaseActivity<ActivityLoginFaceBinding>(),
recognizeViewModel.prepareRegister() recognizeViewModel.prepareRegister()
recognizeViewModel.setOnRegisterFinishedCallback { facePreviewInfo, userFaceInfo -> recognizeViewModel.setOnRegisterFinishedCallback { facePreviewInfo, userFaceInfo ->
//Log.d(TAG, "initArcViewModel: userFaceInfo == null : ${userFaceInfo == null}") //Log.d(TAG, "initArcViewModel: userFaceInfo == null : ${userFaceInfo == null}")
if (!isCollectFace) {
return@setOnRegisterFinishedCallback
}
if (this.userFaceInfo == null && userFaceInfo != null) { if (this.userFaceInfo == null && userFaceInfo != null) {
recognizeViewModel.updateRegisterStatus(RecognizeViewModel.REGISTER_STATUS_DONE) recognizeViewModel.updateRegisterStatus(RecognizeViewModel.REGISTER_STATUS_DONE)
this.userFaceInfo = userFaceInfo this.userFaceInfo = userFaceInfo
getFaceDataBlock { faceData ->
Thread {
saveFaceInfo(faceData)
}.start()
}
return@setOnRegisterFinishedCallback return@setOnRegisterFinishedCallback
} }
} }
@@ -295,6 +303,7 @@ class LoginByFaceActivity : BaseActivity<ActivityLoginFaceBinding>(),
Log.d(TAG, "openPlate: item2:${item}") Log.d(TAG, "openPlate: item2:${item}")
if (item == null) { if (item == null) {
//暂无餐盘 //暂无餐盘
Log.d(TAG, "collectFace,openPlate: 暂无餐盘,请联系管理人员,isCollectFace=$isCollectFace")
ToastUtils.showToast("暂无餐盘,请联系管理人员!") ToastUtils.showToast("暂无餐盘,请联系管理人员!")
goInitActivity() goInitActivity()
return@getPlateData return@getPlateData
@@ -350,7 +359,7 @@ class LoginByFaceActivity : BaseActivity<ActivityLoginFaceBinding>(),
EventBus.getDefault().unregister(this) EventBus.getDefault().unregister(this)
// countDownJob?.cancel() // countDownJob?.cancel()
// checkFaceJob?.cancel() // checkFaceJob?.cancel()
getFaceScheduler?.shutdown() // getFaceScheduler?.shutdown()
checkFaceScheduler?.shutdown() checkFaceScheduler?.shutdown()
super.onDestroy() super.onDestroy()
} }
@@ -476,6 +485,7 @@ class LoginByFaceActivity : BaseActivity<ActivityLoginFaceBinding>(),
if (facePreviewInfoList.isNullOrEmpty()) { if (facePreviewInfoList.isNullOrEmpty()) {
currentPlateInfo = null currentPlateInfo = null
currentUserId = null currentUserId = null
userFaceInfo = null
// checkFaceJob?.cancel() // checkFaceJob?.cancel()
// getFaceJob?.cancel() // getFaceJob?.cancel()
} }
@@ -571,6 +581,7 @@ class LoginByFaceActivity : BaseActivity<ActivityLoginFaceBinding>(),
return return
} }
faceDataList.clear() faceDataList.clear()
isCollectFace = false
plateEnable = true plateEnable = true
collectCount = 0 collectCount = 0
tempUserId = "${System.currentTimeMillis()}" tempUserId = "${System.currentTimeMillis()}"
@@ -628,38 +639,35 @@ class LoginByFaceActivity : BaseActivity<ActivityLoginFaceBinding>(),
loadLogInfo("collectFace: -----------1,开始采集人脸,开始时间:${DateTimeUtils.getDateTimeString()}----------") loadLogInfo("collectFace: -----------1,开始采集人脸,开始时间:${DateTimeUtils.getDateTimeString()}----------")
if (isFirstOpen) return if (isFirstOpen) return
loadLogInfo("collectFace: ----------2,isFirstOpen=false-----------") loadLogInfo("collectFace: ----------2,isFirstOpen=false-----------")
if (facePreviewInfoList.isNullOrEmpty()) { // if (facePreviewInfoList.isNullOrEmpty()) {
loadLogInfo("collectFace: ----------3,未检测到人脸信息-----------") // loadLogInfo("collectFace: ----------3,未检测到人脸信息-----------")
return // return
} // }
loadLogInfo("collectFace: ----------4,检测到人脸信息-----------") loadLogInfo("collectFace: ----------4,检测到人脸信息-----------")
currentUserId = null currentUserId = null
userFaceInfo = null userFaceInfo = null
recognizeViewModel.updateRegisterStatus(REGISTER_STATUS_READY) recognizeViewModel.updateRegisterStatus(REGISTER_STATUS_READY)
loadLogInfo("collectFace: ----------5,人脸采集中-----------") loadLogInfo("collectFace: ----------5,人脸采集中-----------")
getFaceData { faceData -> // getFaceData { faceData ->
if (faceDataList.isNotEmpty()) { // if (faceDataList.isNotEmpty()) {
return@getFaceData // return@getFaceData
} // }
faceDataList.add(faceData) // faceDataList.add(faceData)
//
checkFaceScheduler?.shutdown() // checkFaceScheduler?.shutdown()
getFaceScheduler?.shutdown() // getFaceScheduler?.shutdown()
// checkFaceJob?.cancel() // recognizeViewModel.updateRegisterStatus(RecognizeViewModel.REGISTER_STATUS_DONE)
// getFaceJob?.cancel() // Thread {
recognizeViewModel.updateRegisterStatus(RecognizeViewModel.REGISTER_STATUS_DONE) //// val faceDao = FaceDatabase.getInstance(App.getContext()).faceDao()
// userFaceInfo = null //// val entity = faceDao.queryByUserName(tempUserId)
Thread { //// if (entity != null) {
// val faceDao = FaceDatabase.getInstance(App.getContext()).faceDao() //// //已存在用户
// val entity = faceDao.queryByUserName(tempUserId) //// loadLogInfo("collectFace,saveFaceInfo: ----------9,数据库已存在该人脸数据-----------")
// if (entity != null) { //// return@Thread
// //已存在用户 //// }
// loadLogInfo("collectFace,saveFaceInfo: ----------9,数据库已存在该人脸数据-----------") // saveFaceInfo(faceData)
// return@Thread // }.start()
// } // }
saveFaceInfo(faceData)
}.start()
}
} }
private fun sendFaceData(faceData: String) { private fun sendFaceData(faceData: String) {
@@ -673,21 +681,21 @@ class LoginByFaceActivity : BaseActivity<ActivityLoginFaceBinding>(),
tcpClient?.send(jsonObject) tcpClient?.send(jsonObject)
} }
private var getFaceScheduler: ScheduledExecutorService? = null // private var getFaceScheduler: ScheduledExecutorService? = null
private var checkFaceScheduler: ScheduledExecutorService? = null private var checkFaceScheduler: ScheduledExecutorService? = null
private fun initFaceScheduler() { private fun initFaceScheduler() {
getFaceScheduler = Executors.newScheduledThreadPool(1) // getFaceScheduler = Executors.newScheduledThreadPool(1)
checkFaceScheduler = Executors.newScheduledThreadPool(1) checkFaceScheduler = Executors.newScheduledThreadPool(1)
} }
private fun getFaceData(block: (String) -> Unit) { private fun getFaceData(block: (String) -> Unit) {
getFaceScheduler?.scheduleWithFixedDelay( // getFaceScheduler?.scheduleWithFixedDelay(
{ // {
getFaceDataBlock(block) // getFaceDataBlock(block)
}, 5L, 5L, TimeUnit.MILLISECONDS // }, 5L, 5L, TimeUnit.MILLISECONDS
) // )
// runBlocking { // runBlocking {
// getFaceJob = executor.startIntervalTask(5) { // getFaceJob = executor.startIntervalTask(5) {
@@ -698,7 +706,7 @@ class LoginByFaceActivity : BaseActivity<ActivityLoginFaceBinding>(),
} }
private fun getFaceDataBlock(block: (String) -> Unit) { private fun getFaceDataBlock(block: (String) -> Unit) {
if (userFaceInfo == null) { if (userFaceInfo == null || userFaceInfo?.faceFeature?.featureData == null) {
return return
} }
val faceData: String? = Base64.encode(userFaceInfo?.faceFeature?.featureData) val faceData: String? = Base64.encode(userFaceInfo?.faceFeature?.featureData)
@@ -719,7 +727,8 @@ class LoginByFaceActivity : BaseActivity<ActivityLoginFaceBinding>(),
private var facePreviewInfoList: MutableList<FacePreviewInfo>? = null private var facePreviewInfoList: MutableList<FacePreviewInfo>? = null
private var userFaceInfo: UserFaceInfo? = null private var userFaceInfo: UserFaceInfo? = null
private var countDownJob: Job? = null private var countDownJob: Job? = null
// private var getFaceJob: Job? = null
// private var getFaceJob: Job? = null
val executor = IntervalExecutor() val executor = IntervalExecutor()
private var currentUserId: String? = null private var currentUserId: String? = null
private fun countDown() { private fun countDown() {
@@ -856,9 +865,10 @@ class LoginByFaceActivity : BaseActivity<ActivityLoginFaceBinding>(),
}.start() }.start()
} }
private val WAITING_TIME = 1 * 1000L private val WAITING_TIME = 3 * 1000L
private var checkStartTime = 0L private var checkStartTime = 0L
// private var checkFaceJob: Job? = null
// private var checkFaceJob: Job? = null
private fun checkFaceState() { private fun checkFaceState() {
checkStartTime = System.currentTimeMillis() checkStartTime = System.currentTimeMillis()
@@ -872,16 +882,20 @@ class LoginByFaceActivity : BaseActivity<ActivityLoginFaceBinding>(),
// //
// } // }
} }
private var isCollectFace = false
private fun checkFaceBlock() { private fun checkFaceBlock() {
Log.d("Login", "collectFace,currentUserId=${currentUserId}") Log.d("Login", "collectFace,currentUserId=${currentUserId}")
if (currentUserId.isNullOrBlank().not()) { if (currentUserId.isNullOrBlank().not()) {
// checkFaceJob?.cancel() // checkFaceJob?.cancel()
isCollectFace = false
checkFaceScheduler?.shutdown() checkFaceScheduler?.shutdown()
return return
} }
if (System.currentTimeMillis() - checkStartTime >= WAITING_TIME) { if (System.currentTimeMillis() - checkStartTime >= WAITING_TIME) {
//超过5秒采集人脸并识别 //超过1秒采集人脸并识别
checkFaceScheduler?.shutdown()
isCollectFace = true
collectFace() collectFace()
} }
} }
@@ -472,6 +472,7 @@ public class RecognizeViewModel extends ViewModel implements RecognizeCallback {
@Override @Override
public void onRecognized(CompareResult compareResult, Integer live, boolean similarPass) { public void onRecognized(CompareResult compareResult, Integer live, boolean similarPass) {
Disposable disposable = Observable.just(true).observeOn(AndroidSchedulers.mainThread()).subscribe(aBoolean -> { Disposable disposable = Observable.just(true).observeOn(AndroidSchedulers.mainThread()).subscribe(aBoolean -> {
Log.d(TAG, "onRecognized: similarPass="+similarPass);
if (similarPass) { if (similarPass) {
recognizeUserId.postValue(compareResult); recognizeUserId.postValue(compareResult);
boolean isAdded = false; boolean isAdded = false;