餐盘柜优化
This commit is contained in:
@@ -13,13 +13,12 @@ import android.view.ViewGroup
|
||||
import android.view.ViewTreeObserver
|
||||
import androidx.activity.viewModels
|
||||
import androidx.annotation.RequiresApi
|
||||
import androidx.fragment.app.viewModels
|
||||
import androidx.lifecycle.Observer
|
||||
import androidx.lifecycle.lifecycleScope
|
||||
import com.arcsoft.face.ErrorInfo
|
||||
import com.google.gson.Gson
|
||||
import com.sw.platecabinet.socket.TcpClientListenerImpl
|
||||
import com.sw.inbound.utils.DateTimeUtils
|
||||
import com.sw.inbound.utils.GsonUtils
|
||||
import com.sw.plate.App
|
||||
import com.sw.plate.utils.Base64
|
||||
import com.sw.plate.utils.ToastUtils
|
||||
@@ -40,6 +39,7 @@ 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 com.sw.platecabinet.GlobalData
|
||||
import com.sw.platecabinet.MyApp
|
||||
import com.sw.platecabinet.R
|
||||
import com.sw.platecabinet.databinding.ActivityLoginFaceBinding
|
||||
@@ -47,19 +47,21 @@ import com.sw.platecabinet.databinding.ItemTitleTimeBinding
|
||||
import com.sw.platecabinet.ext.gone
|
||||
import com.sw.platecabinet.ext.invisible
|
||||
import com.sw.platecabinet.ext.visible
|
||||
import com.sw.platecabinet.model.request.BindParam
|
||||
import com.sw.platecabinet.model.response.EquipmentUserInfo
|
||||
import com.sw.platecabinet.socket.LanServer
|
||||
import com.sw.platecabinet.socket.LanServerListenerImpl
|
||||
import com.sw.platecabinet.socket.TcpClient
|
||||
import com.sw.platecabinet.utils.IntervalExecutor
|
||||
import com.sw.platecabinet.utils.PermissionHelper
|
||||
import com.sw.platecabinet.utils.PlateUtils
|
||||
import com.sw.platecabinet.utils.SpTool
|
||||
import com.sw.platecabinet.utils.countDownByFlow
|
||||
import com.sw.platecabinet.viewmodel.SettingViewModel
|
||||
import kotlinx.coroutines.Job
|
||||
import kotlinx.coroutines.runBlocking
|
||||
import org.greenrobot.eventbus.EventBus
|
||||
import org.greenrobot.eventbus.Subscribe
|
||||
import org.greenrobot.eventbus.ThreadMode
|
||||
import org.json.JSONObject
|
||||
import timber.log.Timber
|
||||
|
||||
/**
|
||||
@@ -67,7 +69,7 @@ import timber.log.Timber
|
||||
*/
|
||||
class LoginByFaceActivity : BaseActivity<ActivityLoginFaceBinding>(),
|
||||
ViewTreeObserver.OnGlobalLayoutListener {
|
||||
private val recognizeViewModel by viewModels<RecognizeViewModel>()
|
||||
// private val recognizeViewModel by viewModels<RecognizeViewModel>()
|
||||
private var countDownTimer: CountDownTimer? = null
|
||||
|
||||
private val CAMERA_PERMISSION_REQUEST_CODE = 100
|
||||
@@ -97,6 +99,7 @@ class LoginByFaceActivity : BaseActivity<ActivityLoginFaceBinding>(),
|
||||
override fun initialize() {
|
||||
instance = this
|
||||
viewModel.activeEngine()
|
||||
addSocketListener()
|
||||
|
||||
initCountTime()
|
||||
initArcViewModel()
|
||||
@@ -106,15 +109,6 @@ class LoginByFaceActivity : BaseActivity<ActivityLoginFaceBinding>(),
|
||||
//viewModel.generateToken()
|
||||
// viewModel.activeEngine()
|
||||
|
||||
// TODO: 暂时注释人脸接口数据,测试本地采集
|
||||
// viewModel.getUserFaceCache()
|
||||
// Thread {
|
||||
// val faceDao = FaceDatabase.getInstance(App.getContext()).faceDao();
|
||||
// faceDao.deleteAll()
|
||||
// faceDao.resetId()
|
||||
// }.start()
|
||||
|
||||
|
||||
// binding.llToPwd.setOnClickListener {
|
||||
// val intent = Intent(this, LoginByPwdActivity::class.java)
|
||||
// startActivity(intent)
|
||||
@@ -124,7 +118,9 @@ class LoginByFaceActivity : BaseActivity<ActivityLoginFaceBinding>(),
|
||||
|
||||
EventBus.getDefault().register(this)
|
||||
|
||||
binding.btnCollectFace.setOnClickListener { collectFace() }
|
||||
// binding.btnCollectFace.setOnClickListener { collectFace() }
|
||||
|
||||
checkFaceState()
|
||||
}
|
||||
|
||||
private fun checkCameraPermission() {
|
||||
@@ -310,7 +306,7 @@ class LoginByFaceActivity : BaseActivity<ActivityLoginFaceBinding>(),
|
||||
|
||||
EventBus.getDefault().unregister(this)
|
||||
countDownJob?.cancel()
|
||||
|
||||
checkFaceJob?.cancel()
|
||||
super.onDestroy()
|
||||
}
|
||||
|
||||
@@ -565,7 +561,8 @@ class LoginByFaceActivity : BaseActivity<ActivityLoginFaceBinding>(),
|
||||
return
|
||||
}
|
||||
if (currentUserId != null) {
|
||||
ToastUtils.showToast("您已采集过人脸信息")
|
||||
currentUserId = null
|
||||
// ToastUtils.showToast("您已采集过人脸信息")
|
||||
return
|
||||
}
|
||||
currentUserId = null
|
||||
@@ -574,16 +571,16 @@ class LoginByFaceActivity : BaseActivity<ActivityLoginFaceBinding>(),
|
||||
//showWaitingDialog("人脸信息中……")
|
||||
|
||||
// binding.tvFaceTip.gone()
|
||||
binding.btnCollectFace.invisible()
|
||||
binding.layoutState.visible()
|
||||
binding.pbCollectLoading.visible()
|
||||
binding.tvCollectState.text = "采集中......"
|
||||
// binding.btnCollectFace.invisible()
|
||||
// binding.layoutState.visible()
|
||||
// binding.pbCollectLoading.visible()
|
||||
// binding.tvCollectState.text = "采集中......"
|
||||
getFaceData { faceData ->
|
||||
Log.d("LoginByFaceActivity", "faceData: $faceData")
|
||||
runOnUiThread {
|
||||
//hideWaitingDialog()
|
||||
//toast("人脸信息已采集")
|
||||
binding.pbCollectLoading.gone()
|
||||
// binding.pbCollectLoading.gone()
|
||||
//binding.tvCollectState.text = "采集完成"
|
||||
userFaceInfo = null
|
||||
countDown()
|
||||
@@ -617,23 +614,23 @@ class LoginByFaceActivity : BaseActivity<ActivityLoginFaceBinding>(),
|
||||
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()
|
||||
}
|
||||
)
|
||||
// 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) {
|
||||
@@ -649,13 +646,91 @@ class LoginByFaceActivity : BaseActivity<ActivityLoginFaceBinding>(),
|
||||
}
|
||||
FaceDatabase.getInstance(this).faceDao().insert(faceEntity)
|
||||
recognizeViewModel.refreshFaceList();
|
||||
runOnUiThread {
|
||||
ToastUtils.showToast("你的人脸信息已采集")
|
||||
}
|
||||
// runOnUiThread {
|
||||
// ToastUtils.showToast("你的人脸信息已采集")
|
||||
// }
|
||||
} catch (e: Exception) {
|
||||
e.printStackTrace()
|
||||
}
|
||||
}.start()
|
||||
}
|
||||
private var tcpClient: TcpClient? = null
|
||||
|
||||
private fun addSocketListener() {
|
||||
//val ipAddress = NetworkUtils.getIPAddress(true)
|
||||
//Log.d(TAG, "addSocketListener,ipAddress: $ipAddress");
|
||||
tcpClient = TcpClient(
|
||||
"192.168.1.95",
|
||||
5000,
|
||||
GlobalData.deviceId, // clientId
|
||||
5000, // connectTimeoutMs
|
||||
10 * 1000, // heartbeatIntervalMs
|
||||
30 * 1000 // heartbeatTimeoutMs
|
||||
)
|
||||
|
||||
tcpClient?.setListener(object : TcpClientListenerImpl() {
|
||||
override fun onSendSuccess(json: JSONObject?) {
|
||||
super.onSendSuccess(json)
|
||||
// toast("发送成功")
|
||||
}
|
||||
|
||||
override fun onSendFailed(json: JSONObject?, e: java.lang.Exception?) {
|
||||
super.onSendFailed(json, e)
|
||||
ToastUtils.showToast("发送失败${e?.message}")
|
||||
}
|
||||
|
||||
override fun onMessage(json: JSONObject?) {
|
||||
super.onMessage(json)
|
||||
|
||||
val type = json?.getInt("type")
|
||||
// 根据服务端消息类型处理删除新增临时用户人脸数据---------------------
|
||||
when (type) {
|
||||
LanServer.TYPE_ADD_FACE_DATA -> {
|
||||
//采集设备id自己生成,不接收服务端的,在本地只判断是否存在同一人脸数据
|
||||
}
|
||||
LanServer.TYPE_CLEAR_FACE_DATA -> {
|
||||
clearFaceData()
|
||||
}
|
||||
else-> {}
|
||||
}
|
||||
}
|
||||
})
|
||||
tcpClient?.start();
|
||||
|
||||
try {
|
||||
LanServer.getInstance().let {
|
||||
it.setListener(object : LanServerListenerImpl() {
|
||||
override fun onMessageReceived(clientId: String?, message: JSONObject?) {
|
||||
super.onMessageReceived(clientId, message)
|
||||
ToastUtils.showToast("收到消息clientId=$clientId")
|
||||
}
|
||||
})
|
||||
it.start()
|
||||
}
|
||||
} catch (e: Exception) {
|
||||
e.printStackTrace()
|
||||
}
|
||||
}
|
||||
|
||||
private fun clearFaceData() {
|
||||
Thread {
|
||||
val faceDao = FaceDatabase.getInstance(this).faceDao()
|
||||
faceDao.deleteTempUserFaceData()
|
||||
recognizeViewModel.refreshFaceList();
|
||||
}.start()
|
||||
}
|
||||
private val WAITING_TIME = 5 * 1000L
|
||||
private var checkStartTime = 0L
|
||||
private var checkFaceJob: Job?=null
|
||||
private fun checkFaceState() {
|
||||
checkFaceJob = executor.startIntervalTask(5) {
|
||||
if (System.currentTimeMillis() - checkStartTime >= WAITING_TIME && currentUserId.isNullOrBlank()) {
|
||||
checkFaceJob?.cancel()
|
||||
//超过5秒采集人脸并识别
|
||||
collectFace()
|
||||
return@startIntervalTask
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user