虹软人脸识别的应用开发过程分享

虹软的人脸识别是应用与离线开发的,因为不需要网络,所以它的识别速度较快。
好了,废话不多说,接下来就开始教大家怎样使用了。

1.首先就是去官网申请APPKEY,各种密匙,然后在下载jar包,这些就不一一给大家讲解了。注意一下,要在app的gradle里面加上

sourceSets {
main {
jniLibs.srcDirs = [‘libs‘]
}
}

  

这句话,不然可能会造成so库加载不了的错误。

2.接下里就需要进行开发了。
就拿人脸检测的功能来说吧,首先需要
对引擎初始化,

AFD_FSDKEngine engine1 = new AFD_FSDKEngine(); AFD_FSDKError err = engine1.AFD_FSDK_InitialFaceEngine(Config.APP_ID, Config.FD_KEY, AFD_FSDKEngine.AFD_OPF_0_HIGHER_EXT, 16, 5);

  

我们还需要一个集合,用来存放我们检测到的人脸,

List<AFD_FSDKFace> result = new ArrayList<AFD_FSDKFace>();//新建AFD_FSDKFacejihe,用于存放识别的人脸信息

  

接下来我们就可以进行人脸的检测了,但是对于照片的选取和格式是有要求的,所以我们需要对照片进行格式处理一下。

Bitmap bitmap1 = decodeImage(path1);//path是照片的路径,先选取照片,转化为bitmap
byte[] data1 = getNv21(bitmap1);//再将bitmap转化为NV21格式的

  

下面是工具类decodeImage和getNv21的代码:

//getNv21 和 decodeImage 是照片格式的转化工具
public byte[] getNv21(Bitmap mBitmap) {
byte[] data = new byte[mBitmap.getWidth() * mBitmap.getHeight() * 3 / 2];
ImageConverter convert = new ImageConverter();
convert.initial(mBitmap.getWidth(), mBitmap.getHeight(), ImageConverter.CP_PAF_NV21);
if (convert.convert(mBitmap, data)) {
Log.e("TAG", "convert ok!");
}
convert.destroy();
return data;
}
public static Bitmap decodeImage(String path) {
Bitmap res;
try {
ExifInterface exif = new ExifInterface(path);
int orientation = exif.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_NORMAL);
BitmapFactory.Options op = new BitmapFactory.Options();
op.inSampleSize = 1;
op.inJustDecodeBounds = false; //op.inMutable = true;
res = BitmapFactory.decodeFile(path, op); //rotate and scale.
Matrix matrix = new Matrix();
if (orientation == ExifInterface.ORIENTATION_ROTATE_90) {
matrix.postRotate(90);
} else if (orientation == ExifInterface.ORIENTATION_ROTATE_180) {
matrix.postRotate(180);
} else if (orientation == ExifInterface.ORIENTATION_ROTATE_270) {
matrix.postRotate(270);
}
Bitmap temp = Bitmap.createBitmap(res, 0, 0, res.getWidth(), res.getHeight(), matrix, true);
Log.d("com.arcsoft", "check target Image:" + temp.getWidth() + "X" + temp.getHeight());
if (!temp.equals(res)) {
res.recycle();
}
return temp;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}

  

对格式进行转化完成后,就开始进行人脸的检测了。

err = engine1.AFD_FSDK_StillImageFaceDetection(data1, bitmap1.getWidth(), bitmap1.getHeight(), AFD_FSDKEngine.CP_PAF_NV21, result); Log.e("TAG", "getBit: " + result.size());

  

我们可以查看集合result的size,来确定是否检测到人脸。
在代码的最后,一定要对初始化的引擎进行销毁处理。不然程序会因为内存问题而崩溃。
engine1.AFD_FSDK_UninitialFaceEngine();
人脸对比是在人脸检测的基础上进行的,在一张照片上先检测到人脸的信息,然后再将人脸的信息进行比对。
List result = new ArrayList();
上面已经介绍了,检测到的人脸信息都是存放在result的集合中的,
然后是创建两个存放人脸点位信息的类

