其他分享
首页 > 其他分享> > Android 虹软3.0SDK集成相关(人脸1:N视频流)

Android 虹软3.0SDK集成相关(人脸1:N视频流)

作者:互联网

前言

关于如何集成,各个API的作用,大家可以直接去官网看文档。
https://ai.arcsoft.com.cn/product/arcface.html

在下载SDK后,一定要看一看SDK带的示例demo,由于我的业务需求主要是人脸和视频流之间的对比,如果你跟我一样的画,可以直接看demo中的RegisterAndRecognizeActivity

demo中判断识别成功的位置

由于我们一般集成这个sdk只是为了实现相关业务,我们首先关心的就是在哪里可以判断识别成功
RegisterAndRecognizeActivitydrawPreviewInfo方法中

demo中人脸库在哪里

demo中人脸库是FaceServer这个管理类来管理的。
注册的人脸照片、人脸特征信息保存到了文件中,每次启动这个界面的时候,都会调用人脸库初始化方法,也就是FaceServer类的initFaceList方法,初始化就是将文件的信息读取到List中

在这里插入图片描述

识别的过程

在这里插入图片描述
参数nv21就是每一时刻的帧数据。

 List<FacePreviewInfo> facePreviewInfoList = faceHelper.onPreviewFrame(nv21);

这行代码的作用是将nv21数据给到facehelper类,返回来人脸信息。

继续往下看

faceHelper.requestFaceFeature(nv21, facePreviewInfoList.get(i).getFaceInfo(), previewSize.width, previewSize.height, FaceEngine.CP_PAF_NV21, facePreviewInfoList.get(i).getTrackId());

这一行就是对每一个前面返回的人脸信息进行提取特征的操作。

提取到特征后就去人脸库中搜索
可以看RegisterAndRecognizeActivity中的initCamera()方法,在这个方法中有一个监听器FaceListener,监听器中的onFaceFeatureInfoGet方法参数feature就是刚才提取到的特征,可以看到
在这里插入图片描述
demo中是调用searchface方法进行搜索的,我们去searchface方法中看一看(这个方法中,主要使用了rxjava的知识,rxjava是观察者模式的典型,大家可以去了解一下,这里不再赘述。)
在这里插入图片描述
注意看的是它调用了faceserver人脸库管理类的getTopOfFaceLib方法,这就是具体比较特征的地方。
在这里插入图片描述
可以看到调用了compareFaceFeature这个方法,这个方法我们不需要观察怎么实现,这是虹软为我们提供的比较人脸特征的接口,官方文档中也有写。

让我们回到刚才的searchFace方法中来再看看
getTopOfFaceLib这个方法返回了一个比较结果的对象,包括相似度等信息,并且再下一行将比较结果给到了OnNext方法,如果了解观察者模式的话,可以说是把比较结果给到了观察者。

观察者做了什么呢?
在这里插入图片描述
首先是进行了一大堆错误情况判断。
继续往下看
在这里插入图片描述
如果是成功的,就会将这个特征给到requestFeatureStatusMap这个结构。
然后drawPreviewInfo方法就会依靠于这个结构来进行判断,从而画出人脸识别成功的那个框。
在这里插入图片描述

阳光大男孩!!! 发布了220 篇原创文章 · 获赞 103 · 访问量 5万+ 私信 关注

标签:这个,虹软,nv21,特征,demo,视频流,人脸,3.0,方法
来源: https://blog.csdn.net/weixin_43889841/article/details/104160551