Browse Source

camera best fix

dev
MTing 3 weeks ago
parent
commit
dbc45572e9
  1. 33
      app/src/main/java/com/ouxuan/oxface/OXFaceOnlineActivity.java
  2. 2
      financelibrary/src/main/java/com/baidu/idl/face/main/finance/manager/FaceSDKManager.java
  3. 8
      financelibrary/src/main/java/com/baidu/idl/face/main/finance/model/BaseConfig.java

33
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 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 int frameCounter = 0;
private boolean needSendFaceImage = false; // 是否需要将人脸图片转为base64发送 private boolean needSendFaceImage = false; // 是否需要将人脸图片转为base64发送
private long lastProcessTime = 0; private long lastProcessTime = 0;
private long lastBackgroundProcessTime = 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帧处理一次 private static final int FAST_PROCESS_FRAME_INTERVAL = 3; // 快速处理频率每3帧处理一次
@ -286,6 +286,11 @@ public class OXFaceOnlineActivity extends BaseActivity implements View.OnClickLi
isFaceDetected = false; isFaceDetected = false;
consecutiveNoFaceCount = 0; 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) if (ContextCompat.checkSelfPermission(this, android.Manifest.permission.CAMERA)
!= PackageManager.PERMISSION_GRANTED) { != PackageManager.PERMISSION_GRANTED) {
@ -1228,18 +1233,20 @@ public class OXFaceOnlineActivity extends BaseActivity implements View.OnClickLi
// 只有当满足处理条件时才进行人脸检测 // 只有当满足处理条件时才进行人脸检测
if (frameCounter % PROCESS_FRAME_INTERVAL == 0 && if (frameCounter % PROCESS_FRAME_INTERVAL == 0 &&
(currentTime - lastProcessTime) > MIN_PROCESS_INTERVAL) { (currentTime - lastProcessTime) > MIN_PROCESS_INTERVAL) {
Log.d(TAG, "满足条件: 0000000:"+isNeedCamera);
lastProcessTime = currentTime; lastProcessTime = currentTime;
// Log.d(TAG, "onGetCameraData: 666:"+FaceSDKManager.initStatus+"帧数阈值:"+SingleBaseConfig.getBaseConfig().getFramesThreshold()); // 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, FaceSDKManager.getInstance().onDetectCheck(data, null, null,
height, width, 1, new FaceDetectCallBack() { height, width, 1, new FaceDetectCallBack() {
@ -1286,6 +1293,7 @@ public class OXFaceOnlineActivity extends BaseActivity implements View.OnClickLi
} }
}); });
} else if (frameCounter % 30 == 0) { } else if (frameCounter % 30 == 0) {
Log.e(TAG, "每30帧清空一次画布: 11111:");
// 对于跳过处理的帧每30帧清空一次画布确保无人脸时画面干净 // 对于跳过处理的帧每30帧清空一次画布确保无人脸时画面干净
try { try {
LivenessModel emptyModel = new LivenessModel(); LivenessModel emptyModel = new LivenessModel();
@ -1296,6 +1304,7 @@ public class OXFaceOnlineActivity extends BaseActivity implements View.OnClickLi
} }
} }
}else{ }else{
Log.e(TAG, "不满足条件: 0000000:");
android.util.Log.d("OXFace", "isNeedCamera: false"); android.util.Log.d("OXFace", "isNeedCamera: false");
} }
} catch (Exception e) { } catch (Exception e) {
@ -1875,7 +1884,7 @@ public class OXFaceOnlineActivity extends BaseActivity implements View.OnClickLi
liveStatus = false; liveStatus = false;
layoutCompareStatus.setVisibility(View.VISIBLE); layoutCompareStatus.setVisibility(View.VISIBLE);
textCompareStatus.setTextColor(Color.parseColor("#fec133")); textCompareStatus.setTextColor(Color.parseColor("#fec133"));
textCompareStatus.setText("请尝试移动人脸到屏幕正中");
textCompareStatus.setText("请尝试移动后识别");
return; return;
} }
} }

2
financelibrary/src/main/java/com/baidu/idl/face/main/finance/manager/FaceSDKManager.java

@ -855,7 +855,7 @@ public class FaceSDKManager {
try { try {
if(deviceType == 6){ if(deviceType == 6){
Log.e("FaceSDKManager", "switchCamera--第7批"); Log.e("FaceSDKManager", "switchCamera--第7批");
// SingleBaseConfig.getBaseConfig().setVideoDirection(90);
SingleBaseConfig.getBaseConfig().setVideoDirection(90);
SingleBaseConfig.getBaseConfig().setRgbVideoDirection(90); SingleBaseConfig.getBaseConfig().setRgbVideoDirection(90);
SingleBaseConfig.getBaseConfig().setDetectDirection(270); SingleBaseConfig.getBaseConfig().setDetectDirection(270);
SingleBaseConfig.getBaseConfig().setRgbDetectDirection(270); SingleBaseConfig.getBaseConfig().setRgbDetectDirection(270);

8
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 // 0:奥比中光海燕大白640*400
// 1:奥比中光海燕ProAtlas400*640 // 1:奥比中光海燕ProAtlas400*640
@ -166,16 +166,16 @@ public class BaseConfig {
private int mirrorNIR = 0; private int mirrorNIR = 0;
// 是否开启属性检测 // 是否开启属性检测
private boolean attribute = false;
private boolean attribute = true;
// rgb和nir摄像头宽 // rgb和nir摄像头宽
private int rgbAndNirWidth = 640; private int rgbAndNirWidth = 640;
// rgb和nir摄像头高 // rgb和nir摄像头高
private int rgbAndNirHeight = 480; private int rgbAndNirHeight = 480;
// depth摄像头宽 // depth摄像头宽
private int depthWidth = 640;
private int depthWidth = 1280; //640
// depth摄像头高 // depth摄像头高
private int depthHeight = 400;
private int depthHeight = 800; //400
// 是否开启最优人脸检测 // 是否开启最优人脸检测
private boolean usingBestImage = true; private boolean usingBestImage = true;

Loading…
Cancel
Save