虹软人脸识别应用开发过程分享(代码片段)

feishixin123 feishixin123     2023-01-07     180

关键词:

之前写了一个人脸识别demo,现在有时间向大家分享一波干货。  

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

**注意!
  在使用照片的时候,分辨率大小最好是偶数的,不然会发生未知的错误。
  在进行人脸信息提取的时候,会耗时,耗时的时长,是根据设备的CPU处理能力来说的。















虹软人脸识别应用开发过程(代码片段)

趁空闲的一点点时间向大家分享一个好用的人脸识别的应用——来自虹软公司的人脸识别推荐这家的产品主要有以下几个理由~1、免费!免费!免费!它家比较良心。人脸识别、人证核验、活体检测等等一切的sdk都是免费下载使... 查看详情

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

虹软的人脸识别是应用与离线开发的,因为不需要网络,所以它的识别速度较快。好了,废话不多说,接下来就开始教大家怎样使用了。1.首先就是去官网申请APPKEY,各种密匙,然后在下载jar包,这些就不一一给大家讲解了。注... 查看详情

虹软人脸识别——官方qtdemo移植到linux(代码片段)

...需要在Linux平台下开发一个人脸识别相关的应用,用到了虹软的人脸识别SDK。之前在Windows平台用过,感觉不错,SDK里面还带了Demo可以快速看到效果。打开Linux版本的SDK里面没有发现Demo,于是想着把Windows的Demo移植到Linux。这篇文... 查看详情

c#实现基于ffmpeg加虹软arcface的人脸识别demo(代码片段)

对开发库的C#封装,屏蔽使用细节,可以快速安全的调用人脸识别相关API。具体见github地址。新增对.NETCore的支持,在Linux(Ubuntu下)测试通过。具体的使用例子和Demo详解,参见博客地址。更新:增加对V1.1两个新功能的支持。关... 查看详情

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

导语:虹软ArcFaceGo智慧门禁应用套件包括门禁软件APK、PC管理客户端和云端服务三部分,最快3分钟即可完成智慧门禁系统的部署,帮助中小型企业降低开发成本,加快实现产品智能化落地。本文来自开发者投稿。应公司需求,最... 查看详情

[android]虹软arcface人脸识别sdk引擎使用总结(代码片段)

虹软开放了人脸识别的SDK引擎(免费的哦),刚好有Android版的,就体验了一波。下面来说说Android版的SDK使用心得:ArcFace虹软人脸认知引擎简介目前开放的版本有人脸比对(1:1)和人脸检索(1:N),根据应用场景可选择人脸检... 查看详情

android基于虹软sdk实现离线人脸识别(代码片段)

...两张人脸是否是同一个人。二、解决方案       选用虹软人脸识别SDK来实现人脸特征数据比对。三、步骤       1.打开虹软开发者中心 开发者中心       2.新建应用       3.获取APP_ID,SDK_KEY,ACTIVE_KEY    ... 查看详情

虹软人脸识别怎么样

大家有用过虹软人脸识别吗,看它是免费的,有多个平台版本,我们目前想用android与Windows的,听说其可以离线使用,有使用过的用户分享一下经验我们公司对比测试了几家人脸识别的,其他家都是API借口,虹软的是SDK离线运行... 查看详情

人脸识别项目ffmpeg+opencv+虹软sdk(代码片段)

一、注册虹软APP_ID:5vypHP9yEx3gq3s9Kf7tF4SVxfGaCBaJb5CkKfuiKNMzSDK_KEY:5vJZ7hRJfqj8eQdFvEBUg2meYgfGuuLyG9foTKUhBHxV二、下载源码三、修改源码我这里用的是Sourceinsight打开的源码。将asfort_manage.h文件中的APPID和SDKKEY替换成自己在刚刚注册的。四、移植... 查看详情

基于虹软(arcsoft)实现人脸识别——android版(代码片段)

基于虹软实现人脸识别效果图激活引擎第一步配置APP_ID和SDK_KEY第二步:判断是否添加动态链接库(so文件与jar包)第三步:判断是否申明所有权限人脸比对1:N第一步:初始化本地人脸库第二步:初始... 查看详情

虹软人脸识别sdk脸库是啥?

虹软人脸识别SDK脸库是什么?参考技术A虹软 最近开放了人脸识别的SDK引擎(免费的哦),刚好有Android版的,就体验了一波。下面来说说Android版的SDK使用心得:ArcFace虹软人脸认知引擎简介目前开放的版本有人脸比对(1:1)... 查看详情

虹软人脸识别-faceid及ir活体检测的介绍(代码片段)

前几天虹软推出了AndroidArcFace2.2版本的SDK,相比于2.1版本,2.2版本中的变化如下:?VIDEO模式新增faceId(类似于之前文章中提到的trackId)?新增IR活体检测功能?新增IR、RGB的活体阈值设置一、faceId介绍1.定义在连续的视频帧中,当一... 查看详情

人脸识别sdk虹软的好用吗?

...参考技术C很不错还有追踪效果准确率都很可观 参考技术D虹软人证核验应用方案运用人脸特征的唯一性,集人脸检测、人证比对、证件阅读等技术,快速识别身份证与持证人的真假,满足酒店、宾馆、车站、网吧、政府办事大厅... 查看详情

虹软人脸识别sdk2.0版本最多可以识别多少张人脸?

...体可以参考开发说明文档。参考技术A人脸库是您将经过虹软人脸认知引擎中的相关算法提取得到的人脸特征进行保存后形成的特征数据库 参考技术B上限是10000,还可以的,精度速度都很快,不过最好的应该是1-50之间 参考技术C... 查看详情

android人脸识别怎么集成sdk?

参考技术A应用写好调用就行了具体的可以看虹软的人脸识别安卓的demo,有很多人分享的 查看详情

基于android虹软人脸人证对比,活体检测

最近虹软新增了人证识别、活体检测的功能,好像之前的人脸识别也更新过版本,之前一篇文章用虹软AndroidSDK做人脸识别,写过虹软人脸识别的用法,最近把人脸识别、人证识别,活体检测功能都简单的封装了一下,使用起来... 查看详情

虹软人脸识别怎么样?

最近看到虹软既然免费提供人脸识别SDK,而且是离线版本的,我们自己测试检测人脸控制在20ms左右,提取特征点在200ms左右,人脸跟踪速度比检测速度更快,基本在10ms之内,不知道有没有人更深入的测试过。整体来说虹软的人... 查看详情

虹软人脸识别sdk(java+linux/window)

虹软官网:http://www.arcsoft.com.cn/登录后要实名认证才可以使用sdk。下图这两个是我选择的,window版本地开发测试,linux版是生产环境使用。1.保存激活码,下载sdk包。2.将动态链接库.dll或.so放在java.libary.path目录(否则执行时会报错)... 查看详情