From dbc45572e9e66dc57a5414ef03c8ee7bdfc901c1 Mon Sep 17 00:00:00 2001 From: MTing Date: Fri, 26 Sep 2025 11:32:02 +0800 Subject: [PATCH] camera best fix --- .../com/ouxuan/oxface/OXFaceOnlineActivity.java | 33 ++++++++++++++-------- .../face/main/finance/manager/FaceSDKManager.java | 2 +- .../idl/face/main/finance/model/BaseConfig.java | 8 +++--- 3 files changed, 26 insertions(+), 17 deletions(-) diff --git a/app/src/main/java/com/ouxuan/oxface/OXFaceOnlineActivity.java b/app/src/main/java/com/ouxuan/oxface/OXFaceOnlineActivity.java index 8bfc264..e2449a0 100644 --- a/app/src/main/java/com/ouxuan/oxface/OXFaceOnlineActivity.java +++ b/app/src/main/java/com/ouxuan/oxface/OXFaceOnlineActivity.java @@ -84,12 +84,12 @@ public class OXFaceOnlineActivity extends BaseActivity implements View.OnClickLi private static final int PERFER_HEIGH = SingleBaseConfig.getBaseConfig().getRgbAndNirHeight(); // 新增控制变量 - private static int PROCESS_FRAME_INTERVAL = 10; // 降低处理频率,每隔10帧处理一次 + private static int PROCESS_FRAME_INTERVAL = 3; // 快速处理频率,每隔3帧处理一次 private int frameCounter = 0; private boolean needSendFaceImage = false; // 是否需要将人脸图片转为base64发送 private long lastProcessTime = 0; private long lastBackgroundProcessTime = 0; // 应用在后台时的最后处理时间 - private static long MIN_PROCESS_INTERVAL = 1000; // 增加最小处理间隔至1秒 + private static long MIN_PROCESS_INTERVAL = 300; // 快速处理间隔300ms // 智能调节处理频率的控制变量 private static final int FAST_PROCESS_FRAME_INTERVAL = 3; // 快速处理频率:每3帧处理一次 @@ -286,6 +286,11 @@ public class OXFaceOnlineActivity extends BaseActivity implements View.OnClickLi isFaceDetected = false; consecutiveNoFaceCount = 0; + // 初始化处理频率为快速模式,避免启动时的延迟 + PROCESS_FRAME_INTERVAL = FAST_PROCESS_FRAME_INTERVAL; + MIN_PROCESS_INTERVAL = FAST_MIN_PROCESS_INTERVAL; + LogManager.logInfo(TAG, "初始化处理频率:每" + PROCESS_FRAME_INTERVAL + "帧,最小间隔" + MIN_PROCESS_INTERVAL + "ms"); + // 检查并请求相机权限 if (ContextCompat.checkSelfPermission(this, android.Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) { @@ -1228,18 +1233,20 @@ public class OXFaceOnlineActivity extends BaseActivity implements View.OnClickLi // 只有当满足处理条件时才进行人脸检测 if (frameCounter % PROCESS_FRAME_INTERVAL == 0 && (currentTime - lastProcessTime) > MIN_PROCESS_INTERVAL) { + + Log.d(TAG, "满足条件: 0000000:"+isNeedCamera); lastProcessTime = currentTime; // Log.d(TAG, "onGetCameraData: 666:"+FaceSDKManager.initStatus+"帧数阈值:"+SingleBaseConfig.getBaseConfig().getFramesThreshold()); // 检查应用是否处于前台 - if (!isApplicationInForeground()) { - - // 如果应用在后台,减少处理频率,每隔10秒处理一次 - if ((currentTime - lastBackgroundProcessTime) < 10000) { - return; - } - lastBackgroundProcessTime = currentTime; - } - Log.d(TAG, "isApplicationInForeground: 777:"+isApplicationInForeground()); +// if (!isApplicationInForeground()) { +// +// // 如果应用在后台,减少处理频率,每隔10秒处理一次 +// if ((currentTime - lastBackgroundProcessTime) < 10000) { +// return; +// } +// lastBackgroundProcessTime = currentTime; +// } +// Log.d(TAG, "isApplicationInForeground: 777:"+isApplicationInForeground()); FaceSDKManager.getInstance().onDetectCheck(data, null, null, height, width, 1, new FaceDetectCallBack() { @@ -1286,6 +1293,7 @@ public class OXFaceOnlineActivity extends BaseActivity implements View.OnClickLi } }); } else if (frameCounter % 30 == 0) { + Log.e(TAG, "每30帧清空一次画布: 11111:"); // 对于跳过处理的帧,每30帧清空一次画布,确保无人脸时画面干净 try { LivenessModel emptyModel = new LivenessModel(); @@ -1296,6 +1304,7 @@ public class OXFaceOnlineActivity extends BaseActivity implements View.OnClickLi } } }else{ + Log.e(TAG, "不满足条件: 0000000:"); android.util.Log.d("OXFace", "isNeedCamera: false"); } } catch (Exception e) { @@ -1875,7 +1884,7 @@ public class OXFaceOnlineActivity extends BaseActivity implements View.OnClickLi liveStatus = false; layoutCompareStatus.setVisibility(View.VISIBLE); textCompareStatus.setTextColor(Color.parseColor("#fec133")); - textCompareStatus.setText("请尝试移动人脸到屏幕正中"); + textCompareStatus.setText("请尝试移动后识别"); return; } } diff --git a/financelibrary/src/main/java/com/baidu/idl/face/main/finance/manager/FaceSDKManager.java b/financelibrary/src/main/java/com/baidu/idl/face/main/finance/manager/FaceSDKManager.java index d3f1597..7828381 100644 --- a/financelibrary/src/main/java/com/baidu/idl/face/main/finance/manager/FaceSDKManager.java +++ b/financelibrary/src/main/java/com/baidu/idl/face/main/finance/manager/FaceSDKManager.java @@ -855,7 +855,7 @@ public class FaceSDKManager { try { if(deviceType == 6){ Log.e("FaceSDKManager", "switchCamera--第7批"); - // SingleBaseConfig.getBaseConfig().setVideoDirection(90); + SingleBaseConfig.getBaseConfig().setVideoDirection(90); SingleBaseConfig.getBaseConfig().setRgbVideoDirection(90); SingleBaseConfig.getBaseConfig().setDetectDirection(270); SingleBaseConfig.getBaseConfig().setRgbDetectDirection(270); diff --git a/financelibrary/src/main/java/com/baidu/idl/face/main/finance/model/BaseConfig.java b/financelibrary/src/main/java/com/baidu/idl/face/main/finance/model/BaseConfig.java index edd8ee1..cc4f70f 100644 --- a/financelibrary/src/main/java/com/baidu/idl/face/main/finance/model/BaseConfig.java +++ b/financelibrary/src/main/java/com/baidu/idl/face/main/finance/model/BaseConfig.java @@ -147,7 +147,7 @@ public class BaseConfig { } // 帧数阈值 - private int framesThreshold = 5; + private int framesThreshold = 1; // 0:奥比中光海燕、大白(640*400) // 1:奥比中光海燕Pro、Atlas(400*640) @@ -166,16 +166,16 @@ public class BaseConfig { private int mirrorNIR = 0; // 是否开启属性检测 - private boolean attribute = false; + private boolean attribute = true; // rgb和nir摄像头宽 private int rgbAndNirWidth = 640; // rgb和nir摄像头高 private int rgbAndNirHeight = 480; // depth摄像头宽 - private int depthWidth = 640; + private int depthWidth = 1280; //640 // depth摄像头高 - private int depthHeight = 400; + private int depthHeight = 800; //400 // 是否开启最优人脸检测 private boolean usingBestImage = true;