处理人脸数据不同步

This commit is contained in:
mazengfei
2025-11-07 20:37:50 +08:00
parent 4231c68cdc
commit 5e4dc4baa4
8 changed files with 56 additions and 5 deletions
+2
View File
@@ -98,4 +98,6 @@ dependencies {
implementation(libs.core)
implementation(libs.android.core)
implementation("org.greenrobot:eventbus:3.3.1")
}
@@ -1,7 +1,12 @@
package com.sw.platecabinet.activity
import androidx.lifecycle.lifecycleScope
import com.sw.plate.utils.arcface.FaceApi
import com.sw.plate.utils.arcface.faceserver.FaceServer
import com.sw.platecabinet.databinding.ActivityInitBinding
import com.sw.platecabinet.databinding.ItemTitleTimeBinding
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
/**
* 待机界面
@@ -19,6 +24,14 @@ class InitActivity : BaseActivity<ActivityInitBinding>() {
binding.main.setOnClickListener {
finish()
}
// binding.takeButton.setOnClickListener {
//
// lifecycleScope.launch(Dispatchers.IO) {
// FaceApi().deleteByUserName("288")
// }
//
// finish()
// }
}
@@ -26,6 +26,7 @@ import com.sw.plate.utils.arcface.camera.DualCameraHelper
import com.sw.plate.utils.arcface.face.constants.LivenessType
import com.sw.plate.utils.arcface.face.model.FacePreviewInfo
import com.sw.plate.utils.arcface.face.model.RecognizeConfiguration
import com.sw.plate.utils.arcface.facedb.entity.FaceEntity
import com.sw.plate.utils.arcface.viewmodel.RecognizeViewModel
import com.sw.platecabinet.R
import com.sw.platecabinet.databinding.ActivityLoginFaceBinding
@@ -33,6 +34,9 @@ import com.sw.platecabinet.databinding.ItemTitleTimeBinding
import com.sw.platecabinet.model.response.EquipmentUserInfo
import com.sw.platecabinet.network.task.TaskManager
import com.sw.platecabinet.utils.PermissionHelper
import org.greenrobot.eventbus.EventBus
import org.greenrobot.eventbus.Subscribe
import org.greenrobot.eventbus.ThreadMode
import timber.log.Timber
/**
@@ -83,6 +87,8 @@ class LoginByFaceActivity : BaseActivity<ActivityLoginFaceBinding>(),
// TODO: 测试请求
TaskManager.startTask()
EventBus.getDefault().register(this)
}
private fun checkCameraPermission() {
@@ -101,6 +107,13 @@ class LoginByFaceActivity : BaseActivity<ActivityLoginFaceBinding>(),
permissionHelper.checkAndRequest()
}
@Subscribe(threadMode = ThreadMode.MAIN)
fun getFaceEntity(insertEntity: FaceEntity) {
Timber.tag("performSync").e("-time=%s", insertEntity.registerTime)
recognizeViewModel.addFace(insertEntity)
Timber.tag("performSync over").e("-time=%s", insertEntity.registerTime)
}
override fun onLeftDoubleClick() {
finish()
}
@@ -180,6 +193,7 @@ class LoginByFaceActivity : BaseActivity<ActivityLoginFaceBinding>(),
recognizeViewModel.destroy()
EventBus.getDefault().unregister(this)
super.onDestroy()
}
@@ -16,6 +16,7 @@ import com.sw.platecabinet.network.ApiClient
import com.sw.platecabinet.repository.RemoteRepository
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext
import org.greenrobot.eventbus.EventBus
import timber.log.Timber
class HeartBeatTask(appContext: Context, workerParams: WorkerParameters) :
@@ -84,11 +85,14 @@ class HeartBeatTask(appContext: Context, workerParams: WorkerParameters) :
}
} else if (it.faceType == "0") {
//新增人脸数据
val featureData = Base64.decode(it.faceFeatureString)
val featureData = Base64.decode(it.faceFeature)
val insertEntity = FaceEntity(it.userId, null, featureData)
val faceId = faceApi.insert(insertEntity)
insertEntity.faceId = faceId
faceServer.registerFaceFeatureInfoFromDb(insertEntity, faceEngine)
// faceServer.registerFaceFeatureInfoFromDb(insertEntity, faceEngine)
EventBus.getDefault().post(insertEntity)
// callback(insertEntity)
}
} catch (e: Exception) {
e.printStackTrace()
@@ -1,20 +1,34 @@
package com.sw.platecabinet.network.task
import androidx.lifecycle.LifecycleOwner
import androidx.work.ExistingWorkPolicy
import androidx.work.OneTimeWorkRequestBuilder
import androidx.work.WorkInfo
import androidx.work.WorkManager
import com.sw.plate.App
import java.util.concurrent.TimeUnit
object TaskManager {
private const val TASK_NAME = "SmartPlateCabinetTask"
// private var owner: LifecycleOwner?=null
// fun setOwner(owner: LifecycleOwner) {
// this.owner = owner
// }
fun startTask() {
val nextRequest = OneTimeWorkRequestBuilder<HeartBeatTask>()
.setInitialDelay(1, TimeUnit.MINUTES)
// .setInputData(inputData)
.build()
WorkManager.getInstance(App.getContext())
// .apply{
// getWorkInfoByIdLiveData(nextRequest.id)
// .observe(owner) { workInfo ->
// if (workInfo?.state == WorkInfo.State.SUCCEEDED) {
// val result = workInfo.outputData.getString("RESULT_KEY")
// // 使用返回的结果
// }
// }
// }
.enqueueUniqueWork(TASK_NAME, ExistingWorkPolicy.REPLACE, nextRequest)
}
+1 -1
View File
@@ -43,7 +43,7 @@
<!-- android:layout_marginTop="20dp"-->
<!-- android:src="@drawable/ic_init_press" />-->
<TextView
<TextView android:id="@+id/takeButton"
android:layout_width="wrap_content"
android:layout_height="60dp"
android:text="点击取盘"
@@ -33,6 +33,7 @@ import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
@@ -345,6 +346,7 @@ public class FaceServer {
*/
public void registerFaceFeatureInfoFromDb(FaceEntity faceEntity, FaceEngine faceEngine) {
if (faceEntity != null && faceEngine != null) {
Log.i(TAG, "registerFaceFeature:" + faceEntity.getFaceId()+"==="+ Arrays.toString(faceEntity.getFeatureData()));
FaceFeatureInfo faceFeatureInfo = new FaceFeatureInfo((int) faceEntity.getFaceId(), faceEntity.getFeatureData());
int res = faceEngine.registerFaceFeature(faceFeatureInfo);
Log.i(TAG, "registerFaceFeature:" + res);
@@ -337,9 +337,11 @@ public class RecognizeViewModel extends ViewModel implements RecognizeCallback {
}
public void addFace(FaceEntity faceEntity) {
if (frEngine != null)
if (frEngine != null) {
Log.e("performSync", "addFace=" + faceEntity.getRegisterTime());
FaceServer.getInstance().registerFaceFeatureInfoFromDb(faceEntity, frEngine);
}
}
public void refreshFaceList() {
FaceServer.getInstance().initFaceList(App.getContext(), frEngine, faceCount -> loadFaceList = true, true);