All Downloads are FREE. Search and download functionalities are using the official Maven repository.

net.gdface.cassdk.CasConfig Maven / Gradle / Ivy

package net.gdface.cassdk;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.StringTokenizer;

import net.gdface.utils.ConfigUtils;
import net.gdface.utils.Configuration;
import net.gdface.utils.FaceUtilits;

/**
 * CASSDK配置参数管理
* 类初始化时要加载conf/cassdk.properties文件,加载顺序为:
* 1.调用{@link ClassLoader#getResource(String)}方法在class所在位置查找conf/cassdk.properties
* 2.如果class在jar包中,则尝试读取在jar所在位置../conf/cassdk.properties,tomcat下即为WEB-INF/conf/cassdk.properties
* 3.user.dir下查找conf/cassdk.properties加载配置
* 后面的配置变量会覆盖前面的定义
* {@link JniBridge}会在静态初始化时读取此类的配置用于初始化JNI接口
* 如果需要重新设置参数需要{@link JniBridge}加载前调用设置property的系列方法(如{@link #setProperty(String, String)}
* 设置参数才有效 * @author guyadong * */ public class CasConfig extends Configuration { private static final long serialVersionUID = 5861262246470501912L; /** 当前CASSDK版本号 */ private static Version version; private static Configuration instance=new Configuration(); private static final String CONF_FOLDER="conf"; private static final String HOME_FOLDER= ".cassdk"; private static final String PROP_FILE="cassdk.properties"; public static final String PROP_MIN_FACE_SIZE="THFI_Param.nMinFaceSize"; public static final String PROP_ROLL_ANGLE="THFI_Param.nRollAngle"; public static final String PROP_CHANNEL_NUM_DETECT="nChannelNum.detect"; public static final String PROP_CHANNEL_NUM_FEATURE="nChannelNum.feature"; public static final String PROP_MAX_DETECT_FACE_NUM="nMaxDetectFaceNum"; public static final String PROP_SAMPLESIZE="nSampleSize"; public static final String PROP_DEVICE_ID = "nDeviceID"; public static final String PROP_GPU_MODE="gpuMode"; public static final String PROP_CASSDK_VERSION = "version"; public static final String PROP_LICENSECODE = "licenseCode"; /** * 默认最小人脸尺寸 */ public static final int DEFAULT_MIN_FACE_SIZE=50; /** * 默认人脸角度 */ public static final int DEFAULT_ROLL_ANGLE=30; /** * 默认通道数 */ public static final int DEFAULT_CHANNEL_NUM=Runtime.getRuntime().availableProcessors(); /** * 默认最大检测人脸数目 */ public static final int DEFAULT_MAX_DETECT_FACE_NUM=256; /** * 默认图像归一化尺寸 */ public static final int DEFAULT_SAMPLE_SIZE=640; /** * 默认GPU设备ID */ public static final int DEFAULT_DEVICE_ID=0; /** * 默认运行模式 */ public static final boolean DEFAULT_GPU_MODE = false; static{ instance.putAll(ConfigUtils.loadAllProperties(PROP_FILE, CONF_FOLDER, null, CasConfig.class, false)); instance.putAll(ConfigUtils.loadPropertiesInUserHome(HOME_FOLDER + "/" + PROP_FILE)); } /** * @return instance */ public static Configuration getInstance() { return instance; } /** * 获取最小检测人脸尺寸
* 如果参数表中没找到 {@value #PROP_MIN_FACE_SIZE},则返回 {@value #DEFAULT_MIN_FACE_SIZE} * @param size */ public static int getMinFaceSize(){ return instance.getPropertyInteger(PROP_MIN_FACE_SIZE, DEFAULT_MIN_FACE_SIZE); } /** * 获取人脸角度
* 如果参数表中没找到 {@value #PROP_ROLL_ANGLE},则返回 {@value #DEFAULT_ROLL_ANGLE} */ public static int getRollAngle(){ return instance.getPropertyInteger(PROP_ROLL_ANGLE,DEFAULT_ROLL_ANGLE); } /** * 如果 {@value #PROP_CHANNEL_NUM_DETECT}未定义则使用默认值 {@value #DEFAULT_CHANNEL_NUM} * @return 返回人脸检测初始化通道数 */ public static int getDetectChannelNum(){ // GPU模式下通道数只能为1 return isGpuMode() ? 1 : instance.getPropertyInteger(PROP_CHANNEL_NUM_DETECT,DEFAULT_CHANNEL_NUM); } /** * 如果 {@value #PROP_CHANNEL_NUM_FEATURE}未定义则使用默认值 {@value #DEFAULT_CHANNEL_NUM} * @return 返回特征提取初始化通道数 */ public static int getFeatureChannelNum(){ // GPU模式下通道数只能为1 return isGpuMode() ? 1 : instance.getPropertyInteger(PROP_CHANNEL_NUM_FEATURE,DEFAULT_CHANNEL_NUM); } /** * 设置特征提取和人脸检测通道数
* SDK初始化前调用才生效
* 调用{@link #saveConfig()}保存到配置文件才能在下次启动时生效 * @param channelNum */ public static void setChannelNum(int channelNum){ instance.setPropertyInteger(PROP_CHANNEL_NUM_DETECT, channelNum); instance.setPropertyInteger(PROP_CHANNEL_NUM_FEATURE, channelNum); } /** * 如果 {@value #PROP_MAX_DETECT_FACE_NUM}未定义则使用默认值 {@value #DEFAULT_MAX_DETECT_FACE_NUM} * @return 返回最大可检测人脸数目 */ public static int getMaxDetectFaceNum(){ return instance.getPropertyInteger(PROP_MAX_DETECT_FACE_NUM,DEFAULT_MAX_DETECT_FACE_NUM); } /** * 如果 {@value #PROP_SAMPLESIZE}未定义则使用默认值 {@value #DEFAULT_SAMPLE_SIZE} * @return */ public static int getSampleSize(){ return instance.getPropertyInteger(PROP_SAMPLESIZE,DEFAULT_SAMPLE_SIZE); } /** * 如果 {@value #PROP_DEVICE_ID}未定义则使用默认值 {@value #DEFAULT_DEVICE_ID} * @return */ public static int getDeviceID(){ return instance.getPropertyInteger(PROP_DEVICE_ID,DEFAULT_DEVICE_ID); } /** * 如果 {@value #PROP_GPU_MODE}未定义则使用默认值 {@value #DEFAULT_GPU_MODE} * @return */ public static boolean isGpuMode(){ return instance.getPropertyBoolean(PROP_GPU_MODE,DEFAULT_GPU_MODE); } /** * 返回配置文件中保存的授权码,如果没有返回{@code null} * @return */ public static String getLicenseCode(){ return instance.getProperty(PROP_LICENSECODE); } /** * 设置授权码
* SDK初始化前调用才生效
* 调用{@link #saveConfig()}保存到配置文件才能在下次启动时生效 * @param licenseCode */ public static void setLicenseCode(String licenseCode){ if(null != licenseCode && !licenseCode.isEmpty()){ instance.setProperty(PROP_LICENSECODE, licenseCode); } } /** * 保存license code到配置文件,只需要在SDK安装时调用一次,不需要每次程序启动都调用
* 也可以将获取的license code手工写到 {@code ${user.home}/.cassdk/cassdk.properties}中,格式如下 *
	 * licenseCode=xxxxxxx
	 * 
getExplodedStringAsList(String value) { ArrayList al = new ArrayList(); if (value == null) { return al; } StringTokenizer st = new StringTokenizer(value, " ,;\t\n\r\f"); while (st.hasMoreTokens()) { al.add(st.nextToken().trim()); } return al; } /** * 从配置文件(properties)读取版本号{@value #PROP_CASSDK_VERSION} * @return */ public synchronized static Version getVersion(){ if(null == version){ String value = instance.getProperty(PROP_CASSDK_VERSION); version = Version.cast(value); } return version; } /** * 设置CASSDK初始化参数
* 参数名称(key)参见{@link CasConfig}中所有{@code PROP_}前缀的常量 * @param properties 为{@code null}时忽略 */ public synchronized static void setConfig(Map properties){ if(null != properties){ instance.putAll(properties); instance.list(System.out); } } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy