7 changed files with 293 additions and 16 deletions
Binary file not shown.
@ -0,0 +1,107 @@ |
|||
package yq.common.arcsoft; |
|||
|
|||
|
|||
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.toolkit.ImageInfo; |
|||
import yq.common.utils.FaceEnginUtil; |
|||
|
|||
import java.io.File; |
|||
import java.util.ArrayList; |
|||
import java.util.List; |
|||
|
|||
import static com.arcsoft.face.toolkit.ImageFactory.getRGBData; |
|||
|
|||
|
|||
public class FaceEngineTest { |
|||
|
|||
|
|||
public static void main(String[] args) { |
|||
|
|||
// //从官网获取
|
|||
// String appId = "7MtFQZ9S9Ue2UC7koYxJbeL5iEHhqGtp3d5SJbJ4ou92";
|
|||
// String sdkKey = "4VM5rVL8eKmmELhRi8ZoopH33GzsgPoptA94zSXyHvzz";
|
|||
//
|
|||
//
|
|||
// FaceEngine faceEngine = new FaceEngine("E:\\arcsoft_lib\\LINUX64");
|
|||
// //激活引擎
|
|||
// 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("初始化引擎失败");
|
|||
// }
|
|||
//
|
|||
//
|
|||
// //人脸检测
|
|||
// ImageInfo imageInfo = getRGBData(new File("E:\\dog\\dog1.jpg"));
|
|||
// List<FaceInfo> faceInfoList = new ArrayList<FaceInfo>();
|
|||
// errorCode = faceEngine.detectFaces(imageInfo.getImageData(), imageInfo.getWidth(), imageInfo.getHeight(), imageInfo.getImageFormat(), faceInfoList);
|
|||
// System.out.println(faceInfoList);
|
|||
//
|
|||
// //特征提取
|
|||
// FaceFeature faceFeature = new FaceFeature();
|
|||
// errorCode = faceEngine.extractFaceFeature(imageInfo.getImageData(), imageInfo.getWidth(), imageInfo.getHeight(), imageInfo.getImageFormat(), faceInfoList.get(0), faceFeature);
|
|||
// System.out.println("特征值大小:" + faceFeature.getFeatureData().length);
|
|||
//
|
|||
// //人脸检测2
|
|||
// ImageInfo imageInfo2 = getRGBData(new File("E:\\dog\\dog2.jpg"));
|
|||
// List<FaceInfo> faceInfoList2 = new ArrayList<FaceInfo>();
|
|||
// errorCode = faceEngine.detectFaces(imageInfo2.getImageData(), imageInfo2.getWidth(), imageInfo2.getHeight(),imageInfo2.getImageFormat(), faceInfoList2);
|
|||
// System.out.println(faceInfoList2);
|
|||
//
|
|||
// //特征提取2
|
|||
// FaceFeature faceFeature2 = new FaceFeature();
|
|||
// errorCode = faceEngine.extractFaceFeature(imageInfo2.getImageData(), imageInfo2.getWidth(), imageInfo2.getHeight(), imageInfo2.getImageFormat(), faceInfoList2.get(0), faceFeature2);
|
|||
// System.out.println("特征值大小:" + faceFeature2.getFeatureData().length);
|
|||
//
|
|||
// //特征比对
|
|||
// FaceFeature targetFaceFeature = new FaceFeature();
|
|||
// targetFaceFeature.setFeatureData(faceFeature.getFeatureData());
|
|||
// FaceFeature sourceFaceFeature = new FaceFeature();
|
|||
// sourceFaceFeature.setFeatureData(faceFeature2.getFeatureData());
|
|||
// FaceSimilar faceSimilar = new FaceSimilar();
|
|||
//
|
|||
// errorCode = faceEngine.compareFaceFeature(targetFaceFeature, sourceFaceFeature, faceSimilar);
|
|||
//
|
|||
// System.out.println("相似度:" + faceSimilar.getScore());
|
|||
//
|
|||
//
|
|||
// //引擎卸载
|
|||
// errorCode = faceEngine.unInit();
|
|||
|
|||
} |
|||
} |
@ -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…
Reference in new issue