FaceEngineInit.java 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. package com.doc.face.service.init;
  2. import com.arcsoft.face.EngineConfiguration;
  3. import com.arcsoft.face.FaceEngine;
  4. import com.arcsoft.face.FaceFeatureInfo;
  5. import com.arcsoft.face.FunctionConfiguration;
  6. import com.arcsoft.face.enums.DetectMode;
  7. import com.arcsoft.face.enums.DetectOrient;
  8. import com.doc.system.service.ISysUserExpandService;
  9. import lombok.Data;
  10. import lombok.extern.slf4j.Slf4j;
  11. import org.springframework.beans.factory.annotation.Value;
  12. import org.springframework.context.ApplicationListener;
  13. import org.springframework.context.event.ContextRefreshedEvent;
  14. import org.springframework.stereotype.Component;
  15. import javax.annotation.Resource;
  16. import java.nio.charset.StandardCharsets;
  17. /**
  18. * 聊天消息管理Service业务层处理
  19. *
  20. * @author wukai
  21. * @date 2023-08-24
  22. */
  23. @Component
  24. @Slf4j
  25. @Data
  26. public class FaceEngineInit implements ApplicationListener<ContextRefreshedEvent> {
  27. @Value("${face-engine.lib}")
  28. private String lib;
  29. @Value("${face-engine.sdk-key}")
  30. private String appId;
  31. @Value("${face-engine.sdk-key}")
  32. private String sdkKey;
  33. @Value("${face-engine.active-key}")
  34. private String activeKey;
  35. @Value("${face-engine.active-file}")
  36. private String activeFile;
  37. private FaceEngine faceEngine;
  38. @Resource
  39. private ISysUserExpandService expandService;
  40. private void initEngine() {
  41. //人脸识别引擎库存放路径
  42. faceEngine = new FaceEngine(lib);
  43. //离线激活引擎
  44. faceEngine.activeOffline(activeFile);
  45. //引擎配置
  46. EngineConfiguration engineConfiguration = new EngineConfiguration();
  47. engineConfiguration.setDetectMode(DetectMode.ASF_DETECT_MODE_IMAGE);
  48. engineConfiguration.setDetectFaceOrientPriority(DetectOrient.ASF_OP_ALL_OUT);
  49. engineConfiguration.setDetectFaceMaxNum(10);
  50. //功能配置
  51. FunctionConfiguration functionConfiguration = new FunctionConfiguration();
  52. functionConfiguration.setSupportAge(true);
  53. functionConfiguration.setSupportFaceDetect(true);
  54. functionConfiguration.setSupportFaceRecognition(true);
  55. functionConfiguration.setSupportGender(true);
  56. functionConfiguration.setSupportLiveness(true);
  57. functionConfiguration.setSupportIRLiveness(true);
  58. functionConfiguration.setSupportImageQuality(true);
  59. functionConfiguration.setSupportMaskDetect(true);
  60. functionConfiguration.setSupportUpdateFaceData(true);
  61. engineConfiguration.setFunctionConfiguration(functionConfiguration);
  62. //初始化引擎
  63. faceEngine.init(engineConfiguration);
  64. }
  65. /**
  66. * 注册人脸信息
  67. */
  68. private void register() {
  69. expandService.selectFaceFeatureList().forEach(expand -> {
  70. FaceFeatureInfo faceFeatureInfo = new FaceFeatureInfo();
  71. faceFeatureInfo.setSearchId(expand.getUserId().intValue());
  72. faceFeatureInfo.setFaceTag(expand.getRemark());
  73. String feature = expand.getFaceFeature();
  74. faceFeatureInfo.setFeatureData(feature.getBytes(StandardCharsets.ISO_8859_1));
  75. faceEngine.registerFaceFeature(faceFeatureInfo);
  76. });
  77. }
  78. @Override
  79. public void onApplicationEvent(ContextRefreshedEvent event) {
  80. if (event.getApplicationContext().getParent() == null) {
  81. log.info("SpringBoot项目加载后执行人脸识别初始化!");
  82. initEngine();
  83. register();
  84. }
  85. }
  86. }