当前位置: 首页 > news >正文

人脸识别(Java实现的)

虹软人脸识别:

虹软人脸识别的地址:虹软视觉开放平台—以免费人脸识别技术为核心的人脸识别算法开放平台

依赖包:

依赖包是从虹软开发平台下载的

在项目中引入这个依赖包

pom.xml
<!--      人脸识别  --><dependency><groupId>com.arcsoft.face</groupId><artifactId>arcsoft-sdk-face</artifactId><version>2.2.0.1</version><scope>system</scope><systemPath>${project.basedir}/lib/arcsoft-sdk-face-3.0.0.0.jar</systemPath></dependency>

打包:

<configuration><includeSystemScope>true</includeSystemScope>
</configuration>

如图:

需要的参数:

#虹软人脸识别参数
arcsoft.appid=JC1YjvrZrVXtJTTw9d68Jpzi95FY5kNAM5r98wft11111
arcsoft.sdkKey=EAFuucMzSpKymeCYqYwg4UC3QBbbMeMnw7NZBNRt1111
#驱动
arcsoft.libPath=D:\\Java\\faceDrive  

驱动是需要引入代码中的

代码:
package com.example.tanhuanapp.server.impl;import com.arcsoft.face.EngineConfiguration;
import com.arcsoft.face.FaceEngine;
import com.arcsoft.face.FaceInfo;
import com.arcsoft.face.FunctionConfiguration;
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.stereotype.Service;
import javax.annotation.PostConstruct;
import java.io.File;
import java.util.ArrayList;
import java.util.List;/*** @author IT空门_门主* @date 2024/1/11*/
@Slf4j
@Service
public class FaceEngineServiceImpl {@Value("${arcsoft.appid}")private String  appid;@Value("${arcsoft.sdkKey}")private String  sdkKey;@Value("${arcsoft.libPath}")private String  libPath;private FaceEngine faceEngine;/***  初始化引擎*/@PostConstructpublic void init() {// 激活并且初始化引擎FaceEngine faceEngine = new FaceEngine(libPath);int activeCode = faceEngine.activeOnline(appid, sdkKey);if (activeCode != ErrorInfo.MOK.getValue() && activeCode != ErrorInfo.MERR_ASF_ALREADY_ACTIVATED.getValue()) {log.error("引擎激活失败");throw new RuntimeException("引擎激活失败");}//引擎配置EngineConfiguration engineConfiguration = new EngineConfiguration();//IMAGE检测模式,用于处理单张的图像数据engineConfiguration.setDetectMode(DetectMode.ASF_DETECT_MODE_IMAGE);//人脸检测角度,逆时针0度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()) {log.error("初始化引擎出错!");throw new RuntimeException("初始化引擎出错!");}this.faceEngine = faceEngine;}/*** 检测图片是否为人像** @param imageInfo 图像对象* @return true:人像,false:非人像*/public boolean checkIsPortrait(ImageInfo imageInfo) {// 定义人脸列表List<FaceInfo> faceInfoList = new ArrayList<FaceInfo>();faceEngine.detectFaces(imageInfo.getImageData(), imageInfo.getWidth(), imageInfo.getHeight(), ImageFormat.CP_PAF_BGR24, faceInfoList);log.info("检测到人脸数量:{}",faceInfoList.size());log.info("检测:{}",faceInfoList);return !faceInfoList.isEmpty();}/***上传图片接口(byte[])* @param imageData* @return*/public boolean checkIsPortrait(byte[] imageData) {return this.checkIsPortrait(ImageFactory.getRGBData(imageData));}/*** 上传图片接口(file)* @param file* @return*/public boolean checkIsPortrait(File file) {return this.checkIsPortrait(ImageFactory.getRGBData(file));}
}

测试:

package com.example.tanhuanapp;import com.arcsoft.face.*;
import com.arcsoft.face.enums.DetectMode;
import com.arcsoft.face.enums.DetectModel;
import com.arcsoft.face.enums.DetectOrient;
import com.arcsoft.face.enums.ErrorInfo;
import com.arcsoft.face.toolkit.ImageInfo;
import com.arcsoft.face.toolkit.ImageInfoEx;
import com.example.tanhuanapp.server.impl.FaceEngineServiceImpl;
import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
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;/*** @author IT空门_门主* @date 2024/1/11*/
@Slf4j
@SpringBootTest
public class FaceRecognition {@Autowiredprivate FaceEngineServiceImpl faceEngineService;/*** 测试人脸识别*/@Testpublic void testCheckIsPortrait(){File file = new File("C:\\Users\\DELL\\Desktop\\aa\\1.jpg");boolean checkIsPortrait = this.faceEngineService.checkIsPortrait(file);System.out.println(checkIsPortrait); // true|false}@Testvoid contextLoads() {//从官网获取String appId = "JC1YjvrZrVXtJTTw9d68Jpzi95FY5kNAM5r98wftenQU";String sdkKey = "EAFuucMzSpKymeCYqYwg4UC3QBbbMeMnw7NZBNRtcGco";FaceEngine faceEngine = new FaceEngine("D:\\Java\\faceDrive");log.info("faceEngine:{}",faceEngine);//激活引擎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("C:\\Users\\DELL\\Desktop\\aa\\21.jpg"));List<FaceInfo> faceInfoList = new ArrayList<FaceInfo>();errorCode = faceEngine.detectFaces(imageInfo.getImageData(), imageInfo.getWidth(), imageInfo.getHeight(), imageInfo.getImageFormat(), faceInfoList);System.out.println(faceInfoList);log.info("人脸检测接口返回值为{}", 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);//人脸检测2ImageInfo imageInfo2 = getRGBData(new File("C:\\Users\\DELL\\Desktop\\aa\\21.jpg"));List<FaceInfo> faceInfoList2 = new ArrayList<FaceInfo>();errorCode = faceEngine.detectFaces(imageInfo2.getImageData(), imageInfo2.getWidth(), imageInfo2.getHeight(),imageInfo2.getImageFormat(), faceInfoList2);System.out.println(faceInfoList2);//特征提取2FaceFeature 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属性处理ImageInfo imageInfoGray = getGrayData(new File("C:\\Users\\DELL\\Desktop\\aa\\21.jpg"));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());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();}
}
http://www.lryc.cn/news/278553.html

相关文章:

