采集优化
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
package com.sw.platecabinet.activity
|
||||
|
||||
import android.Manifest
|
||||
import android.annotation.SuppressLint
|
||||
import android.content.Intent
|
||||
import android.graphics.Point
|
||||
import android.hardware.Camera
|
||||
@@ -157,7 +158,7 @@ class LoginByFaceActivity : BaseActivity<ActivityLoginFaceBinding>(),
|
||||
val permissionHelper =
|
||||
PermissionHelper.with(this, REQUIRED_PERMISSIONS, CAMERA_PERMISSION_REQUEST_CODE)
|
||||
.onGranted {
|
||||
Timber.d("checkCameraPermission 权限已允许")
|
||||
loadLogInfo("checkCameraPermission 权限已允许")
|
||||
// 权限已授予
|
||||
recognizeViewModel.init()
|
||||
initRgbCamera()
|
||||
@@ -189,7 +190,6 @@ class LoginByFaceActivity : BaseActivity<ActivityLoginFaceBinding>(),
|
||||
recognizeViewModel.setLiveType(livenessType)
|
||||
recognizeViewModel.prepareRegister()
|
||||
recognizeViewModel.setOnRegisterFinishedCallback { facePreviewInfo, userFaceInfo ->
|
||||
//Log.d(TAG, "initArcViewModel: userFaceInfo == null : ${userFaceInfo == null}")
|
||||
if (!isCollectFace) {
|
||||
return@setOnRegisterFinishedCallback
|
||||
}
|
||||
@@ -197,6 +197,7 @@ class LoginByFaceActivity : BaseActivity<ActivityLoginFaceBinding>(),
|
||||
recognizeViewModel.updateRegisterStatus(RecognizeViewModel.REGISTER_STATUS_DONE)
|
||||
this.userFaceInfo = userFaceInfo
|
||||
getFaceDataBlock { faceData ->
|
||||
isCollectFace = false
|
||||
Thread {
|
||||
saveFaceInfo(faceData)
|
||||
}.start()
|
||||
@@ -245,23 +246,8 @@ class LoginByFaceActivity : BaseActivity<ActivityLoginFaceBinding>(),
|
||||
|
||||
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
|
||||
plateEnable = true
|
||||
// checkFaceJob?.cancel()
|
||||
// getFaceJob?.cancel()
|
||||
// viewModel.getUserInfoById(memberId = userId)
|
||||
// ToastUtils.showToast(currentUserId)
|
||||
// if (!currentUserId.isNullOrBlank()) {
|
||||
//// ToastUtils.showToast("您已采集过人脸信息")
|
||||
// return@Observer
|
||||
// }
|
||||
// if (currentPlateInfo?.faceId == currentUserId) {
|
||||
// return@Observer
|
||||
// }
|
||||
openPlate(currentUserId)
|
||||
})
|
||||
|
||||
@@ -270,8 +256,6 @@ class LoginByFaceActivity : BaseActivity<ActivityLoginFaceBinding>(),
|
||||
})
|
||||
}
|
||||
|
||||
// private val settingViewModel by viewModels<SettingViewModel>()
|
||||
|
||||
/**
|
||||
* 查询餐盘数据
|
||||
*/
|
||||
@@ -279,14 +263,9 @@ class LoginByFaceActivity : BaseActivity<ActivityLoginFaceBinding>(),
|
||||
MyApp.plateList?.let {
|
||||
block(it)
|
||||
}
|
||||
// settingViewModel.getEquipmentList { items ->
|
||||
// block(items)
|
||||
// }
|
||||
}
|
||||
|
||||
private var currentPlateInfo: EquipmentUserInfo? = null
|
||||
|
||||
// private var debouncer = Debouncer(5000)
|
||||
private var plateEnable = true
|
||||
|
||||
/**
|
||||
@@ -294,21 +273,20 @@ class LoginByFaceActivity : BaseActivity<ActivityLoginFaceBinding>(),
|
||||
*/
|
||||
private fun openPlate(userId: String?) {
|
||||
if (plateEnable.not()) return
|
||||
// debouncer.debounce {
|
||||
Log.d(TAG, "openPlate: userId=$userId")
|
||||
loadLogInfo("collectFace,openPlate: userId=$userId")
|
||||
getPlateData { items ->
|
||||
Log.d(TAG, "openPlate: items:${Gson().toJson(items)}")
|
||||
loadLogInfo("collectFace,openPlate: items:${Gson().toJson(items)}")
|
||||
// 未查询到当前用户,查询第一个未绑定的餐盘
|
||||
val item = items.firstOrNull { it.plateNumber.isNullOrEmpty().not() }
|
||||
Log.d(TAG, "openPlate: item2:${item}")
|
||||
loadLogInfo("collectFace,openPlate: item2:${item}")
|
||||
if (item == null) {
|
||||
//暂无餐盘
|
||||
Log.d(TAG, "collectFace,openPlate: 暂无餐盘,请联系管理人员,isCollectFace=$isCollectFace")
|
||||
loadLogInfo("collectFace,openPlate: 暂无餐盘,请联系管理人员,isCollectFace=$isCollectFace")
|
||||
ToastUtils.showToast("暂无餐盘,请联系管理人员!")
|
||||
goInitActivity()
|
||||
return@getPlateData
|
||||
}
|
||||
Log.d(TAG, "openPlate: item3:${item}")
|
||||
loadLogInfo("collectFace,openPlate: item3:${item}")
|
||||
item.faceId = userId
|
||||
item.updateTime = DateTimeUtils.getDateTimeString()
|
||||
item.plateNumber = null
|
||||
@@ -318,28 +296,9 @@ class LoginByFaceActivity : BaseActivity<ActivityLoginFaceBinding>(),
|
||||
currentPlateInfo = item
|
||||
MyApp.plateList = items
|
||||
SpTool.savePlateData(items)
|
||||
|
||||
// debouncer.reset()
|
||||
}
|
||||
// }
|
||||
}
|
||||
|
||||
// /**
|
||||
// * 绑定餐盘
|
||||
// */
|
||||
// private fun bindPlate(item: EquipmentUserInfo) {
|
||||
// val bindParam = BindParam(
|
||||
// equipmentId = item.equipmentId,
|
||||
// equipmentCode = item.equipmentCode,
|
||||
// equipmentBoxCode = item.equipmentBoxCode,
|
||||
// faceId = item.faceId,
|
||||
// plateNumber = item.plateNumber
|
||||
// )
|
||||
// settingViewModel.bindPlate(bindParam) { pair ->
|
||||
// Log.d(TAG, "openPlate: state:${pair.first},msg:${pair.second.code},${pair.second.msg}")
|
||||
// }
|
||||
// }
|
||||
|
||||
private fun initArcView() {
|
||||
//在布局结束后才做初始化操作
|
||||
binding.dualCameraTexturePreviewRgb.getViewTreeObserver().addOnGlobalLayoutListener(this)
|
||||
@@ -347,7 +306,7 @@ class LoginByFaceActivity : BaseActivity<ActivityLoginFaceBinding>(),
|
||||
}
|
||||
|
||||
override fun onDestroy() {
|
||||
Timber.d("onDestroy")
|
||||
loadLogInfo("onDestroy")
|
||||
instance = null
|
||||
if (rgbCameraHelper != null) {
|
||||
rgbCameraHelper!!.release()
|
||||
@@ -357,8 +316,6 @@ class LoginByFaceActivity : BaseActivity<ActivityLoginFaceBinding>(),
|
||||
recognizeViewModel.destroy()
|
||||
|
||||
EventBus.getDefault().unregister(this)
|
||||
// countDownJob?.cancel()
|
||||
// checkFaceJob?.cancel()
|
||||
// getFaceScheduler?.shutdown()
|
||||
checkFaceScheduler?.shutdown()
|
||||
super.onDestroy()
|
||||
@@ -434,7 +391,7 @@ class LoginByFaceActivity : BaseActivity<ActivityLoginFaceBinding>(),
|
||||
displayOrientation: Int,
|
||||
isMirror: Boolean
|
||||
) {
|
||||
Timber.d("initRgbCamera Rgb onCameraOpened: cameraId = $cameraId, displayOrientation = $displayOrientation")
|
||||
loadLogInfo("initRgbCamera Rgb onCameraOpened: cameraId = $cameraId, displayOrientation = $displayOrientation")
|
||||
runOnUiThread({
|
||||
val previewSizeRgb = camera.getParameters().getPreviewSize()
|
||||
val layoutParams = adjustPreviewViewSize(
|
||||
@@ -442,9 +399,9 @@ class LoginByFaceActivity : BaseActivity<ActivityLoginFaceBinding>(),
|
||||
binding.dualCameraTexturePreviewRgb, binding.dualCameraFaceRectView,
|
||||
previewSizeRgb, displayOrientation, 0.6f
|
||||
)
|
||||
Timber.d("initRgbCamera previewSizeRgb = ${previewSizeRgb.width}-${previewSizeRgb.height}")
|
||||
Timber.d("initRgbCamera layoutParams = ${layoutParams.width}-${layoutParams.height}")
|
||||
Timber.d(
|
||||
loadLogInfo("initRgbCamera previewSizeRgb = ${previewSizeRgb.width}-${previewSizeRgb.height}")
|
||||
loadLogInfo("initRgbCamera layoutParams = ${layoutParams.width}-${layoutParams.height}")
|
||||
loadLogInfo(
|
||||
"initRgbCamera isMirror = ${isMirror}, isDrawRgbRectHorizontalMirror = ${
|
||||
ConfigUtil.isDrawRgbRectHorizontalMirror(
|
||||
context
|
||||
@@ -486,8 +443,6 @@ class LoginByFaceActivity : BaseActivity<ActivityLoginFaceBinding>(),
|
||||
currentPlateInfo = null
|
||||
currentUserId = null
|
||||
userFaceInfo = null
|
||||
// checkFaceJob?.cancel()
|
||||
// getFaceJob?.cancel()
|
||||
}
|
||||
recognizeViewModel.clearLeftFace(facePreviewInfoList)
|
||||
}
|
||||
@@ -552,7 +507,7 @@ class LoginByFaceActivity : BaseActivity<ActivityLoginFaceBinding>(),
|
||||
|
||||
|
||||
override fun onGlobalLayout() {
|
||||
Timber.d("onGlobalLayout")
|
||||
loadLogInfo("onGlobalLayout")
|
||||
binding.dualCameraTexturePreviewRgb.getViewTreeObserver().removeOnGlobalLayoutListener(this)
|
||||
// 请求权限
|
||||
checkCameraPermission()
|
||||
@@ -561,7 +516,7 @@ class LoginByFaceActivity : BaseActivity<ActivityLoginFaceBinding>(),
|
||||
private fun resumeCamera() {
|
||||
isRecognition = true
|
||||
if (rgbCameraHelper != null && rgbCameraHelper!!.isStopped) {
|
||||
Log.d(TAG, "collectFace,resumeCamera: ")
|
||||
loadLogInfo("collectFace,resumeCamera: ")
|
||||
rgbCameraHelper!!.start()
|
||||
}
|
||||
}
|
||||
@@ -620,7 +575,7 @@ class LoginByFaceActivity : BaseActivity<ActivityLoginFaceBinding>(),
|
||||
fun initCountTime() {
|
||||
countDownTimer = object : CountDownTimer(totalTimeInMillis, 1000) {
|
||||
override fun onTick(millisUntilFinished: Long) {
|
||||
Timber.d("initCountTime onTick = ${(millisUntilFinished / 1000).toInt()}")
|
||||
loadLogInfo("initCountTime onTick = ${(millisUntilFinished / 1000).toInt()}")
|
||||
binding.tvToInit.text = "${(millisUntilFinished / 1000).toInt() + 1}"
|
||||
}
|
||||
|
||||
@@ -639,40 +594,15 @@ class LoginByFaceActivity : BaseActivity<ActivityLoginFaceBinding>(),
|
||||
loadLogInfo("collectFace: -----------1,开始采集人脸,开始时间:${DateTimeUtils.getDateTimeString()}----------")
|
||||
if (isFirstOpen) return
|
||||
loadLogInfo("collectFace: ----------2,isFirstOpen=false-----------")
|
||||
// if (facePreviewInfoList.isNullOrEmpty()) {
|
||||
// loadLogInfo("collectFace: ----------3,未检测到人脸信息-----------")
|
||||
// return
|
||||
// }
|
||||
loadLogInfo("collectFace: ----------4,检测到人脸信息-----------")
|
||||
currentUserId = null
|
||||
userFaceInfo = null
|
||||
recognizeViewModel.updateRegisterStatus(REGISTER_STATUS_READY)
|
||||
loadLogInfo("collectFace: ----------5,人脸采集中-----------")
|
||||
// getFaceData { faceData ->
|
||||
// if (faceDataList.isNotEmpty()) {
|
||||
// return@getFaceData
|
||||
// }
|
||||
// faceDataList.add(faceData)
|
||||
//
|
||||
// checkFaceScheduler?.shutdown()
|
||||
// getFaceScheduler?.shutdown()
|
||||
// recognizeViewModel.updateRegisterStatus(RecognizeViewModel.REGISTER_STATUS_DONE)
|
||||
// Thread {
|
||||
//// val faceDao = FaceDatabase.getInstance(App.getContext()).faceDao()
|
||||
//// val entity = faceDao.queryByUserName(tempUserId)
|
||||
//// if (entity != null) {
|
||||
//// //已存在用户
|
||||
//// loadLogInfo("collectFace,saveFaceInfo: ----------9,数据库已存在该人脸数据-----------")
|
||||
//// return@Thread
|
||||
//// }
|
||||
// saveFaceInfo(faceData)
|
||||
// }.start()
|
||||
// }
|
||||
}
|
||||
|
||||
private fun sendFaceData(faceData: String) {
|
||||
loadLogInfo("collectFace,sendFaceData: ----------11,发生人脸数据-----------")
|
||||
Log.d(TAG, "collectFace,sendFaceData: ---------------------------")
|
||||
loadLogInfo("collectFace,sendFaceData: ----------11,发送人脸数据-----------")
|
||||
// 给某个客户端发送
|
||||
val jsonObject = JSONObject().also {
|
||||
it.put("type", "faceFeature")
|
||||
@@ -689,22 +619,6 @@ class LoginByFaceActivity : BaseActivity<ActivityLoginFaceBinding>(),
|
||||
checkFaceScheduler = Executors.newScheduledThreadPool(1)
|
||||
}
|
||||
|
||||
|
||||
private fun getFaceData(block: (String) -> Unit) {
|
||||
// getFaceScheduler?.scheduleWithFixedDelay(
|
||||
// {
|
||||
// getFaceDataBlock(block)
|
||||
// }, 5L, 5L, TimeUnit.MILLISECONDS
|
||||
// )
|
||||
// runBlocking {
|
||||
// getFaceJob = executor.startIntervalTask(5) {
|
||||
|
||||
// getFaceJob?.cancel()
|
||||
// checkFaceJob?.cancel()
|
||||
// }
|
||||
// }
|
||||
}
|
||||
|
||||
private fun getFaceDataBlock(block: (String) -> Unit) {
|
||||
if (userFaceInfo == null || userFaceInfo?.faceFeature?.featureData == null) {
|
||||
return
|
||||
@@ -713,49 +627,23 @@ class LoginByFaceActivity : BaseActivity<ActivityLoginFaceBinding>(),
|
||||
if (faceData.isNullOrBlank()) {
|
||||
return
|
||||
}
|
||||
loadLogInfo("collectFace,getFaceData: ----------7,拿到人脸取特征数据-----------")
|
||||
loadLogInfo("collectFace,getFaceData: ----------7,拿到人脸提取特征数据-----------")
|
||||
block(faceData)
|
||||
}
|
||||
|
||||
private var faceDataList: MutableList<String> = mutableListOf()
|
||||
|
||||
private fun loadLogInfo(msg: String) {
|
||||
Log.d(TAG, msg)
|
||||
// logAdapter.addData(msg)
|
||||
Timber.tag(TAG).d( msg)
|
||||
}
|
||||
|
||||
private var facePreviewInfoList: MutableList<FacePreviewInfo>? = null
|
||||
private var userFaceInfo: UserFaceInfo? = null
|
||||
private var countDownJob: Job? = null
|
||||
|
||||
// private var getFaceJob: Job? = null
|
||||
val executor = IntervalExecutor()
|
||||
private var currentUserId: String? = null
|
||||
private fun countDown() {
|
||||
// countDownJob = countDownByFlow(
|
||||
// total = 3,
|
||||
// scope = lifecycleScope,
|
||||
// onStart = {
|
||||
// binding.tvCollectState.text = "采集完成(3s)"
|
||||
// },
|
||||
// onTick = { seconds ->
|
||||
// binding.tvCollectState.text = "采集完成(${seconds}s)"
|
||||
// },
|
||||
// onFinish = {
|
||||
// //binding.tvCollectState.text = "采集完成"
|
||||
// currentUserId = null
|
||||
// binding.layoutState.invisible()
|
||||
//// binding.tvFaceTip.visible()
|
||||
// binding.btnCollectFace.visible()
|
||||
// }
|
||||
// )
|
||||
}
|
||||
|
||||
private fun saveFaceInfo(faceData: String) {
|
||||
try {
|
||||
// getFaceJob?.cancel()
|
||||
// checkFaceJob?.cancel()
|
||||
|
||||
sendFaceData(faceData)
|
||||
loadLogInfo("collectFace,saveFaceInfo: ----------12,人脸数据发送完成时间:${DateTimeUtils.getDateTimeString()}-----------")
|
||||
|
||||
@@ -782,12 +670,8 @@ class LoginByFaceActivity : BaseActivity<ActivityLoginFaceBinding>(),
|
||||
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}")
|
||||
// }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -796,8 +680,8 @@ class LoginByFaceActivity : BaseActivity<ActivityLoginFaceBinding>(),
|
||||
private var tcpClient: TcpClient? = null
|
||||
|
||||
private fun addSocketListener() {
|
||||
//val ipAddress = NetworkUtils.getIPAddress(true)
|
||||
//Log.d(TAG, "addSocketListener,ipAddress: $ipAddress");
|
||||
// val ipAddress = NetworkUtils.getIPAddress(true)
|
||||
// loadLogInfo( "addSocketListener,ipAddress: $ipAddress");
|
||||
tcpClient = TcpClient(
|
||||
"192.168.1.95",
|
||||
5000,
|
||||
@@ -810,25 +694,25 @@ class LoginByFaceActivity : BaseActivity<ActivityLoginFaceBinding>(),
|
||||
tcpClient?.setListener(object : TcpClientListenerImpl() {
|
||||
override fun onSendSuccess(json: JSONObject?) {
|
||||
super.onSendSuccess(json)
|
||||
loadLogInfo("TcpClientListener发送成功:$json")
|
||||
loadLogInfo("collectFace,TcpClientListener发送成功:$json")
|
||||
// toast("发送成功")
|
||||
}
|
||||
|
||||
override fun onSendFailed(json: JSONObject?, e: java.lang.Exception?) {
|
||||
super.onSendFailed(json, e)
|
||||
ToastUtils.showToast("发送失败${e?.message}")
|
||||
loadLogInfo("TcpClientListener人脸数据发送失败:${e?.message}")
|
||||
loadLogInfo("collectFace,TcpClientListener人脸数据发送失败:${e?.message}")
|
||||
}
|
||||
|
||||
override fun onMessage(json: JSONObject?) {
|
||||
super.onMessage(json)
|
||||
loadLogInfo("TcpClientListener收到消息:$json")
|
||||
loadLogInfo("collectFace,TcpClientListener收到消息:$json")
|
||||
val type = json?.getInt("type")
|
||||
// 根据服务端消息类型处理删除新增临时用户人脸数据---------------------
|
||||
when (type) {
|
||||
LanServer.TYPE_ADD_FACE_DATA -> {
|
||||
//采集设备id自己生成,不接收服务端的,在本地只判断是否存在同一人脸数据
|
||||
loadLogInfo("TcpClientListener收到消息,新增用户:采集设备id自己生成,不接收服务端的,在本地只判断是否存在同一人脸数据")
|
||||
loadLogInfo("collectFace,TcpClientListener收到消息,新增用户:采集设备id自己生成,不接收服务端的,在本地只判断是否存在同一人脸数据")
|
||||
}
|
||||
|
||||
LanServer.TYPE_CLEAR_FACE_DATA -> {
|
||||
@@ -839,7 +723,7 @@ class LoginByFaceActivity : BaseActivity<ActivityLoginFaceBinding>(),
|
||||
}
|
||||
}
|
||||
})
|
||||
tcpClient?.start();
|
||||
tcpClient?.start()
|
||||
|
||||
try {
|
||||
LanServer.getInstance().let {
|
||||
@@ -861,14 +745,13 @@ class LoginByFaceActivity : BaseActivity<ActivityLoginFaceBinding>(),
|
||||
val faceDao = FaceDatabase.getInstance(this).faceDao()
|
||||
faceDao.deleteTempUserFaceData()
|
||||
recognizeViewModel.refreshFaceList()
|
||||
loadLogInfo("TcpClientListener收到消息,已删除并刷新人脸数据")
|
||||
loadLogInfo("collectFace,TcpClientListener收到消息,已删除并刷新人脸数据")
|
||||
}.start()
|
||||
}
|
||||
|
||||
private val WAITING_TIME = 3 * 1000L
|
||||
private var checkStartTime = 0L
|
||||
|
||||
// private var checkFaceJob: Job? = null
|
||||
private fun checkFaceState() {
|
||||
checkStartTime = System.currentTimeMillis()
|
||||
|
||||
@@ -877,16 +760,11 @@ class LoginByFaceActivity : BaseActivity<ActivityLoginFaceBinding>(),
|
||||
checkFaceBlock()
|
||||
}, 5L, 5L, TimeUnit.MILLISECONDS
|
||||
)
|
||||
|
||||
// checkFaceJob = executor.startIntervalTask(5) {
|
||||
//
|
||||
// }
|
||||
}
|
||||
private var isCollectFace = false
|
||||
private fun checkFaceBlock() {
|
||||
Log.d("Login", "collectFace,currentUserId=${currentUserId}")
|
||||
loadLogInfo("collectFace,currentUserId=${currentUserId}")
|
||||
if (currentUserId.isNullOrBlank().not()) {
|
||||
// checkFaceJob?.cancel()
|
||||
isCollectFace = false
|
||||
|
||||
checkFaceScheduler?.shutdown()
|
||||
|
||||
@@ -660,6 +660,7 @@ public class FaceHelper implements FaceListener {
|
||||
}
|
||||
compareResult.setTrackId(trackId);
|
||||
boolean pass = compareResult.getSimilar() > recognizeConfiguration.getSimilarThreshold();
|
||||
Log.d(TAG, "collectFace,searchFace: pass="+pass+",similar="+compareResult.getSimilar()+",threshold="+recognizeConfiguration.getSimilarThreshold());
|
||||
recognizeCallback.onRecognized(compareResult, getRecognizeInfo(recognizeInfoMap, trackId).getLiveness(), pass);
|
||||
if (pass) {
|
||||
setName(trackId, "识别通过");
|
||||
|
||||
+10
-2
@@ -469,10 +469,18 @@ public class RecognizeViewModel extends ViewModel implements RecognizeCallback {
|
||||
}
|
||||
}
|
||||
|
||||
private String getUserId(CompareResult result){
|
||||
if (result != null && result.getFaceEntity() != null) {
|
||||
return result.getFaceEntity().getUserName();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRecognized(CompareResult compareResult, Integer live, boolean similarPass) {
|
||||
Disposable disposable = Observable.just(true).observeOn(AndroidSchedulers.mainThread()).subscribe(aBoolean -> {
|
||||
Log.d(TAG, "onRecognized: similarPass="+similarPass);
|
||||
// TODO: 2026/1/21 测试使用 Observable.just(similarPass)代替Observable.just(true)---
|
||||
Observable.just(similarPass).observeOn(AndroidSchedulers.mainThread()).subscribe(aBoolean -> {
|
||||
Log.d(TAG, "collectFace,onRecognized: similarPass="+similarPass+",live="+live+",userId="+getUserId(compareResult));
|
||||
if (similarPass) {
|
||||
recognizeUserId.postValue(compareResult);
|
||||
boolean isAdded = false;
|
||||
|
||||
Reference in New Issue
Block a user