1、新增图片与视频活体检测

2、新增人脸属性识别(性别、年龄、口罩、姿态、眼睛状态)
3、优化检测返回与包结构
4、新增 dependencyManagement 统一依赖版本管理
This commit is contained in:
dengwenjie
2025-05-09 20:10:04 +08:00
parent 42d2943a94
commit bef574cb91
63 changed files with 3266 additions and 382 deletions

View File

@@ -0,0 +1,77 @@
package cn.smartjavaai.face.config;
import cn.smartjavaai.common.enums.DeviceEnum;
import cn.smartjavaai.face.enums.FaceAttributeModelEnum;
import lombok.Data;
/**
* 人脸属性识别模型配置
* @author dwj
*/
@Data
public class FaceAttributeConfig {
/**
* 人脸属性识别模型枚举
*/
private FaceAttributeModelEnum modelEnum = FaceAttributeModelEnum.SEETA_FACE6_MODEL;
/**
* 模型路径
*/
private String modelPath;
/**
* 设备类型
*/
private DeviceEnum device;
/**
* gpu设备ID 当device为GPU时生效
*/
private int gpuId = 0;
/**
* 是否启用年龄检测
*/
private boolean enableAge = true;
/**
* 是否启用性别检测
*/
private boolean enableGender = true;
/**
* 是否启用人脸姿态检测
*/
private boolean enableHeadPose = true;
/**
* 是否启用眼睛状态检测
*/
private boolean enableEyeStatus = true;
/**
* 是否启用口罩检测
*/
private boolean enableMask = true;
public FaceAttributeConfig() {
}
public FaceAttributeConfig(FaceAttributeModelEnum modelEnum) {
this.modelEnum = modelEnum;
}
public FaceAttributeConfig(FaceAttributeModelEnum modelEnum, String modelPath) {
this.modelEnum = modelEnum;
this.modelPath = modelPath;
}
public FaceAttributeConfig(String modelPath) {
this.modelPath = modelPath;
}
}

View File

@@ -0,0 +1,38 @@
package cn.smartjavaai.face.config;
import lombok.Data;
/**
* 人脸特征提取配置
* @author dwj
* @date 2025/4/24
*/
@Data
public class FaceExtractConfig {
/**
* 是否裁剪人脸
*/
private boolean cropFace = true;
/**
* 是否对齐人脸
*/
private boolean align = true;
/**
* 人脸检测模型配置
*/
private FaceModelConfig detectModelConfig;
public FaceExtractConfig() {
}
public FaceExtractConfig(boolean cropFace, boolean align, FaceModelConfig detectModelConfig) {
this.cropFace = cropFace;
this.align = align;
this.detectModelConfig = detectModelConfig;
}
}

View File

@@ -0,0 +1,66 @@
package cn.smartjavaai.face.config;
import cn.smartjavaai.common.enums.DeviceEnum;
import cn.smartjavaai.face.constant.FaceDetectConstant;
import cn.smartjavaai.face.enums.FaceModelEnum;
import lombok.Data;
/**
* 人脸检测识别模型配置
* @author dwj
*/
@Data
public class FaceModelConfig {
/**
* 人脸算法名称
*/
private FaceModelEnum modelEnum;
/**
* 置信度阈值
*/
private double confidenceThreshold = FaceDetectConstant.DEFAULT_CONFIDENCE_THRESHOLD;
/**
* 相似度阈值 作用:判断是否为同一人脸
*/
private double similarityThreshold = 0D;
/**
* 非极大抑制阈值 作用:消除重叠检测框,保留最优结果
*/
private double nmsThresh = FaceDetectConstant.NMS_THRESHOLD;
/**
* 模型路径
*/
private String modelPath;
/**
* 人脸库路径
*/
private String faceDbPath;
/**
* 设备类型
*/
private DeviceEnum device;
/**
* gpu设备ID 当device为GPU时生效
*/
private int gpuId = 0;
public FaceModelConfig() {
}
public FaceModelConfig(FaceModelEnum modelEnum) {
this.modelEnum = modelEnum;
}
public FaceModelConfig(FaceModelEnum modelEnum, String modelPath) {
this.modelEnum = modelEnum;
this.modelPath = modelPath;
}
}

View File

@@ -0,0 +1,67 @@
package cn.smartjavaai.face.config;
import cn.smartjavaai.common.enums.DeviceEnum;
import cn.smartjavaai.face.constant.FaceDetectConstant;
import cn.smartjavaai.face.constant.LivenessConstant;
import cn.smartjavaai.face.enums.FaceModelEnum;
import cn.smartjavaai.face.enums.LivenessModelEnum;
import lombok.Data;
/**
* 活体检测模型配置
* @author dwj
*/
@Data
public class LivenessConfig {
/**
* 活体检测模型枚举
*/
private LivenessModelEnum modelEnum = LivenessModelEnum.SEETA_FACE6_MODEL;
/**
* 模型路径
*/
private String modelPath;
/**
* 设备类型
*/
private DeviceEnum device;
/**
* gpu设备ID 当device为GPU时生效
*/
private int gpuId = 0;
/**
* 人脸清晰度阈值
*/
private float faceClarityThreshold = LivenessConstant.DEFAULT_FACE_CLARITY_THRESHOLD;
/**
* 活体阈值
*/
private float realityThreshold = LivenessConstant.DEFAULT_REALITY_THRESHOLD;
/**
* 视频检测帧数
*/
private int frameCount = LivenessConstant.DEFAULT_FRAME_COUNT;
public LivenessConfig() {
}
public LivenessConfig(LivenessModelEnum modelEnum) {
this.modelEnum = modelEnum;
}
public LivenessConfig(LivenessModelEnum modelEnum, String modelPath) {
this.modelEnum = modelEnum;
this.modelPath = modelPath;
}
public LivenessConfig(String modelPath) {
this.modelPath = modelPath;
}
}