package com.doc.face.service.init; import com.arcsoft.face.EngineConfiguration; import com.arcsoft.face.FaceEngine; import com.arcsoft.face.FaceFeatureInfo; import com.arcsoft.face.FunctionConfiguration; import com.arcsoft.face.enums.DetectMode; import com.arcsoft.face.enums.DetectOrient; import com.doc.system.service.ISysUserExpandService; import lombok.Data; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.ApplicationListener; import org.springframework.context.event.ContextRefreshedEvent; import org.springframework.stereotype.Component; import javax.annotation.Resource; import java.nio.charset.StandardCharsets; /** * 聊天消息管理Service业务层处理 * * @author wukai * @date 2023-08-24 */ @Component @Slf4j @Data public class FaceEngineInit implements ApplicationListener { @Value("${face-engine.lib}") private String lib; @Value("${face-engine.sdk-key}") private String appId; @Value("${face-engine.sdk-key}") private String sdkKey; @Value("${face-engine.active-key}") private String activeKey; @Value("${face-engine.active-file}") private String activeFile; private FaceEngine faceEngine; @Resource private ISysUserExpandService expandService; private void initEngine() { //人脸识别引擎库存放路径 faceEngine = new FaceEngine(lib); //离线激活引擎 faceEngine.activeOffline(activeFile); //引擎配置 EngineConfiguration engineConfiguration = new EngineConfiguration(); engineConfiguration.setDetectMode(DetectMode.ASF_DETECT_MODE_IMAGE); engineConfiguration.setDetectFaceOrientPriority(DetectOrient.ASF_OP_ALL_OUT); engineConfiguration.setDetectFaceMaxNum(10); //功能配置 FunctionConfiguration functionConfiguration = new FunctionConfiguration(); functionConfiguration.setSupportAge(true); functionConfiguration.setSupportFaceDetect(true); functionConfiguration.setSupportFaceRecognition(true); functionConfiguration.setSupportGender(true); functionConfiguration.setSupportLiveness(true); functionConfiguration.setSupportIRLiveness(true); functionConfiguration.setSupportImageQuality(true); functionConfiguration.setSupportMaskDetect(true); functionConfiguration.setSupportUpdateFaceData(true); engineConfiguration.setFunctionConfiguration(functionConfiguration); //初始化引擎 faceEngine.init(engineConfiguration); } /** * 注册人脸信息 */ private void register() { expandService.selectFaceFeatureList().forEach(expand -> { FaceFeatureInfo faceFeatureInfo = new FaceFeatureInfo(); faceFeatureInfo.setSearchId(expand.getUserId().intValue()); faceFeatureInfo.setFaceTag(expand.getRemark()); String feature = expand.getFaceFeature(); faceFeatureInfo.setFeatureData(feature.getBytes(StandardCharsets.ISO_8859_1)); faceEngine.registerFaceFeature(faceFeatureInfo); }); } @Override public void onApplicationEvent(ContextRefreshedEvent event) { if (event.getApplicationContext().getParent() == null) { log.info("SpringBoot项目加载后执行人脸识别初始化!"); initEngine(); register(); } } }