袁强 5 months ago
parent
commit
18aee546c3
  1. 7
      yq-admin/src/main/resources/application.yml
  2. 21
      yq-common/pom.xml
  3. 157
      yq-common/src/main/java/yq/common/utils/FaceEnginUtil.java

7
yq-admin/src/main/resources/application.yml

@ -140,3 +140,10 @@ xss:
excludes: /system/notice
# 匹配链接
urlPatterns: /system/*,/monitor/*,/tool/*
arcsoft:
appId: 7MtFQZ9S9Ue2UC7koYxJbeL5iEHhqGtp3d5SJbJ4ou92
sdkKey: 4VM5rVL8eKmmELhRi8ZoopH33GzsgPoptA94zSXyHvzz
faceEngine: E:\arcsoft_lib\LINUX64
thread-pool-size: 10

21
yq-common/pom.xml

@ -156,7 +156,24 @@
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
</dependency>
<dependency>
<groupId>com.arcsoft.face</groupId>
<artifactId>arcsoft-sdk-face</artifactId>
<version>3.0.0.0</version>
<scope>system</scope>
<systemPath>${basedir}/libs/arcsoft-sdk-face-3.0.0.0.jar</systemPath>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<!-- 加入下面这一行 -->
<includeSystemScope>true</includeSystemScope>
</configuration>
</plugin>
</plugins>
</build>
</project>

157
yq-common/src/main/java/yq/common/utils/FaceEnginUtil.java

@ -0,0 +1,157 @@
package yq.common.utils;
import cn.hutool.core.collection.CollectionUtil;
import com.arcsoft.face.*;
import com.arcsoft.face.enums.DetectMode;
import com.arcsoft.face.enums.DetectOrient;
import com.arcsoft.face.enums.ErrorInfo;
import com.arcsoft.face.enums.ImageFormat;
import com.arcsoft.face.toolkit.ImageFactory;
import com.arcsoft.face.toolkit.ImageInfo;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.multipart.MultipartFile;
import yq.common.exception.ServiceException;
import yq.common.utils.file.ImageUtils;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
/**
* minio文件上传工具类
* @author: jeecg-boot
*/
@Slf4j
public class FaceEnginUtil {
@Value(value = "${arcsoft.appId}")
private static String appId;
@Value(value = "${arcsoft.sdkKey}")
private static String sdkKey;
@Value(value = "${arcsoft.faceEngine}")
private static String faceEngineUrl;
public static FaceEngine init() {
FaceEngine faceEngine = new FaceEngine(faceEngineUrl);
//激活引擎
int errorCode = faceEngine.activeOnline(appId, sdkKey);
if (errorCode != ErrorInfo.MOK.getValue() && errorCode != ErrorInfo.MERR_ASF_ALREADY_ACTIVATED.getValue()) {
System.out.println("引擎激活失败");
}
ActiveFileInfo activeFileInfo=new ActiveFileInfo();
errorCode = faceEngine.getActiveFileInfo(activeFileInfo);
if (errorCode != ErrorInfo.MOK.getValue() && errorCode != ErrorInfo.MERR_ASF_ALREADY_ACTIVATED.getValue()) {
System.out.println("获取激活文件信息失败");
}
//引擎配置
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()) {
System.out.println("初始化引擎失败");
}
return faceEngine;
}
/**
* 录入人脸接口存入byte数组特征值
* @param file
* @return
*/
public static byte[] uploadInput(MultipartFile file) {
FaceEngine faceEngine = FaceEnginUtil.init();
InputStream inputstream = null;
ImageInfo imageInfo = null;
try {
inputstream = file.getInputStream();
imageInfo = ImageFactory.getRGBData(inputstream);
if (inputstream != null) {
inputstream.close();
}
} catch (IOException e) {
throw new ServiceException("文件非图像类型");
}
List<FaceInfo> faceInfoList = new ArrayList<FaceInfo>();
faceEngine.detectFaces(imageInfo.getImageData(), imageInfo.getWidth(), imageInfo.getHeight(), imageInfo.getImageFormat(), faceInfoList);
//特征提取
FaceFeature faceFeature = new FaceFeature();
faceEngine.extractFaceFeature(imageInfo.getImageData(), imageInfo.getWidth(), imageInfo.getHeight(), imageInfo.getImageFormat(), faceInfoList.get(0), faceFeature);
byte[] featureData = faceFeature.getFeatureData();
FaceEnginUtil.close(faceEngine);
return featureData;
}
/**
* 人脸匹配
* @param file 人脸数据
* @param faceFeature1 数据库人脸存根
* @return float 数据判断大于0.7以上
*/
public static float uploadContrast(MultipartFile file,Byte[] faceFeature1) {
FaceEngine faceEngine = FaceEnginUtil.init();
InputStream inputstream = null;
ImageInfo imageInfo = null;
try {
inputstream = file.getInputStream();
imageInfo = ImageFactory.getRGBData(inputstream);
if (inputstream != null) {
inputstream.close();
}
} catch (IOException e) {
throw new ServiceException("文件非图像类型");
}
List<FaceInfo> faceInfoList = new ArrayList<FaceInfo>();
faceEngine.detectFaces(imageInfo.getImageData(), imageInfo.getWidth(), imageInfo.getHeight(), imageInfo.getImageFormat(), faceInfoList);
//特征提取
FaceFeature faceFeature = new FaceFeature();
faceEngine.extractFaceFeature(imageInfo.getImageData(), imageInfo.getWidth(), imageInfo.getHeight(), imageInfo.getImageFormat(), faceInfoList.get(0), faceFeature);
byte[] featureData = faceFeature.getFeatureData();
//特征比对
FaceFeature targetFaceFeature = new FaceFeature();
targetFaceFeature.setFeatureData(featureData);
FaceFeature sourceFaceFeature = new FaceFeature();
sourceFaceFeature.setFeatureData(faceFeature.getFeatureData());
FaceSimilar faceSimilar = new FaceSimilar();
faceEngine.compareFaceFeature(targetFaceFeature, sourceFaceFeature, faceSimilar);
FaceEnginUtil.close(faceEngine);
return faceSimilar.getScore();
}
public static void close(FaceEngine faceEngine) {
faceEngine.unInit();
}
}
Loading…
Cancel
Save