使用虹软ArcFac,java 离线SDK 进行人脸识别
公司项目需要人脸识别登录,需要支持离线识别,所以无法使用在线的人脸识别的API,于是使用到了离线SDK来对比识别人脸相识度.
获取人脸抓拍的图片需要对接设备,这里不做记录,假设我们已经获取到了人脸图片,只调用SDK将抓拍的人脸图片与已有的进行人脸库图片对比,具体步骤如下:
1. 注册账号,实名认证
https://ai.arcsoft.com.cn/ucenter/user/userlogin
2. 创建应用,在我的应用里面添加SDK,下载sdk到本地

3. 解压SDK,将SDK下的libs文件夹的库文件放到jdk下的lib文件夹下

4. 将SDK libs文件夹下的jar文件导入项目,然后buildpath

5. 编写测试代码,进行人脸比对
package net.nblh.faceRecognition.util.faceCompare; import static com.arcsoft.face.toolkit.ImageFactory.getRGBData;
import java.io.File;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import com.arcsoft.face.EngineConfiguration;
import com.arcsoft.face.FaceEngine;
import com.arcsoft.face.FaceFeature;
import com.arcsoft.face.FaceInfo;
import com.arcsoft.face.FaceSimilar;
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.ImageInfo; /** * 使用虹软SDK 进行人脸比对 * @author qxl */ public class ArcFaceCompare { /** * 初始化引擎 * @param appId * @param sdkKey * @return */ public static FaceEngine initFaceEngine(String appId,String sdkKey) { FaceEngine faceEngine = new FaceEngine(); // 激活引擎 int activeCode = faceEngine.activeOnline(appId, sdkKey); if (activeCode != ErrorInfo.MOK.getValue() && activeCode != ErrorInfo.MERR_ASF_ALREADY_ACTIVATED.getValue()) { System.out.println("引擎激活失败"); return null; } // 引擎配置 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("初始化引擎失败"); return null; } return faceEngine; } /** * 人脸图片比对 * @param faceEngine 人脸识别引擎对象 * @param picPath1 人脸图片1路径 * @param picPath2 人脸图片2路径 * @return */ public static float faceCompare(FaceEngine faceEngine,String picPath1,String picPath2) { // 人脸检测 ImageInfo imageInfo = getRGBData(new File(picPath1)); 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(picPath2)); 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); float score = faceSimilar.getScore(); BigDecimal b = new BigDecimal(score); //四舍五入,保留四位小数 float similarity =b.setScale(4,BigDecimal.ROUND_HALF_UP).floatValue(); System.out.println("相似度:" + similarity); return similarity; } /** * 卸载引擎 * @param faceEngine */ public static void uninstall(FaceEngine faceEngine) { faceEngine.unInit(); } public static void main(String[] args) { String appId = "图2创建应用的APP ID"; String sdkKey = "图2创建应用的SDK Key"; //初始化引擎 FaceEngine faceEngine = initFaceEngine(appId,sdkKey); //进行人脸比对 String picPath1 = "F:\\qxlTest\\1.jpg"; String picPath2 = "F:\\qxlTest\\9.jpg"; float similarity = faceCompare(faceEngine, picPath1, picPath2); //卸载引擎 uninstall(faceEngine); } }
6.运行main方法测试
注意事项:
A: 虹软人脸识别离线 SDK 每台机器对应一个SDK,第一次激活SDK会与机器绑定,不同的机器需要下载新的SDK
B: 离线 SDK自下载之日起,有效期一年,一年使用时间过后,需要重新下载最新版,同时更新对应的 dll文件, appid 和sdkkey,更新之后请更新以上的APP ID 和 SDK KEY
C: 具体详见官网 https://ai.arcsoft.com.cn/
使用虹软ArcFac,java 离线SDK 进行人脸识别的更多相关文章
- C# 虹软离线SDK引擎 人脸识别
一,背景 整体来说虹软的人脸识别SDK还是不错的.我们测试过Face++的,百度的,腾讯的,都是在线联网的,需要把上传数据到它们服务器,不利商业用途:虹软SDK支持离线. 二,下载虹软SDK 1.注册 ...
- C# 虹软SDK视频人脸识别和注册
一,准备工作 1.Afoge视频参数类 using AForge.Video.DirectShow; using System; using System.Collections.Generic; u ...
- Android 用虹软SDK做人脸识别
人脸识别第三方sdk比较多,但是大多都是收费的或者限制次数什么的,虹软的效果还不错,全免费也不需要联网 V1.2版本使用和快速集成:https://www.jianshu.com/p/8dee89ec ...
- java基于OpenCV的人脸识别
基于Java简单的人脸和人眼识别程序 使用这个程序之前必须先安装配置OpenCV详细教程见:https://www.cnblogs.com/prodigal-son/p/12768948.html 注 ...
- 利用Java调用OpenCV进行人脸识别
详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt409 今天我准备学习如何用Java来进行人脸检测.人脸检测有助于在任何数字图 ...
- SUSE Linux Enterprise 11 离线安装 DLIB 人脸识别 python机器学习模块
python机器学习模块安装 我的博客:http://www.cnblogs.com/wglIT/p/7525046.html 环境:SUSE Linux Enterprise 11 sp4 离线安 ...
- java 虹软ArcFace 2.0,java SDK使用、人脸识别-抽取人脸特征并做比对
java人脸识别 虹软ArcFace 2.0,java SDK使用.人脸识别-抽取人脸特征并做比对 虹软产品地址:http://ai.arcsoft.com.cn/product/arcface.ht ...
- 用 Java 实现人脸识别功能(附源码)
整理了一些Java方面的架构.面试资料(微服务.集群.分布式.中间件等),有需要的小伙伴可以关注公众号[程序员内点事],无套路自行领取 更多优选 一口气说出 9种 分布式ID生成方式,面试官有点懵了 ...
- atitit.人脸识别的应用场景and使用最佳实践 java .net php
atitit.人脸识别的应用场景and使用最佳实践 java .net php 1. 人脸识别的应用场景 1 2. 框架选型 JNI2OpenCV.dll and JavaCV 1 3. Url ap ...
随机推荐
- 【Python】解析Python中的装饰器
python中的函数也是对象,函数可以被当作变量传递. 装饰器在python中功能非常强大,装饰器允许对原有函数行为进行扩展,而不用硬编码的方式,它提供了一种面向切面的访问方式. 装饰器 一个普通的装 ...
- t5_sumdoc.txt
C:\Users\Administrator\Documents\sumdoc 2019\sumdoc t5 final\sumdoc t511C:\Users\Administrator\Docum ...
- 面试突击(六)——JVM如何实现JAVA代码一次编写到处运行的?
声明:本文图片均来自网络,我只是进行了选择,利用一图胜千言的力量来帮助自己快速的回忆相关的知识点 JVM是 JAVA Virtual Machine 三个英文单词的首字母缩写,翻译成中文就是Java虚 ...
- mac node配置path
一.查看node安装路径 whitch node 二.打开配置文件 vi ./.bash_profile 三.添加一行PATH(按i进入insert才能编辑) export NODE_HOME=&qu ...
- (原)关于OpenSL ES播放音频数据的一个奇怪的问题
关于OpenSL ES播放音频数据的一个奇怪的问题 Author:lihaiping1603@aliyun.com 最近用业余时间做了一个android平台的播放器sdk,其中视频用的opengl e ...
- OpenShift 4.2环境离线部署Operatorhub
缺省离线环境安装的ocp4的Operatorhub是没有内容的.详细离线文档参考官网文档 https://docs.openshift.com/container-platform/4.2/opera ...
- nginx使用与配置入门指南
这是一篇关于nginx使用与配置的入门指南,但不包括nginx的编译与安装.我假定你知晓如何安装nginx.对大多数Linux系统来说,nginx都已经存在于它们的软件包里,直接使用系统提供的软件管理 ...
- 最新超简单解读torchvision
torchvision https://pytorch.org/docs/stable/torchvision/index.html#module-torchvision The torchvisio ...
- 服务器BMC资料整理
1. 现在服务器都有BMC管理了,可以直接连上服务器进行处理. bios里面进行简单设置就可以了, 连接上IPMI的口进行管理. 2. 可以使用 远程控制安装操作系统. 安装系统时 比较清楚的能够看到 ...
- [转帖]Masscan教程和入门手册
Masscan教程和入门手册 https://www.4hou.com/tools/8251.html 愣娃 安全工具 2017年11月1日发布 收藏 导语:masscan是为了尽可能快地扫描整个互联 ...