AFR_FSDKFace face1 = new AFR_FSDKFace();
AFR_FSDKFace face2 = new AFR_FSDKFace(); 将检测到的人脸信息的点位信息存放到 face类中
//新建两个AFR_FSDKFace类,保存人脸特征信息
AFR_FSDKFace face1 = new AFR_FSDKFace();
AFR_FSDKFace face2 = new AFR_FSDKFace(); //对人脸特征信息的检测
er = engine_camera.AFR_FSDK_ExtractFRFeature(data_image,
bitmap_idcard.getWidth(),
bitmap_idcard.getHeight(),
AFR_FSDKEngine.CP_PAF_NV21,
new Rect(result_image.get(0).getRect()),
result_image.get(0).getDegree(),
face1);
er = engine_camera.AFR_FSDK_ExtractFRFeature(data,
wid,

  

最后的比对的相似度信息存放在score中, float score_face = score.getScore();
我们可以通过这种方式得到 我们想要的相似度信息,最后得到的数据是float类型的。
*注意!
在使用照片的时候,分辨率大小最好是偶数的,不然会发生未知的错误。
在进行人脸信息提取的时候,会耗时,耗时的时长,是根据设备的CPU处理能力来说的。

原文地址:https://www.cnblogs.com/Zzz-/p/10795487.html

时间: 2024-08-30 08:01:09

虹软人脸识别的应用开发过程分享的相关文章

虹软人脸识别应用开发过程

趁空闲的一点点时间向大家分享一个好用的人脸识别的应用--来自虹软公司的人脸识别推荐这家的产品主要有以下几个理由~1.免费!免费!免费!它家比较良心.人脸识别.人证核验.活体检测等等一切的sdk都是免费下载使用的- -即使商用也可以~非常适合我这种小穷人2.根据不同操作平台提供不同的SDK目前可下载Windows x86,x64平台(c++/Java语言).Linux x64平台(c++/Java语言).iOS平台(Objective-C语言)与Android arm32平台(Java语言)3.官

Android 实现人脸识别教程[运用虹软人脸识别SDK]

基于虹软人脸识别引擎,在Android平台上实现人脸识别功能,即使在离线的情况下依旧运行,不被人采集个人照片的感觉,还是爽爽的.经过整个测试过来,虹软的人脸识别还是很强大的,人脸检测可以控制在20ms之内,人脸识别大概在200ms左右.今天就来分享一下开发经验 项目的目标 我们需要实现一个人脸识别功能.简单来说,就是机的后置摄像头,识别摄像头中实时拍到的人脸信息,如果人库注册过,则显示识别后的人脸信息,如登记的名字:如果不在,提示未注册. 这个功能具有多个应用场景,比如,火车站或者打卡和门禁系统

虹软人脸识别3.0 - 图像数据结构介绍(Android)

从虹软开放了2.0版本SDK以来,由于具有免费.离线使用的特点,我们公司在人脸识别门禁应用中使用了虹软SDK,识别效果还不错,因此比较关注虹软SDK的官方动态.近期上线了ArcFace 3.0 SDK版本,确实做了比较大的更新.首先本篇介绍一下关于Android平台算法的更新内容,下一篇将针对Windows平台的算法更新展开介绍. 特征比对支持比对模型选择,有生活照比对模型和人证比对模型 识别率.防***效果显著提升 特征值更新,升级后人脸库需重新注册 Android平台新增64位的SDK 图像

虹软人脸识别SDK在网络摄像头中的实际应用

目前在人脸识别领域中,网络摄像头的使用很普遍,但接入网络摄像头和人脸识别SDK有一定门槛,在此文章中有介绍过虹软人脸识别SDK的接入流程,本文着重介绍网络摄像头获取视频流并处理的流程(红色框内),以下内容仅供参考. 1.海康SDK接入基本流程 a.初始化并登录验证 NET_DVR_Init(); NET_DVR_DEVICEINFO_V30 struDeviceInfo = { 0 }; long lUserID = NET_DVR_Login_V30(m_cameraIp, m_cameraP

记C# 调用虹软人脸识别 那些坑

上一个东家是从事安防行业的,致力于人工智能领域,有自主人脸识别.步态识别的算法.C++同事比较称职有什么问题都可以第一时间反馈,并得到合理的处理,封装的DLL 是基于更高性能的GPU算法,可支持更多线路的运算,接口调用简单,只需要传入图片即可得到特征特征值.对于公司的项目,更多的是与各类接口进行交互.包括建立任务.上传视频.截取片段,抽取特征,学习特征,步态比对等对接接口的复杂业务逻辑.由于长期和C++接口对接,包括Kafka消息队列传输等,对于公司项目支撑的业务流程比较了解.至于底层算法,只是

虹软人脸识别3.0 - 图像数据结构介绍(C++)

从虹软开放了2.0版本SDK以来,由于具有免费.离线使用的特点,我们公司在人脸识别门禁应用中使用了虹软SDK,识别效果还不错,因此比较关注虹软SDK的官方动态.近期上线了ArcFace 3.0 SDK版本,确实做了比较大的更新.上一篇主要介绍了关于Android平台算法的改进,本篇将介绍一下关于Windows平台算法的更新. 特征比对支持比对模型选择,有生活照比对模型和人证比对模型 识别率.防***效果显著提升 特征值更新,升级后人脸库需重新注册 人脸检测同时支持全角度及单一角度 新增了一种图像

如何使用虹软人脸识别门禁应用套件

导语:虹软ArcFaceGo智慧门禁应用套件包括门禁软件APK.PC管理客户端和云端服务三部分,最快3分钟即可完成智慧门禁系统的部署,帮助中小型企业降低开发成本,加快实现产品智能化落地.本文来自开发者投稿. 应公司需求,最近开发了一款有考勤功能的人脸门禁应用. 相比传统密码门禁操作不便,指纹和刷卡门禁容易冒用和代打卡,刷脸门禁采用生物识别技术,必须本人刷脸才能起效,在原有门禁的基础上的改造也比较容易. 刷脸门禁虽好,然而最大问题是,我并没有从零开发一款人脸门禁的能力.多方研究之下,我选择了虹软A

虹软人脸识别SDK的接入方法

背景: 虹软的人脸识别还是不错的,在官方注册一个账号,成为开发者,下载SDK的jar包,在开发者中心,找一个demo就可以开始做了,安装里边的逻辑,先看理解代码,然后就可以控制代码,完成自己想要的功能 一:准备工作 注意: 1 sdk的下载,会给你4个jar包和4个秘钥以及1个appid,这个appid是用来绑定你的jar包,使用别人的会造成识别引擎启动失败, 下载文件如下: 这里需要把文件解压并整理,每个引擎的so文件和jar是分开的,所以需要一一解压,然后整理一下 如下: 在项目里建立如下文

怎么接入虹软人脸识别SDK

背景: 虹软的人脸识别还是不错的,在官方注册一个账号,成为开发者,下载SDK的jar包,在开发者中心,找一个demo就可以开始做了,安装里边的逻辑,先看理解代码,然后就可以控制代码,完成自己想要的功能 一:准备工作 注意: 1 sdk的下载,会给你4个jar包和4个秘钥以及1个appid,这个appid是用来绑定你的jar包,使用别人的会造成识别引擎启动失败, 下载文件如下: 这里需要把文件解压并整理,每个引擎的so文件和jar是分开的,所以需要一一解压,然后整理一下如下: 在项目里建立如下文件