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

趁空闲的一点点时间向大家分享一个好用的人脸识别的应用——来自虹软公司的人脸识别
推荐这家的产品主要有以下几个理由~
1、免费!免费!免费!
它家比较良心。人脸识别、人证核验、活体检测等等一切的sdk都是免费下载使用的- -即使商用也可以~非常适合我这种小穷人
2、根据不同操作平台提供不同的SDK
目前可下载Windows x86,x64平台(c++/Java语言)、Linux x64平台(c++/Java语言)、iOS平台(Objective-C语言)与Android arm32平台(Java语言)
3、官方针对各版本的SDK均提供了对应的Demo,下载的SDK包里面有示例代码可以参考
这里丢个地址来算了……想试用demo的可以去下:https://ai.arcsoft.com.cn/ucenter/resource/build/index.html#/demoList
除官方提供的demo以外,如需使用其它语言开发,也可以自行封装。
4、虹软的人脸识别是应用于离线开发的,因为不需要网络,所以它的识别速度较快。
只有首次激活需要联网,后面就都可以离线用了,比较方便~

好了,废话不多说,接下来就开始教大家怎样使用了。

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

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

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,
                                                                                      hei,
                                                                                     AFR_FSDKEngine.CP_PAF_NV21,
                                                                                     new Rect(result_fd.get(0).getRect()),
                                                                                     result_fd.get(0).getDegree(),
                                                                                     face2); 

最后的比对的相似度信息存放在score中, float score_face = score.getScore(); 我们可以通过这种方式得到 我们想要的相似度信息,最后得到的数据是float类型的。
注意:
1、在使用照片的时候,分辨率大小最好是偶数的,不然会发生未知的错误。 图像尺寸限制宽高大于0,宽度为4的倍数,YUYV/I420/NV21/NV12格式的图片高度为2的倍数,BGR24格式的图片高度不限制。
2、在进行人脸信息提取的时候,会耗时,耗时的时长,是根据设备的CPU处理能力来说的。
好了,先分享这么多,后面再慢慢写使用体会,也欢迎大家与我交流~
如果有想体验虹软人脸识别功能的,链接拿去~:虹软开放平台

原文地址:https://blog.51cto.com/14633836/2457530

时间: 2024-10-06 07:48:32

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

虹软人脸识别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

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

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

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

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

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

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

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

虹软的人脸识别是应用与离线开发的,因为不需要网络,所以它的识别速度较快.好了,废话不多说,接下来就开始教大家怎样使用了. 1.首先就是去官网申请APPKEY,各种密匙,然后在下载jar包,这些就不一一给大家讲解了.注意一下,要在app的gradle里面加上 sourceSets { main { jniLibs.srcDirs = ['libs'] } } 这句话,不然可能会造成so库加载不了的错误. 2.接下里就需要进行开发了.就拿人脸检测的功能来说吧,首先需要对引擎初始化, AFD_FSDK

虹软人脸识别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是分开的,所以需要一一解压,然后整理一下如下: 在项目里建立如下文件

asp.net 虹软 人脸识别 实现刷脸住宿、刷脸签到、刷脸进入等

先看看效果图,我把demo改成自动运行了,暂时借用别人的图片: 最左侧的大图为选择上传的, 中间的小图是大图的脸, 右侧的大图是人脸文件夹中已经存在的,并且相似度较高的一张脸,也就是比对的结果. 先记录下思路,代码整理好再贴出来. 阿里云和腾讯都有人脸识别的接口,但是图片需要上传到他们的服务器, 并且,接口返回的不是我想要的东西,经过千辛万苦,终于找到了虹软, http://www.arcsoft.com.cn/ai/arcface.html 开源就必须赞一个,并且支持自己搭建服务器,正是我需要