|
@@ -1,195 +0,0 @@
|
|
|
-package com.dt;
|
|
|
-
|
|
|
-import com.arcsoft.face.*;
|
|
|
-import com.arcsoft.face.enums.*;
|
|
|
-import com.arcsoft.face.toolkit.ImageFactory;
|
|
|
-import com.arcsoft.face.toolkit.ImageInfo;
|
|
|
-import com.arcsoft.face.toolkit.ImageInfoEx;
|
|
|
-
|
|
|
-import javax.imageio.ImageIO;
|
|
|
-import java.awt.image.BufferedImage;
|
|
|
-import java.io.File;
|
|
|
-import java.net.URL;
|
|
|
-import java.util.ArrayList;
|
|
|
-import java.util.List;
|
|
|
-
|
|
|
-public class FaceEngineTest {
|
|
|
-
|
|
|
-
|
|
|
- public static void main(String[] args) {
|
|
|
-
|
|
|
- //从官网获取
|
|
|
- String appId = "F6mCauSNk86Jn9U21eWbehPHcyVzpNPzrbabLjXwrQds";
|
|
|
- String sdkKey = "CJgKkF5UDNzWoikdYqBQtFHtbCjeuFCvLJBDnYq7LkFv";
|
|
|
-
|
|
|
- FaceEngine faceEngine = new FaceEngine(new File("libs/WIN64").getAbsolutePath());
|
|
|
- //激活引擎
|
|
|
- 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("初始化引擎失败");
|
|
|
- }
|
|
|
-
|
|
|
- String imageUrl1 = "http://127.0.0.1:9005/face/zhang.jpg";
|
|
|
- String imageUrl2 = "http://127.0.0.1:9005/face/zhang.jpg";
|
|
|
-
|
|
|
- //人脸检测
|
|
|
- ImageInfo imageInfo = getImageInfoFromUrl(imageUrl1);
|
|
|
- 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 = getImageInfoFromUrl(imageUrl2);
|
|
|
- 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.setLivenessParam(0.5f, 0.7f);
|
|
|
- //人脸属性检测
|
|
|
- FunctionConfiguration configuration = new FunctionConfiguration();
|
|
|
- configuration.setSupportAge(true);
|
|
|
- configuration.setSupportFace3dAngle(true);
|
|
|
- configuration.setSupportGender(true);
|
|
|
- configuration.setSupportLiveness(true);
|
|
|
- errorCode = faceEngine.process(imageInfo.getImageData(), imageInfo.getWidth(), imageInfo.getHeight(), imageInfo.getImageFormat(), faceInfoList, configuration);
|
|
|
-
|
|
|
- //性别检测
|
|
|
- List<GenderInfo> genderInfoList = new ArrayList<GenderInfo>();
|
|
|
- errorCode = faceEngine.getGender(genderInfoList);
|
|
|
- System.out.println("性别:" + genderInfoList.get(0).getGender());
|
|
|
-
|
|
|
- //年龄检测
|
|
|
- List<AgeInfo> ageInfoList = new ArrayList<AgeInfo>();
|
|
|
- errorCode = faceEngine.getAge(ageInfoList);
|
|
|
- System.out.println("年龄:" + ageInfoList.get(0).getAge());
|
|
|
-
|
|
|
- //3D信息检测
|
|
|
- List<Face3DAngle> face3DAngleList = new ArrayList<Face3DAngle>();
|
|
|
- errorCode = 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>();
|
|
|
- errorCode = faceEngine.getLiveness(livenessInfoList);
|
|
|
- System.out.println("活体:" + livenessInfoList.get(0).getLiveness());
|
|
|
-
|
|
|
- //IR属性处理
|
|
|
- try {
|
|
|
- // 获取灰度图像数据
|
|
|
- URL url = new URL(imageUrl2);
|
|
|
- BufferedImage bufferedImage = ImageIO.read(url);
|
|
|
- java.io.ByteArrayOutputStream baos = new java.io.ByteArrayOutputStream();
|
|
|
- ImageIO.write(bufferedImage, "jpg", baos);
|
|
|
- byte[] imageData = baos.toByteArray();
|
|
|
- ImageInfo imageInfoGray = ImageFactory.getGrayData(imageData);
|
|
|
-
|
|
|
- List<FaceInfo> faceInfoListGray = new ArrayList<FaceInfo>();
|
|
|
- errorCode = faceEngine.detectFaces(imageInfoGray.getImageData(), imageInfoGray.getWidth(), imageInfoGray.getHeight(), imageInfoGray.getImageFormat(), faceInfoListGray);
|
|
|
-
|
|
|
- FunctionConfiguration configuration2 = new FunctionConfiguration();
|
|
|
- configuration2.setSupportIRLiveness(true);
|
|
|
- errorCode = faceEngine.processIr(imageInfoGray.getImageData(), imageInfoGray.getWidth(), imageInfoGray.getHeight(), imageInfoGray.getImageFormat(), faceInfoListGray, configuration2);
|
|
|
- //IR活体检测
|
|
|
- List<IrLivenessInfo> irLivenessInfo = new ArrayList<>();
|
|
|
- errorCode = faceEngine.getLivenessIr(irLivenessInfo);
|
|
|
- System.out.println("IR活体:" + irLivenessInfo.get(0).getLiveness());
|
|
|
- } catch (Exception e) {
|
|
|
- System.out.println("处理IR图像时发生错误:" + e.getMessage());
|
|
|
- e.printStackTrace();
|
|
|
- }
|
|
|
-
|
|
|
- ImageInfoEx imageInfoEx = new ImageInfoEx();
|
|
|
- imageInfoEx.setHeight(imageInfo.getHeight());
|
|
|
- imageInfoEx.setWidth(imageInfo.getWidth());
|
|
|
- imageInfoEx.setImageFormat(imageInfo.getImageFormat());
|
|
|
- imageInfoEx.setImageDataPlanes(new byte[][]{imageInfo.getImageData()});
|
|
|
- imageInfoEx.setImageStrides(new int[]{imageInfo.getWidth() * 3});
|
|
|
- List<FaceInfo> faceInfoList1 = new ArrayList<>();
|
|
|
- errorCode = faceEngine.detectFaces(imageInfoEx, DetectModel.ASF_DETECT_MODEL_RGB, faceInfoList1);
|
|
|
-
|
|
|
- FunctionConfiguration fun = new FunctionConfiguration();
|
|
|
- fun.setSupportAge(true);
|
|
|
- errorCode = faceEngine.process(imageInfoEx, faceInfoList1, functionConfiguration);
|
|
|
- List<AgeInfo> ageInfoList1 = new ArrayList<>();
|
|
|
- int age = faceEngine.getAge(ageInfoList1);
|
|
|
- System.out.println("年龄:" + ageInfoList1.get(0).getAge());
|
|
|
-
|
|
|
- FaceFeature feature = new FaceFeature();
|
|
|
- errorCode = faceEngine.extractFaceFeature(imageInfoEx, faceInfoList1.get(0), feature);
|
|
|
-
|
|
|
- //引擎卸载
|
|
|
- errorCode = faceEngine.unInit();
|
|
|
- }
|
|
|
-
|
|
|
- // 从URL获取ImageInfo的方法
|
|
|
- private static ImageInfo getImageInfoFromUrl(String imageUrl) {
|
|
|
- try {
|
|
|
- URL url = new URL(imageUrl);
|
|
|
- BufferedImage bufferedImage = ImageIO.read(url);
|
|
|
-
|
|
|
- // 将BufferedImage转换为byte数组
|
|
|
- java.io.ByteArrayOutputStream baos = new java.io.ByteArrayOutputStream();
|
|
|
- ImageIO.write(bufferedImage, "jpg", baos);
|
|
|
- byte[] imageData = baos.toByteArray();
|
|
|
-
|
|
|
- // 使用byte数组创建ImageInfo
|
|
|
- return ImageFactory.getRGBData(imageData);
|
|
|
- } catch (Exception e) {
|
|
|
- e.printStackTrace();
|
|
|
- return null;
|
|
|
- }
|
|
|
- }
|
|
|
-}
|