|
|
@ -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; |
|
|
|
} |
|
|
|
} |
|
|
|