From 4a8ff39b0fab0627ef8f7459587d514cc01c3676 Mon Sep 17 00:00:00 2001
From: rk <94314517@qq.com>
Date: 星期一, 20 十月 2025 10:52:02 +0800
Subject: [PATCH] Merge branch 'wuhuyancao' of http://139.186.142.91:10010/r/productDev/dmvisit into wuhuyancao
---
keyCabinet-android/app/src/main/java/com/doumee/keyCabinet/ui/face/FaceActivity.java | 526 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 526 insertions(+), 0 deletions(-)
diff --git a/keyCabinet-android/app/src/main/java/com/doumee/keyCabinet/ui/face/FaceActivity.java b/keyCabinet-android/app/src/main/java/com/doumee/keyCabinet/ui/face/FaceActivity.java
new file mode 100644
index 0000000..a1e6dba
--- /dev/null
+++ b/keyCabinet-android/app/src/main/java/com/doumee/keyCabinet/ui/face/FaceActivity.java
@@ -0,0 +1,526 @@
+package com.doumee.keyCabinet.ui.face;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+
+import android.content.Context;
+import android.graphics.Bitmap;
+import android.hardware.Camera;
+import android.os.Bundle;
+import android.os.Handler;
+import android.os.Message;
+import android.text.TextUtils;
+import android.view.View;
+
+import com.baidu.idl.main.facesdk.model.BDFaceSDKCommon;
+import com.doumee.keyCabinet.MApplication;
+import com.doumee.keyCabinet.R;
+import com.doumee.keyCabinet.base.MyBaseActivity;
+import com.doumee.keyCabinet.databinding.FaceActivityBinding;
+import com.doumee.keyCabinet.event.TimeClockEvent;
+import com.doumee.keyCabinet.ui.keyCabinet.KeyCabinetActivity;
+import com.doumee.keyCabinet.utils.BraceletLogUtils;
+import com.doumee.keyCabinet.utils.face.FaceUtils;
+import com.doumee.keyCabinet.utils.face.model.SingleBaseConfig;
+import com.doumee.lib_coremodel.bean.event.ActionEventData;
+import com.doumee.lib_coremodel.util.SpUtil;
+import com.example.datalibrary.callback.CameraDataCallback;
+import com.example.datalibrary.callback.FaceDetectCallBack;
+import com.example.datalibrary.gatecamera.CameraPreviewManager;
+import com.example.datalibrary.gl.view.GlMantleSurfacView;
+import com.example.datalibrary.manager.FaceSDKManager;
+import com.example.datalibrary.model.BDFaceCheckConfig;
+import com.example.datalibrary.model.BDFaceImageConfig;
+import com.example.datalibrary.model.LivenessModel;
+import com.example.datalibrary.model.User;
+import com.example.datalibrary.utils.FaceOnDrawTexturViewUtil;
+
+import org.greenrobot.eventbus.Subscribe;
+
+import dagger.hilt.android.AndroidEntryPoint;
+
+@AndroidEntryPoint
+public class FaceActivity extends MyBaseActivity<FaceVM, FaceActivityBinding> implements View.OnClickListener{
+
+ /*鍥剧墖瓒婂ぇ锛屾�ц兘娑堣�楄秺澶э紝涔熷彲浠ラ�夋嫨640*480锛� 1280*720*/
+ private static final int PREFER_WIDTH = SingleBaseConfig.getBaseConfig().getRgbAndNirWidth();
+ private static final int PERFER_HEIGH = SingleBaseConfig.getBaseConfig().getRgbAndNirHeight();
+ private Context mContext;
+ private boolean isCompareCheck = true;
+
+ private User mUser;
+
+ private GlMantleSurfacView glMantleSurfacView;
+ private BDFaceImageConfig bdFaceImageConfig;
+ private BDFaceCheckConfig bdFaceCheckConfig;
+ //0锛氬彇锛�1锛氳繕
+ private int flag ;
+ private int status;
+
+ @Override
+ public int getLayoutId() {
+ return R.layout.face_activity;
+ }
+
+ @Override
+ public void initView(@Nullable Bundle savedInstanceState) {
+ isToGuild = false;
+ normalConfig();
+ getDB().setModel(getVM());
+ mContext = this;
+ flag = MApplication.getLoginBean().getFlag();
+ statusFsm(flag==0?0:2);
+ //todo wmf 瑙e紑
+ /*FaceSDKManager.getInstance().initDataBases(this);
+ initFaceCheck();*/
+ initView();
+ }
+
+ @Override
+ public void initData(@Nullable Bundle savedInstanceState) {
+ //getPermission();
+ }
+
+ @Override
+ protected void timeChange(String djs) {
+ getDB().tvDjs.setText(djs);
+ }
+
+ private void statusFsm(int toStatus){
+ status = toStatus;
+ switch (status){
+ case 0:
+ //鍙�-绠$悊鍛樹汉鑴搁獙璇�
+ getDB().clLogin.setVisibility(View.VISIBLE);
+ getDB().tvTitle.setText("绠$悊鍛樿韩浠介獙璇�");
+ getDB().vSl.setBackgroundResource(R.mipmap.ic_viewfinder);
+ getDB().tvTip.setText("璇蜂繚鎸佹鑴稿湪鍙栨櫙妗嗕腑锛屽苟鏍规嵁鎸囩ず瀹屾垚璇嗗埆");
+ getDB().clRemind.setVisibility(View.VISIBLE);
+ getDB().btSk.setVisibility(View.VISIBLE);
+
+ getDB().clSjRl.setVisibility(View.GONE);
+ getDB().clSjSk.setVisibility(View.GONE);
+ getDB().clTip1.setVisibility(View.GONE);
+ break;
+ case 1:
+ //鍙�-绠$悊鍛樺埛鍗¢獙璇�
+ getDB().clLogin.setVisibility(View.VISIBLE);
+ getDB().tvTitle.setText("绠$悊鍛樿韩浠介獙璇�");
+ getDB().vSl.setBackgroundResource(R.mipmap.ic_shuaka2);
+ getDB().tvTip.setText("璇峰皢IC鍗¤创杩戝埛鍗″尯锛屽仠鐣�1-2绉�");
+ getDB().clRemind.setVisibility(View.GONE);
+ getDB().btSk.setVisibility(View.GONE);
+
+ getDB().clSjRl.setVisibility(View.GONE);
+ getDB().clSjSk.setVisibility(View.VISIBLE);
+ getDB().clTip1.setVisibility(View.GONE);
+ break;
+ case 5:
+ //鍙�-鍙告満楠岃瘉鏂瑰紡閫夋嫨椤�
+ getDB().clLogin.setVisibility(View.VISIBLE);
+ getDB().tvTitle.setText("鍙告満韬唤楠岃瘉");
+ getDB().vSl.setBackgroundResource(R.mipmap.ic_face);
+ getDB().tvTip.setText("璇蜂繚鎸佹鑴稿湪鍙栨櫙妗嗕腑锛屽苟鏍规嵁鎸囩ず瀹屾垚璇嗗埆");
+ getDB().clRemind.setVisibility(View.VISIBLE);
+ getDB().btSk.setVisibility(View.GONE);
+
+ getDB().clSjRl.setVisibility(View.VISIBLE);
+ getDB().clSjSk.setVisibility(View.GONE);
+ getDB().clTip1.setVisibility(View.GONE);
+ break;
+ case 2:
+ //鍙�-鍙告満浜鸿劯楠岃瘉
+ getDB().clLogin.setVisibility(View.VISIBLE);
+ getDB().tvTitle.setText("鍙告満韬唤楠岃瘉");
+ getDB().vSl.setBackgroundResource(R.mipmap.ic_viewfinder);
+ getDB().tvTip.setText("璇蜂繚鎸佹鑴稿湪鍙栨櫙妗嗕腑锛屽苟鏍规嵁鎸囩ず瀹屾垚璇嗗埆");
+ getDB().clRemind.setVisibility(View.VISIBLE);
+ getDB().btSk.setVisibility(View.VISIBLE);
+
+ getDB().clSjRl.setVisibility(View.GONE);
+ getDB().clSjSk.setVisibility(View.GONE);
+ getDB().clTip1.setVisibility(View.GONE);
+ break;
+ case 3:
+ //鍙�-鍙告満鍒峰崱楠岃瘉
+ getDB().clLogin.setVisibility(View.VISIBLE);
+ getDB().tvTitle.setText("鍙告満韬唤楠岃瘉");
+ getDB().vSl.setBackgroundResource(R.mipmap.ic_shuaka2);
+ getDB().tvTip.setText("璇峰皢IC鍗¤创杩戝埛鍗″尯锛屽仠鐣�1-2绉�");
+ getDB().clRemind.setVisibility(View.GONE);
+ getDB().btSk.setVisibility(View.GONE);
+
+ getDB().clSjRl.setVisibility(View.GONE);
+ getDB().clSjSk.setVisibility(View.VISIBLE);
+ getDB().clTip1.setVisibility(View.GONE);
+ break;
+ case 4:
+ //鍙�-鍙告満閰掔簿妫�娴�
+ getDB().clLogin.setVisibility(View.VISIBLE);
+ getDB().tvTitle.setText("閰掔簿妫�娴�");
+ getDB().vSl.setBackgroundResource(R.mipmap.ic_jiujingjiance);
+ getDB().tvTip.setText("璇锋嬁璧烽厭绮炬娴嬩华鍚规皵");
+ getDB().clRemind.setVisibility(View.GONE);
+ getDB().btSk.setVisibility(View.GONE);
+
+ getDB().clSjRl.setVisibility(View.GONE);
+ getDB().clSjSk.setVisibility(View.GONE);
+ getDB().clTip1.setVisibility(View.GONE);
+ break;
+ case 6:
+ //鍙�-鍙告満閰掔簿妫�娴嬪け璐�
+ getDB().clTip1.setVisibility(View.VISIBLE);
+ break;
+ case 7:
+ //杩�-鍙告満浜鸿劯楠岃瘉
+ getDB().clLogin.setVisibility(View.VISIBLE);
+ getDB().tvTitle.setText("鍙告満韬唤楠岃瘉");
+ getDB().vSl.setBackgroundResource(R.mipmap.ic_viewfinder);
+ getDB().tvTip.setText("璇蜂繚鎸佹鑴稿湪鍙栨櫙妗嗕腑锛屽苟鏍规嵁鎸囩ず瀹屾垚璇嗗埆");
+ getDB().clRemind.setVisibility(View.VISIBLE);
+ getDB().btSk.setVisibility(View.VISIBLE);
+
+ getDB().clSjSk.setVisibility(View.GONE);
+ getDB().clSjRl.setVisibility(View.GONE);
+ getDB().clTip1.setVisibility(View.GONE);
+ break;
+ case 8:
+ //杩�-鍙告満鍒峰崱楠岃瘉
+ getDB().clLogin.setVisibility(View.VISIBLE);
+ getDB().tvTitle.setText("鍙告満韬唤楠岃瘉");
+ getDB().vSl.setBackgroundResource(R.mipmap.ic_shuaka2);
+ getDB().tvTip.setText("璇峰皢IC鍗¤创杩戝埛鍗″尯锛屽仠鐣�1-2绉�");
+ getDB().clRemind.setVisibility(View.GONE);
+ getDB().btSk.setVisibility(View.GONE);
+
+ getDB().clSjSk.setVisibility(View.VISIBLE);
+ getDB().clSjRl.setVisibility(View.GONE);
+ getDB().clTip1.setVisibility(View.GONE);
+ break;
+ default:
+ break;
+ }
+ }
+
+ private Bitmap bitmap;
+ private byte[] secondFeature = new byte[512];
+ @Override
+ protected void doRegister(int type, ActionEventData data) {
+ switch (type){
+ case 1:
+ //鍒囨崲鍒板埛鍗�
+ if("0".equals(flag)){
+ if(status==0){
+ statusFsm(1);
+ }else if(status==2){
+ statusFsm(3);
+ }
+ }else {
+ statusFsm(8);
+ }
+ break;
+ case 2:
+ //鍒囨崲鍙告満鍒峰崱
+ statusFsm(3);
+ break;
+ case 3:
+ //鍒囨崲鍙告満浜鸿劯
+ statusFsm(2);
+ break;
+ case 4:
+ //鍒囨崲鍒颁汉鑴�
+ if("0".equals(flag)){
+ if(status==1){
+ statusFsm(5);
+ }else if(status==3){
+ statusFsm(6);
+ }
+ }else {
+ startActivity(KeyCabinetActivity.class);
+ finish();
+ }
+
+ //todo wmf
+ //statusFsm("0".equals(flag)?);
+ break;
+ case 5:
+ startActivity(KeyCabinetActivity.class);
+ finish();
+ break;
+ default:
+ break;
+ }
+ }
+
+ private void initFaceConfig(int height , int width){
+ bdFaceImageConfig = new BDFaceImageConfig(height , width ,
+ SingleBaseConfig.getBaseConfig().getRgbDetectDirection(),
+ SingleBaseConfig.getBaseConfig().getMirrorDetectRGB() ,
+ BDFaceSDKCommon.BDFaceImageType.BDFACE_IMAGE_TYPE_YUV_NV21);
+ }
+ private void initFaceCheck(){
+ bdFaceCheckConfig = FaceUtils.getInstance().getBDFaceCheckConfig();
+ }
+
+ /**
+ * View
+ */
+ private void initView() {
+ getDB().faceDetectImageView.setVisibility(View.GONE);
+
+ glMantleSurfacView = findViewById(R.id.camera_textureview);
+ glMantleSurfacView.initSurface(SingleBaseConfig.getBaseConfig().getRgbRevert(),
+ SingleBaseConfig.getBaseConfig().getMirrorVideoRGB() , SingleBaseConfig.getBaseConfig().isOpenGl());
+ CameraPreviewManager.getInstance().startPreview(glMantleSurfacView,
+ SingleBaseConfig.getBaseConfig().getRgbVideoDirection() , PREFER_WIDTH, PERFER_HEIGH);
+
+ }
+
+ @Override
+ protected void onResume() {
+ super.onResume();
+ //todo wmf 瑙e紑
+ //startTestOpenDebugRegisterFunction();
+ }
+
+ private void startTestOpenDebugRegisterFunction() {
+ if(SingleBaseConfig.getBaseConfig().getRBGCameraId()==-1){
+ if(!TextUtils.isEmpty(SpUtil.getString("rbgCameraId"))) {
+ SingleBaseConfig.getBaseConfig().setRBGCameraId(Integer.parseInt(SpUtil.getString("rbgCameraId")));
+ }
+ }
+ if (SingleBaseConfig.getBaseConfig().getRBGCameraId() != -1) {
+ BraceletLogUtils.saveLog("浣跨敤鐩告満("+SingleBaseConfig.getBaseConfig().getRBGCameraId()+")");
+ CameraPreviewManager.getInstance().setCameraFacing(SingleBaseConfig.getBaseConfig().getRBGCameraId());
+ } else {
+ BraceletLogUtils.saveLog("浣跨敤鐩告満("+CameraPreviewManager.CAMERA_USB+")");
+ CameraPreviewManager.getInstance().setCameraFacing(CameraPreviewManager.CAMERA_USB);
+ }
+ int[] cameraSize = CameraPreviewManager.getInstance().initCamera(new CameraPreviewManager.ErrInfoCallBack() {
+ @Override
+ public void err(String errInfo) {
+ BraceletLogUtils.saveLog(errInfo);
+ }
+ });
+ initFaceConfig(cameraSize[1] , cameraSize[0]);
+ isPause = true;
+ count = 60;
+ CameraPreviewManager.getInstance().setmCameraDataCallback(dataCallback);
+ }
+
+ private CameraDataCallback dataCallback = new CameraDataCallback() {
+ @Override
+ public void onGetCameraData(byte[] data, Camera camera, int width, int height) {
+ if(!isFinishing()){
+ //isCheckFace = true;
+ handler.sendEmptyMessageDelayed(1,4000);
+ glMantleSurfacView.setFrame();
+ bdFaceImageConfig.setData(data);
+ //蹇呴』浼氬憳
+ String groupId = "0";
+ FaceSDKManager.getInstance().onDetectCheck(groupId,bdFaceImageConfig, null, null,
+ bdFaceCheckConfig, faceDetectCallBack);
+ }
+ }
+ };
+ //private boolean isCheckFace;
+ private FaceDetectCallBack faceDetectCallBack = new FaceDetectCallBack() {
+ @Override
+ public void onFaceDetectCallback(LivenessModel livenessModel) {
+ //System.out.println("==isOk==>onFaceDetectCallback");
+ //System.out.println("==rgbInstance==>onFaceDetectCallback "+livenessModel);
+ // 寮�鍙戞ā寮�
+ //isCheckFace = false;
+ if(handler.hasMessages(1)){
+ handler.removeMessages(1);
+ }
+ checkOpenDebugResult(livenessModel);
+ }
+
+ @Override
+ public void onTip(int code, String msg) {
+ getDB().clFail.setVisibility(View.VISIBLE);
+ getDB().tv4.setText(msg);
+ handler.sendEmptyMessageDelayed(0,1000);
+ System.out.println("==isOk==>onTip:"+msg);
+ }
+
+ @Override
+ public void onFaceDetectDarwCallback(LivenessModel livenessModel) {
+ //System.out.println("==rgbInstance==>onFaceDetectDarwCallback");
+ if (isCompareCheck) {
+ getDB().clFail.setVisibility(View.VISIBLE);
+ getDB().tv4.setText(getString(R.string.face_tip2));
+ handler.sendEmptyMessageDelayed(0,1000);
+ }
+ // 缁樺埗浜鸿劯妗�
+ showFrame(livenessModel);
+
+ }
+ };
+
+ private boolean isPause = false;
+ public void showFrame(LivenessModel livenessModel){
+ if(isFinishing()){
+ return;
+ }
+ if (livenessModel == null){
+ return;
+ }
+
+ if (isPause){
+ glMantleSurfacView.onGlDraw(livenessModel.getTrackFaceInfo() ,
+ livenessModel.getBdFaceImageInstance() ,
+ FaceOnDrawTexturViewUtil.drawFaceColor(mUser , livenessModel));
+ }
+ }
+
+ private Handler handler = new Handler(){
+ @Override
+ public void handleMessage(@NonNull Message msg) {
+ switch (msg.what){
+ case 0:
+ getDB().clFail.setVisibility(View.GONE);
+ break;
+ case 1:
+ //isCheckFace = false;
+ break;
+ }
+ }
+ };
+
+ @Override
+ protected void onRestart() {
+ super.onRestart();
+ isTimePause = false;
+ isToChose = false;
+ count = 120;
+ }
+
+ private int count = 120;
+ private boolean isTimePause = false;
+ @Subscribe
+ public void TimeClockEvent(TimeClockEvent event) {
+ if (!isFinishing()&&!isTimePause) {
+ if (count > 0) {
+ count--;
+ if (count == 0) {
+ finish();
+ return;
+ }
+ }
+ }
+ }
+
+ @Override
+ protected void onDestroy() {
+ super.onDestroy();
+ handler.removeCallbacksAndMessages(null);
+ handler = null;
+ dataCallback = null;
+ //CameraPreviewManager.getInstance().destroy();
+ faceDetectCallBack = null;
+ glMantleSurfacView = null;
+ //todo wmf 瑙e紑
+ //FaceSDKManager.getInstance().destroy();
+ }
+
+ private int resultCount = 0;
+ // ***************寮�鍙戞ā寮忕粨鏋滆緭鍑�*************
+ private void checkOpenDebugResult(final LivenessModel livenessModel) {
+ if(isFinishing()){
+ return;
+ }
+ if(handler==null){
+ return;
+ }
+ // 褰撴湭妫�娴嬪埌浜鸿劯UI鏄剧ず
+ runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ if (livenessModel == null) {
+ if (isCompareCheck) {
+ getDB().clFail.setVisibility(View.VISIBLE);
+ getDB().tv4.setText(getString(R.string.face_tip2));
+ handler.sendEmptyMessageDelayed(0,1000);
+ }
+ System.out.println("======>浜鸿劯璇嗗埆澶辫触");
+ return;
+ }
+ if (livenessModel.isQualityCheck()){
+ //鏄惁閫氳繃璐ㄩ噺妫�娴�
+ if (isCompareCheck) {
+ getDB().clFail.setVisibility(View.VISIBLE);
+ getDB().tv4.setText(getString(R.string.face_tip2));
+ handler.sendEmptyMessageDelayed(0,1000);
+ }
+ } else {
+ User user = livenessModel.getUser();
+ if (user == null) {
+ mUser = null;
+ if (isCompareCheck) {
+ getDB().clFail.setVisibility(View.VISIBLE);
+ getDB().tv4.setText(getString(R.string.face_tip2));
+ handler.sendEmptyMessageDelayed(0,1000);
+ }
+
+ } else {
+ //浼樺厛浼氬憳
+ if("0".equals(user.getGroupId())){
+11
+ }else {
+ if (isCompareCheck) {
+ getDB().clFail.setVisibility(View.VISIBLE);
+ getDB().tv4.setText(getString(R.string.face_tip2));
+ handler.sendEmptyMessageDelayed(0,1000);
+ }
+ resultCount++;
+ if (resultCount >= 3) {
+ resultCount = 0;
+ }else {
+ return;
+ }
+ }
+ mUser = user;
+ if (isCompareCheck) {
+ getDB().clFail.setVisibility(View.GONE);
+ if(handler.hasMessages(0)) {
+ handler.removeMessages(0);
+ }
+ /*textHuanying.setVisibility(View.GONE);
+ userNameLayout.setVisibility(View.VISIBLE);
+ nameImage.setImageResource(R.mipmap.ic_tips_gate_success);
+ nameText.setTextColor(Color.parseColor("#0dc6ff"));
+ nameText.setText(FileUtils.spotString(user.getUserName()) + " 娆㈣繋鎮�");*/
+ }
+ if(!isToChose) {
+ isToChose = true;
+ //璇嗗埆鎴愬姛锛岃烦杞�
+ Bundle bundle = new Bundle();
+ bundle.putString("busId", user.getUserId());
+ bundle.putString("type", "0");
+ //Toast.makeText(mContext, user.getUserName(), Toast.LENGTH_SHORT).show();
+ //startActivity(ChoseTicketActivity.class, bundle);
+ }
+ }
+ }
+ }
+ });
+ }
+
+ boolean isToChose = false;
+
+ @Override
+ public void onClick(View v) {
+
+ }
+
+ @Override
+ protected void onPause() {
+ super.onPause();
+ isPause = false;
+ isTimePause = true;
+ //todo wmf 瑙e紑
+ //CameraPreviewManager.getInstance().stopPreview();
+ }
+}
\ No newline at end of file
--
Gitblit v1.9.3