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

zzz- zzz-     2022-12-09     690

关键词:

最近虹软新增了人证识别、活体检测的功能,好像之前的人脸识别也更新过版本,之前一篇文章用虹软Android SDK做人脸识

别,写过虹软人脸识别的用法,最近把人脸识别、人证识别,活体检测功能都简单的封装了一下,使用起来可以更简单一点;

但是由于appkey是和so库绑定的,所以不能直接依赖,需要下载项目换成自己的so库就能使用或者发布了,还是挺方便的

虹软人脸识别库的介绍``
so库和appkey是绑定的

以人脸识别为例,它包括人脸检测、人脸追踪、人脸识别、年龄识别、性别识别这5种引擎,每个引擎都有一个so库和jar包,申请的5种AppKey和APPID是和自己下载的so库是绑定的,不能混淆使用

人脸检测(FD)

用于获取静态图片的人脸的位置和角度,传入格式为NV21的图片数据(byte[]),返回一个AFD_FSDKFace对象的集合,AFD_FSDKFace只储存了一个位置和角度;如果用于视频流里面好像也不报错

public class AFD_FSDKFace 
Rect mRect;
int mDegree;

  

人脸追踪(FT)

和人脸检测一样,也是用来获取人脸的位置和角度,不过只适用于获取视频流的人脸,也就是在相机的onPreviewFrame方法里面使用,返回的是AFT_FSDKFace对象的集合,也只储存了一个位置和角度;如果用于静态图片好像是会报错的

public class AFT_FSDKFace 
Rect mRect;
int mDegree;

  

人脸识别(FR)

用于获取人脸特征和对比人脸特征的
获取人脸特征,需要传入格式为NV21的图片数据(byte[])和人脸的位置、人脸的角度,所以需要先用前面的引擎获取到人脸的信息,返回一个AFR_FSDKFace对象,这个对象也只保存了人脸特征(byte[])
对比人脸,需要传入两个AFR_FSDKFace对象,返回一个AFR_FSDKMatching对象,只保存了相似度

public class AFR_FSDKFace 
public static final int FEATURE_SIZE = 22020;
byte[] mFeatureData;
public class AFR_FSDKMatching 
float mScore = 0.0F;

  

活体检测

活体检测是检测是不是活人的,也是传入人脸的位置、人脸的角度,又是一个新的FaceInfo对象,传入的是FaceInfo的集合,返回LivenessInfo集合,但是目前只支持单人脸我们只管第一个数据,LivenessInfo里面保存的返回的结果,活体、非活体、人脸超过一个、未知错误(经常返回,问题不大)

人证对比

用来对比人脸和身份证的,传入传入格式为NV21的证件照片(byte[])和人脸的照片,还有各自的图片大小和比对阈值;返回一个CompareResult对象,包括相似度、是否成功等信息

public class CompareResult 
private boolean isSuccess;
private double result;

  

