FaceEngineConfig.java 3.25 KB
package com.ruoyi.config;

import com.arcsoft.face.ActiveFileInfo;
import com.arcsoft.face.EngineConfiguration;
import com.arcsoft.face.FaceEngine;
import com.arcsoft.face.FunctionConfiguration;
import com.arcsoft.face.enums.DetectMode;
import com.arcsoft.face.enums.DetectOrient;
import com.arcsoft.face.enums.ErrorInfo;
import com.ruoyi.exception.InterruptException;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;

import javax.annotation.PreDestroy;
import java.util.Objects;

/**
 * @author liujun
 * @date 2024年07月25日 16:23
 */
@Slf4j
@Component
public class FaceEngineConfig {
    private FaceEngine faceEngine;

    @Value("${spring.profiles.active}")
    private String profilesActive;

    @Bean
    public FaceEngine createFaceEngine(BsthSystemConfig bsthSystemConfig) {
        FaceEngine faceEngine = new FaceEngine(bsthSystemConfig.getFaceLibPath());

//        FaceEngine faceEngine = new FaceEngine("D:\\\\arcsoft_lib");
        //激活引擎
        int errorCode = faceEngine.activeOnline(bsthSystemConfig.getFaceAppId(), bsthSystemConfig.getFaceSdkKey());

        if (errorCode != ErrorInfo.MOK.getValue() && errorCode != ErrorInfo.MERR_ASF_ALREADY_ACTIVATED.getValue()) {
            throw new InterruptException("引擎激活失败,错误编码:"+errorCode);
        }


        ActiveFileInfo activeFileInfo = new ActiveFileInfo();
        errorCode = faceEngine.getActiveFileInfo(activeFileInfo);
        if (errorCode != ErrorInfo.MOK.getValue() && errorCode != ErrorInfo.MERR_ASF_ALREADY_ACTIVATED.getValue()) {
            throw new InterruptException("获取激活文件信息失败,错误编码:"+errorCode);
        }

        //引擎配置
        EngineConfiguration engineConfiguration = new EngineConfiguration();
        engineConfiguration.setDetectMode(DetectMode.ASF_DETECT_MODE_IMAGE);
        engineConfiguration.setDetectFaceOrientPriority(DetectOrient.ASF_OP_ALL_OUT);
        engineConfiguration.setDetectFaceMaxNum(10);
        engineConfiguration.setDetectFaceScaleVal(16);
        //功能配置
        FunctionConfiguration functionConfiguration = new FunctionConfiguration();
        functionConfiguration.setSupportAge(true);
        functionConfiguration.setSupportFace3dAngle(true);
        functionConfiguration.setSupportFaceDetect(true);
        functionConfiguration.setSupportFaceRecognition(true);
        functionConfiguration.setSupportGender(true);
        functionConfiguration.setSupportLiveness(true);
        functionConfiguration.setSupportIRLiveness(true);
        engineConfiguration.setFunctionConfiguration(functionConfiguration);


        //初始化引擎
        errorCode = faceEngine.init(engineConfiguration);

        if (errorCode != ErrorInfo.MOK.getValue()) {
           throw new InterruptException("初始化引擎失败,错误编码:"+errorCode);
        }

        return faceEngine;
    }

    @PreDestroy
    public void faceEngineConfigPreDestory() {
        if (Objects.nonNull(faceEngine)) {
            faceEngine.unInit();
        }
    }

    public  boolean isDev(){
        return StringUtils.equals("druid-dev",profilesActive);
    }
}