首先打开idea新建一个maven工程,选择File->New->Project...
输入GroupId和ArtifactId,点击Next
一直点击Next,最后点击Finish,工程就创建好了
找到我们的工程文件夹
在文件夹src->main->java下新建包com.arcsoft
然后把从虹软官网下载下来的压缩包解压,解压之后是这一个文件夹,进入文件夹
有一个叫samplecode的文件夹,进去,把java文件拷贝到刚才新建的包com.arcsoft里(就是这个↓)
package com.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.enums.ImageFormat;
import com.arcsoft.face.toolkit.ImageInfo;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import static com.arcsoft.face.toolkit.ImageFactory.getGrayData;
import static com.arcsoft.face.toolkit.ImageFactory.getRGBData;
public class FaceEngineTest {
public static void main(String[] args) {
String appId = "";
String sdkKey = "";
FaceEngine faceEngine = new FaceEngine("d:\\arcsoft-lib");
//激活引擎
int activeCode = faceEngine.activeOnline(appId, sdkKey);
if (activeCode != ErrorInfo.MOK.getValue() && activeCode != 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_0_ONLY);
//功能配置
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);
//初始化引擎
int initCode = faceEngine.init(engineConfiguration);
if (initCode != ErrorInfo.MOK.getValue()) {
System.out.println("初始化引擎失败");
}
//人脸检测
ImageInfo imageInfo = getRGBData(new File("d:\\1.jpg"));
List<FaceInfo> faceInfoList = new ArrayList<FaceInfo>();
int detectCode = faceEngine.detectFaces(imageInfo.getImageData(), imageInfo.getWidth(), imageInfo.getHeight(), ImageFormat.CP_PAF_BGR24, faceInfoList);
System.out.println(faceInfoList);
//特征提取
FaceFeature faceFeature = new FaceFeature();
int extractCode = faceEngine.extractFaceFeature(imageInfo.getImageData(), imageInfo.getWidth(), imageInfo.getHeight(), ImageFormat.CP_PAF_BGR24, faceInfoList.get(0), faceFeature);
System.out.println("特征值大小:" + faceFeature.getFeatureData().length);
//人脸检测2
ImageInfo imageInfo2 = getRGBData(new File("d:\\1.jpg"));
List<FaceInfo> faceInfoList2 = new ArrayList<FaceInfo>();
int detectCode2 = faceEngine.detectFaces(imageInfo2.getImageData(), imageInfo2.getWidth(), imageInfo2.getHeight(), ImageFormat.CP_PAF_BGR24, faceInfoList2);
System.out.println(faceInfoList);
//特征提取2
FaceFeature faceFeature2 = new FaceFeature();
int extractCode2 = faceEngine.extractFaceFeature(imageInfo2.getImageData(), imageInfo2.getWidth(), imageInfo2.getHeight(), ImageFormat.CP_PAF_BGR24, faceInfoList2.get(0), faceFeature2);
System.out.println("特征值大小:" + faceFeature.getFeatureData().length);
//特征比对
FaceFeature targetFaceFeature = new FaceFeature();
targetFaceFeature.setFeatureData(faceFeature.getFeatureData());
FaceFeature sourceFaceFeature = new FaceFeature();
sourceFaceFeature.setFeatureData(faceFeature2.getFeatureData());
FaceSimilar faceSimilar = new FaceSimilar();
int compareCode = faceEngine.compareFaceFeature(targetFaceFeature, sourceFaceFeature, faceSimilar);
System.out.println("相似度:" + faceSimilar.getScore());
//人脸属性检测
FunctionConfiguration configuration = new FunctionConfiguration();
configuration.setSupportAge(true);
configuration.setSupportFace3dAngle(true);
configuration.setSupportGender(true);
configuration.setSupportLiveness(true);
int processCode = faceEngine.process(imageInfo.getImageData(), imageInfo.getWidth(), imageInfo.getHeight(), ImageFormat.CP_PAF_BGR24, faceInfoList, configuration);
//性别检测
List<GenderInfo> genderInfoList = new ArrayList<GenderInfo>();
int genderCode = faceEngine.getGender(genderInfoList);
assertEquals("性别检测失败", genderCode, ErrorInfo.MOK.getValue());
System.out.println("性别:" + genderInfoList.get(0).getGender());
//年龄检测
List<AgeInfo> ageInfoList = new ArrayList<AgeInfo>();
int ageCode = faceEngine.getAge(ageInfoList);
assertEquals("年龄检测失败", ageCode, ErrorInfo.MOK.getValue());
System.out.println("年龄:" + ageInfoList.get(0).getAge());
//3D信息检测
List<Face3DAngle> face3DAngleList = new ArrayList<Face3DAngle>();
int face3dCode = faceEngine.getFace3DAngle(face3DAngleList);
System.out.println("3D角度:" + face3DAngleList.get(0).getPitch() + "," + face3DAngleList.get(0).getRoll() + "," + face3DAngleList.get(0).getYaw());
//活体检测
List<LivenessInfo> livenessInfoList = new ArrayList<LivenessInfo>();
int livenessCode = faceEngine.getLiveness(livenessInfoList);
System.out.println("活体:" + livenessInfoList.get(0).getLiveness());
//IR属性处理
ImageInfo imageInfoGray = getGrayData(new File("d:\\1.jpg"));
List<FaceInfo> faceInfoListGray = new ArrayList<FaceInfo>();
int detectCodeGray = faceEngine.detectFaces(imageInfoGray.getImageData(), imageInfoGray.getWidth(), imageInfoGray.getHeight(), ImageFormat.CP_PAF_GRAY, faceInfoListGray);
FunctionConfiguration configuration2 = new FunctionConfiguration();
configuration2.setSupportIRLiveness(true);
int processCode2 = faceEngine.processIr(imageInfoGray.getImageData(), imageInfoGray.getWidth(), imageInfoGray.getHeight(), ImageFormat.CP_PAF_GRAY, faceInfoListGray, configuration2);
//IR活体检测
List<IrLivenessInfo> irLivenessInfo = new ArrayList<>();
int livenessIr = faceEngine.getLivenessIr(irLivenessInfo);
System.out.println("IR活体:" + irLivenessInfo.get(0).getLiveness());
//设置活体检测参数
int paramCode = faceEngine.setLivenessParam(0.8f, 0.8f);
//获取激活文件信息
ActiveFileInfo activeFileInfo = new ActiveFileInfo();
int activeFileCode = faceEngine.getActiveFileInfo(activeFileInfo);
//引擎卸载
int unInitCode = faceEngine.unInit();
}
}
然后再退回到工程文件夹,进入src文件夹,把官方压缩包里的lib文件夹拷过来
这个时候回到idea,打开
进入Module,点这个加号
选择第一个jars or directories
把刚刚添加的lib导入
点√,apply
在java代码中id和key要改,需要自己去官网注册申请
下面一个是引擎位置,就是刚才那个libs文件夹里WIN64文件夹里的东西,改成WIN64文件夹路径就好了
这个demo是把两张照片做对比,所以记得改一下两张照片路径
用自己照片就行,,,,
这里在报错,大概是他这个包没有这个函数,注释了就好
这是个活体检测功能,随便写以上两张照片其一路径即可
这一行如果报错,给他加上类别就好
改成这样
点击Run试试
运行结果如图
跑出来效果,因为是一张照片,所以相似度1.0
换了两张图片,都是同一个人,运行结果如下