人证识别其实是人脸识别的那几个引擎(FD,FT,FR)的集合,所以有同时集成肯定包冲突了,可以使用人脸识别的so库,然后把人脸识别的jar包都删了,使用人证的jar包,人证的激活码使用FR的激活码就行了
![在这里插入图片描述](http://static.zybuluo.com/Tyhj/1y4h9mbk7xlf9urpx18oseeq/%E5%B1%8F%E5%B9%95%E5%BF%AB%E7%85%A7%202018-10-11%20%E4%B8%8B%E5%8D%883.41.05.png)
屏幕快照 2018-10-11 下午3.41.05.png-15.5kB

 

其他的年龄、性别的引擎应该都差不多

封装后的部分功能的展示

初始化AppKey和APPID

new AcrFaceManagerBuilder().setContext(this)
.setFreeSdkAppId(Constants.FREESDKAPPID)
.setFdSdkKey(Constants.FDSDKKEY)
.setFtSdkKey(Constants.FTSDKKEY)
.setFrSdkKey(Constants.FRSDKKEY)
.setLivenessAppId(Constants.LIVENESSAPPID)
.setLivenessSdkKey(Constants.LIVENESSSDKKEY)
.create();

  

相机预览追踪人脸位置

//初始化人脸追踪引擎
FaceTrackService faceTrackService = new FaceTrackService();
//设置传入的图片的大小
faceTrackService.setSize(previewSize.width, previewSize.height);
camera.setPreviewCallback(new Camera.PreviewCallback() 
@Override
public void onPreviewFrame(byte[] data, Camera camera) 
//获取人脸的位置信息
List<AFT_FSDKFace> fsdkFaces = faceTrackService.getFtfaces(data);
//画出人脸的位置
drawFaceRect(fsdkFaces);
//输出数据进行其他处理
cameraPreviewListener.onPreviewData(data.clone(), fsdkFaces);
...

);

  


相机自己实现,获取人脸位置的代码非常简单,就一句代码,画出人脸的位置实现是用了两个surfaceView,一个用于相机画面展示,另一个画出人脸的位置

画出人脸的位置

值得注意的是获取的人脸的位置Rect是传入的图片的相对位置,图片大小是相机预览设置的大小,画的时候是画在了surfaceView上面,surfaceView一般和预览大小是不一样的,而且还要考虑画面是否旋转、相机的位置等,所以需要先进行转换

Rect rect1=DrawUtils.adjustRect(rect, previewSizeX, previewSizeY,canvas.getWidth(), canvas.getHeight(), cameraOri, cameraId);

  


获取人脸特征进行注册

//初始化人脸识别引擎
FaceRecognitionService faceRecognitionService = new FaceRecognitionService();
faceRecognitionService.setSize(width, height);
//获取人脸特征
AFR_FSDKFace afr_fsdkFace =faceRecognitionService.faceData(data, aft_fsdkFace.getRect(), aft_fsdkFace.getDegree());
tv_status.setText("人脸特征为:" + afr_fsdkFace.getFeatureData());

  

aft_fsdkFace为上一步获取的人脸的位置信息

相机获取的人脸和已保存的人脸进行对比

//获取保存的人脸特征
byte[] faceData=faces.get(0).getData();
//对比人脸特征
float socre=faceRecognitionService.faceRecognition(afr_fsdkFace.getFeatureData(),faceData);
tv_status.setText("相似度为:" + sorce);

  


afr_fsdkFace为上一步获取的人脸的特征,faceData为已保存的人脸特征,也有提供一个人脸和多个对比获取相似度最高的一个的方法

活体检测

//激活活体检测
LivenessService.activeEngine(new LivenessActiveListener() 
@Override
public void activeSucceed() 
toast("激活成功");


@Override
public void activeFail(String massage) 
LogUtils.log(massage);
toast("激活失败:" + massage);

);
LivenessService livenessService = new LivenessService();
//
List<FaceInfo> faceInfos = new ArrayList<>();
faceInfos.add(new FaceInfo(aft_fsdkFace.getRect(), aft_fsdkFace.getDegree()));
//判断是否是活体
boolean isLive=livenessService.isLive(faceInfos,data);
aft_fsdkFace为上一步获取的人脸的位置信息,第一次激活好像需要联网

  


人证对比

//初始化
IdCardVerifyManager.getInstance().init(Constants.IDCARDAPPID, Constants.FRSDKKEY);
//bitmap转NV21数据
byte[] nv21Data = ImageUtils.getNV21(bitmap.getWidth(), bitmap.getHeight(), bitmap);
//传入证件照片
DetectFaceResult result = IdCardVerifyManager.getInstance().inputIdCardData(nv21Data, bitmap.getWidth(), bitmap.getHeight());
//传入相机获取的人脸数据
DetectFaceResult result = IdCardVerifyManager.getInstance().onPreviewData(data, mWidth, mHeight, true);
//对比相似度
CompareResult compareResult = IdCardVerifyManager.getInstance().compareFeature(THRESHOLD);
if (compareResult.isSuccess()) 
tv_status.setText("相似度为:" + compareResult.getResult());

  

证件图片是本地的,转成了NV21的格式的byte数组,方法也集成了

图片获取人脸特征

//先把bitmap转NV21格式
byte[] photoData = ImageUtils.getNV21(bitmap1.getWidth(), bitmap1.getHeight(), bitmap1);
//获取人脸位置信息
List<AFD_FSDKFace> afd_fsdkFaces = faceFindService.findFace(photoData);
for (AFD_FSDKFace afdFsdkFace : afd_fsdkFaces) 
//获取每一个人脸的特征
AFR_FSDKFace afr_fsdkFace = faceRecognitionService.faceData(photoData, afdFsdkFace.getRect(), afdFsdkFace.getDegree());

  


引擎释放

livenessService.destoryEngine();
faceTrackService.destoryEngine();
faceRecognitionService.destroyEngine();
IdCardVerifyManager.getInstance().unInit();

  


效果都还不错,主要是全部免费,源码下载可以直接运行,可以查看所有功能

技术图片

 


屏幕快照 2018-10-11 下午4.50.30.png-32.4kB

demo下载地址:http://oy5r220jg.bkt.clouddn.com/arcface_v1.0.3.apk
项目地址:https://github.com/tyhjh/Arcface

SDK下载地址:https://ai.arcsoft.com.cn/ucenter/user/reg?utm_source=csdn1&utm_medium=referral

虹软人脸识别活体检测只有android版本的嘛?

现在开放平台单独的活体检测只有安卓版本的刚上线的2.1集成了其他平台的参考技术A准备工作1.进入http://ai.arcsoft.com.cn/product/arcface.html网站,注册账号并登录2.选择需要下载的SDK版本填写下载申请,并提交点击提交后获得APPID和SD... 查看详情

虹软人脸识别活体检测有没有用过的,效果怎么样?

...和视频是过不了的,基本能满足我们的要求。 参考技术B虹软人脸识别活体检测是一种新型的识别方式,用在确认身份的场所,我单位机房就是用虹软人脸识别活体检测的方式来识别解锁,安全性比较高,用起来也比较方便。 参... 查看详情

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

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

[计算机视觉]人脸应用:人脸检测人脸对比五官检测眨眼检测活体检测疲劳检测

...觉体系中占很大一块,在深度学习火起来之前,基于传统机器学习的人脸应用就已经很成熟了,有很多商用应用场景。本文用一个可以实际运行的Demo来说明人脸应用中常见的技术概念,包含‘人脸检测’、‘人脸... 查看详情

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

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

听说虹软的人脸识别算法已经升级到3.0的版本了,更新了啥功能啊?

...发效率上进行了整体提升本回答被提问者采纳 参考技术B虹软的人脸识别到3.0版本,主要更新了三点一线,智能识别人脸,包括眼睛,鼻子,眨眼睛就能识别 参考技术C主要是提高了人脸识别的速度吧,让你不再为这些的担忧。 ... 查看详情

我们公司要做人脸识别的考勤,哪里有免费的活体检测安卓版本sdk?可以识别真人的

...试试云脉的,在云脉的SDK开发者平台就可以下载,适用于Android、ISO、Windows等各种系统的。 查看详情

虹软人脸识别怎么样

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

有没有支持多人人脸识别的算法,要识别的人脸比较多

.../在打开活体开关的情况下如何实现多人同时识别?虹软Android2.2版本demo——在faceHelper里去掉keepMaxFace那句代码(demo画框设置了只画最大人脸框),并关闭活体,通过faceID的判断可以实现多人脸识别。2、Android2.0/2.1/2.2版本,并可... 查看详情

人脸识别活体检测技术讨论:基于背景人脸相对运动的活体判断方法

...各行业的重要竞争力。目前活体判断的方法很多,但很难基于一种方法就能达到理想的效果,往往需要多种算法的交叉判断,本文主要介绍一种简单有效的活体判断方法。在很多情况下,高清照片和真人在某些光线条件下在相机... 查看详情

基于人脸识别技术实战开发人证比对访客系统

最近有个小区用到了虹软的人脸识别,效果还不错。又有一个项目要用人证访客对比,分享一下项目,希望可以帮到有需要的。码字前先上项目地址:https://gitee.com/panmingzhi/IdCardFaceIdentifier首先是读证的问题,我们使用的是华视CV... 查看详情

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

一、需求       Android端实现离线人脸识别功能,即对比两张人脸是否是同一个人。二、解决方案       选用虹软人脸识别SDK来实现人脸特征数据比对。三、步骤       1.打开虹软开发者中心 开发者中心       ... 查看详情

java虹软arcface2.0,javasdk使用-进行人脸检测

虹软产品地址:http://ai.arcsoft.com.cn/product/arcface.html虹软ArcFace功能简介人脸检测人脸跟踪人脸属性检测(性别、年龄)人脸三维角度检测人脸对比示例代码说明,其中图片操作部分用到了javacv,javacv中针对opencv进行了一些封装,... 查看详情

opencv怎么实现人脸识别活体检测?

...存档目录中。不要忘记连接好摄像头。 参考技术B我记得虹软新出的人脸识别SDK是的带有活体检测功能的,他们之前的SDK就有接入opencv的方案的,你可以虹软官方的开发者中心去看看具体有没有接入openc 查看详情

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

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

[android]虹软人脸检测与人脸识别集成分享(代码片段)

目前我们的应用内使用了ArcFace的人脸检测功能,其他的我们并不了解,所以这里就和大家分享一下我们的集成过程和一些使用心得 集成ArcFaceFD的集成过程非常简单在ArcFaceFD的文档上有说明支持的系统为5.0及以上系统,但其... 查看详情

人脸识别算法虹软arcface和dlib对比

...,而且一旦我们的设备掉线了就无法使用人脸识别功能。基于这些考虑,我司需要寻找其他的方案。通过搜索,目前发现,开源或免费支持离线的方案也有不少。目前初步考虑虹软ArcFace和Dlib。通过官方的demo和网上的资料,写了... 查看详情

如何通过活体检测

...以防御非(类)人脸材质假体。红外FMP检测在暗光环境下,基于红外摄像头及IR泛光图检测。。参考技术A听起来是不是有些奇怪?人类可以仅通过视觉就完成生物和物体的辨别,然而机器需要通过学习才能进行这项检测。正如刷脸... 查看详情