Android 虹软3.0SDK集成相关(人脸1:N视频流)
前言
关于如何集成,各个API的作用,大家可以直接去官网看文档。
https://ai.arcsoft.com.cn/product/arcface.html
在下载SDK后,一定要看一看SDK带的示例demo,由于我的业务需求主要是人脸和视频流之间的对比,如果你跟我一样的画,可以直接看demo中的RegisterAndRecognizeActivity
。
demo中判断识别成功的位置
由于我们一般集成这个sdk只是为了实现相关业务,我们首先关心的就是在哪里可以判断识别成功
在RegisterAndRecognizeActivity
的 drawPreviewInfo
方法中
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
方法就会依靠于这个结构来进行判断,从而画出人脸识别成功的那个框。
还没有评论,来说两句吧...