  • Maven 依赖管理项目构建工具 教程
  • 供应链+低代码,实现数字化【共赢链】转型新策略
  • [力扣 Hot100]Day3 最长连续序列
  • 【办公技巧】Word功能区灰色显示不能编辑,怎么破?
  • 全志V853开发板原理图
  • 【解决】Unity Project 面板资源显示丢失的异常问题处理
  • Hyperledger Fabric Docker 方式多机部署生产网络
  • 高效降压控制器FP7132XR:为高亮度LED提供稳定可靠的电源
  • Spring Boot - Application Events 的发布顺序_ApplicationEnvironmentPreparedEvent
  • 华为HCIE课堂笔记第十三章 IPv6地址配置
  • 计算机网络-VLAN间通信
  • vue3的福音框架arco.design
  • BSP视频教程第29期:J1939协议栈CAN总线专题,源码框架,执行流程和应用实战解析,面向车通讯,充电桩,模组通信等(2024-01-08)
  • Java lambda表达式如何自定义一个toList Collector
  • 【hcie-cloud】【18】华为云Stack灾备服务介绍【容灾解决方案介绍、灾备方案架构介绍、管理组件灾备方案介绍、高阶云服务容灾简介、缩略词】【下】
  • linux建立软链接——以matlab为例
  • ubuntu20固定串口名称
  • 扩散模型(二)——DDIM学习笔记-大白话推导
  • 【软件测试作业_TPshop商城】农业工程学院-测试需求分析与测试计划+自动化+性能+测试用例+报告软件缺陷+测试计划+单元测试+系统测试
  • 屏幕截图编辑工具Snagit中文
  • 12GoF之代理模式
  • Unity中URP下实现能量罩(扭曲流光花纹)
  • 南京银行高管上新:“70后董事长”谢宁将上任,能否及时救场?
  • K8S容器编排基本使用
  • PyTorch 各种池化层函数全览与用法演示
  • Redis:原理速成+项目实战——Redis实战7(优惠券秒杀+细节解决超卖、一人一单问题)
  • 【刷题笔记3】
  • YOLOv8优化策略:轻量化改进 | 华为Ghostnet,超越谷歌MobileNet | CVPR2020
  • 格雷希尔G65系列快速接头满足汽车减震器的气压、油压测试要求
  • php中常用的几个安全函数