From 9fd376183a9ded69df7b4a841503c4e6f273cca9 Mon Sep 17 00:00:00 2001 From: MTing Date: Thu, 11 Sep 2025 14:37:46 +0800 Subject: [PATCH] add initPadSettingConfig --- .../oxface/data/DeviceSelectDataManager.java | 30 ++++ .../ouxuan/oxface/utils/InitPadSettingConfig.java | 172 +++++++++++++++++++++ .../main/java/io/dcloud/oxplugin/FaceWXModule.java | 28 +++- 3 files changed, 224 insertions(+), 6 deletions(-) create mode 100644 app/src/main/java/com/ouxuan/oxface/utils/InitPadSettingConfig.java diff --git a/app/src/main/java/com/ouxuan/oxface/data/DeviceSelectDataManager.java b/app/src/main/java/com/ouxuan/oxface/data/DeviceSelectDataManager.java index 307fbc2..37d7ecd 100644 --- a/app/src/main/java/com/ouxuan/oxface/data/DeviceSelectDataManager.java +++ b/app/src/main/java/com/ouxuan/oxface/data/DeviceSelectDataManager.java @@ -9,6 +9,7 @@ import com.google.gson.JsonObject; import com.google.gson.JsonParser; import com.ouxuan.oxface.network.api.PadApiService; import com.ouxuan.oxface.network.model.ApiResponse; +import com.ouxuan.oxface.utils.InitPadSettingConfig; /** * 设备选择数据管理器 @@ -377,6 +378,9 @@ public class DeviceSelectDataManager { if (apiResponseCode > 0 || (apiResponseDataJson != null && !apiResponseDataJson.isEmpty())) { Log.d(TAG, "从本地存储恢复API响应数据成功"); + + // 初始化Pad设置配置 + initPadSettingConfig(); } // 如果有API响应数据但没有faceLicense,尝试从响应数据中提取 @@ -397,6 +401,32 @@ public class DeviceSelectDataManager { } /** + * 初始化Pad设置配置 + */ + private void initPadSettingConfig() { + try { + if (apiResponseDataJson != null && !apiResponseDataJson.isEmpty()) { + PadApiService.PadSelectResponse response = gson.fromJson(apiResponseDataJson, PadApiService.PadSelectResponse.class); + if (response != null && response.getPadConfig() != null && response.getPadConfig().getExtension() != null) { + PadApiService.PadExtension extension = response.getPadConfig().getExtension(); + if (extension.getPadSetting() != null) { + PadApiService.PadSetting padSetting = extension.getPadSetting(); + // 初始化Pad设置配置工具类 + InitPadSettingConfig.getInstance().initPadSetting(padSetting); + Log.d(TAG, "Pad设置配置初始化成功"); + } else { + Log.w(TAG, "Pad设置配置为空"); + } + } else { + Log.w(TAG, "Pad配置或扩展信息为空"); + } + } + } catch (Exception e) { + Log.e(TAG, "初始化Pad设置配置失败: " + e.getMessage(), e); + } + } + + /** * 打印选择信息到日志 */ private void logSelectInfo() { diff --git a/app/src/main/java/com/ouxuan/oxface/utils/InitPadSettingConfig.java b/app/src/main/java/com/ouxuan/oxface/utils/InitPadSettingConfig.java new file mode 100644 index 0000000..e64eccc --- /dev/null +++ b/app/src/main/java/com/ouxuan/oxface/utils/InitPadSettingConfig.java @@ -0,0 +1,172 @@ +package com.ouxuan.oxface.utils; + +import android.util.Log; + +import com.baidu.idl.face.main.finance.model.SingleBaseConfig; +import com.baidu.idl.face.main.finance.utils.FinanceConfigUtils; +import com.ouxuan.oxface.network.api.PadApiService; + +/** + * Pad设置配置初始化工具类 + * 用于解析pad_setting配置并应用到百度SDK配置中 + */ +public class InitPadSettingConfig { + private static final String TAG = "InitPadSettingConfig"; + + // 单例实例 + private static volatile InitPadSettingConfig instance; + + // Pad设置配置数据 + private PadApiService.PadSetting padSetting; + + private InitPadSettingConfig() { + // 私有构造函数 + } + + /** + * 获取InitPadSettingConfig单例实例 + * @return InitPadSettingConfig实例 + */ + public static InitPadSettingConfig getInstance() { + if (instance == null) { + synchronized (InitPadSettingConfig.class) { + if (instance == null) { + instance = new InitPadSettingConfig(); + } + } + } + return instance; + } + + /** + * 初始化Pad设置配置 + * @param padSetting Pad设置配置数据 + */ + public void initPadSetting(PadApiService.PadSetting padSetting) { + this.padSetting = padSetting; + applyPadSettingConfig(); + } + + /** + * 应用Pad设置配置到百度SDK + */ + private void applyPadSettingConfig() { + if (padSetting == null) { + Log.w(TAG, "Pad设置配置为空,无法应用配置"); + return; + } + + try { + // 应用活体检测配置 + applyLivingControlConfig(); + + // 应用摄像头角度配置 + applyCameraAngleConfig(); + + // 可以继续添加其他配置项的处理 + + Log.d(TAG, "Pad设置配置应用成功"); + } catch (Exception e) { + Log.e(TAG, "应用Pad设置配置失败: " + e.getMessage(), e); + } + } + + /** + * 应用活体检测配置 + */ + private void applyLivingControlConfig() { + try { + boolean livingControl = padSetting.isLivingControl(); + Log.d(TAG, "应用活体检测配置: livingControl=" + livingControl); + + // 设置活体检测开关 + SingleBaseConfig.getBaseConfig().setLivingControl(livingControl); + + // 根据活体检测开关设置类型 + if (livingControl) { + // 开启活体检测,设置为RGB活体检测(类型1) + SingleBaseConfig.getBaseConfig().setType(1); + } else { + // 关闭活体检测 + SingleBaseConfig.getBaseConfig().setType(0); + } + + // 保存配置到文件 + FinanceConfigUtils.modityJson(); + + Log.d(TAG, "活体检测配置应用成功: type=" + SingleBaseConfig.getBaseConfig().getType() + + ", livingControl=" + SingleBaseConfig.getBaseConfig().isLivingControl()); + } catch (Exception e) { + Log.e(TAG, "应用活体检测配置失败: " + e.getMessage(), e); + } + } + + /** + * 应用摄像头角度配置 + */ + private void applyCameraAngleConfig() { + try { + int deviceType = padSetting.getDeviceType(); + Log.d(TAG, "应用摄像头角度配置: deviceType=" + deviceType); + + // 根据设备类型设置摄像头角度 + if (deviceType != 5) { + Log.d(TAG, "非第6批设备,设置摄像头角度为270度"); + SingleBaseConfig.getBaseConfig().setVideoDirection(270); + SingleBaseConfig.getBaseConfig().setRgbVideoDirection(270); + SingleBaseConfig.getBaseConfig().setMirrorDetectRGB(0); + } else { + Log.d(TAG, "第6批设备,设置摄像头角度为90度"); + SingleBaseConfig.getBaseConfig().setVideoDirection(90); + SingleBaseConfig.getBaseConfig().setRgbVideoDirection(90); + SingleBaseConfig.getBaseConfig().setMirrorDetectRGB(1); + } + + // 保存配置到文件 + FinanceConfigUtils.modityJson(); + + Log.d(TAG, "摄像头角度配置应用成功: videoDirection=" + SingleBaseConfig.getBaseConfig().getVideoDirection() + + ", rgbVideoDirection=" + SingleBaseConfig.getBaseConfig().getRgbVideoDirection() + + ", mirrorDetectRGB=" + SingleBaseConfig.getBaseConfig().getMirrorDetectRGB()); + } catch (Exception e) { + Log.e(TAG, "应用摄像头角度配置失败: " + e.getMessage(), e); + } + } + + /** + * 获取Pad设置配置 + * @return Pad设置配置数据 + */ + public PadApiService.PadSetting getPadSetting() { + return padSetting; + } + + /** + * 检查是否已初始化 + * @return true如果已初始化 + */ + public boolean isInitialized() { + return padSetting != null; + } + + // ==================== 可添加的其他配置项方法 ==================== + + /* + * 以下是可以根据需要添加的其他配置项处理方法: + * + * 1. 门禁控制相关配置 + * 2. 摄像头配置相关 + * 3. 检测参数配置 + * 4. 其他设备特定配置 + * + * 示例: + * + * private void applyGateControlConfig() { + * // 处理门禁控制相关配置 + * } + * + * private void applyCameraConfig() { + * // 处理摄像头配置相关配置 + * } + */ +} \ No newline at end of file diff --git a/oxplugin_padface/src/main/java/io/dcloud/oxplugin/FaceWXModule.java b/oxplugin_padface/src/main/java/io/dcloud/oxplugin/FaceWXModule.java index 58f2c7d..222cdf5 100644 --- a/oxplugin_padface/src/main/java/io/dcloud/oxplugin/FaceWXModule.java +++ b/oxplugin_padface/src/main/java/io/dcloud/oxplugin/FaceWXModule.java @@ -51,6 +51,7 @@ import io.dcloud.oxplugin.util.HuaWeiScan; import io.dcloud.oxplugin.util.LedControl; import io.dcloud.oxplugin.util.ProcessMemoryUtil; import io.dcloud.oxplugin.OXFaceRGBFinanceActivityOnline; +import com.ouxuan.oxface.utils.InitPadSettingConfig; public class FaceWXModule extends UniModule { @@ -601,12 +602,27 @@ import io.dcloud.oxplugin.OXFaceRGBFinanceActivityOnline; int living_type = Integer.parseInt(options.getString("living_type")); - if(living_type == 1){ -// SingleBaseConfig.getBaseConfig().setType(1); - SingleBaseConfig.getBaseConfig().setLivingControl(true); - }else { -// SingleBaseConfig.getBaseConfig().setType(0); - SingleBaseConfig.getBaseConfig().setLivingControl(false); + // 使用InitPadSettingConfig工具类来处理活体检测配置 + InitPadSettingConfig padSettingConfig = InitPadSettingConfig.getInstance(); + if (padSettingConfig.isInitialized()) { + // 获取当前的Pad设置配置 + com.ouxuan.oxface.network.api.PadApiService.PadSetting currentPadSetting = padSettingConfig.getPadSetting(); + if (currentPadSetting != null) { + // 更新活体检测配置 + currentPadSetting.setLivingControl(living_type == 1); + + // 应用配置 + padSettingConfig.initPadSetting(currentPadSetting); + } + } else { + // 如果没有初始化,则直接设置百度SDK配置 + if(living_type == 1){ + SingleBaseConfig.getBaseConfig().setLivingControl(true); + SingleBaseConfig.getBaseConfig().setType(1); + } else { + SingleBaseConfig.getBaseConfig().setLivingControl(false); + SingleBaseConfig.getBaseConfig().setType(0); + } } GateConfigUtils.modityJson(); //修改配置文件内容并重新读取配置