Android-SDK-常见问题
Android 8.0人脸离线识别SDK常见问题
1误识别问题
1.1误识底图与识别图片得分过高导致误识别
通常为底图与识别图五官相似度较高导致,请保留误识别时的识别图片与误识别底图,以便方便排查,保存方式请参考SaveImageManager文件,图片会存储在sdcard/Save-Image/文件夹下:

误识别底图和视频流图片获取成功后,可使用demo中的人证核验模块,对比误识别图片得分是否过高

如果得分相似都超过阈值(默认0.8)则说明误识别人员与识别人员五官相似度过高,可修改人脸注册底图解决该问题
如果相似度不高,说明SDK内存混乱导致,这种情况大概率为多线程边导入边识别造成的,则在人脸注册和识别接口加锁:


1.2 多人脸情况下误识别到后方人脸
多人脸情况下SDK的人脸检测接口会返回多个人脸信息,可通过每个人脸的宽高进行判断,获取最大的人脸送入后续识别,具体代码如下


1.3 没有注册底图的人被误识别到
该问题有可能为识别人员五官相似度与库中某一个特征五官相似度相似导致,目前SDK会有万分之一概率出现五官相似度过高问题。
可以先获取误识别时的识别得分,如果得分高于阈值可以对阈值进行调整或更新一张误识别人员的底图解决该问题,识别得分获取方式如下:

1.4 全量下发人脸(特征注册)同时进行识别,出现误识别如何解决
特征注册接口(pushPersonById或pushPersonFeatureList)将特征注册到SDK缓存时,不能同时调用识别接口(search),因为注册过程中会打乱底层特征列表顺序,导致识别到的人脸与实际返回的人脸数据不同造成误识别,建议在识别和注册接口加锁保证线程同步,操作如下:


2 识别效果问题
2.1 识别速度慢,识别率低,识别得分低如何优化?
识别速度慢,识别率低,识别率低和速度慢大概率为质量检测未通过导致,可调整质量检测阈值进行优化,质量检测阈值和得分判断如下图:



若质量检测通过排查识别得分是否过低,得分过低需排查识别接口的isPrcent入参是否为true,false情况下需改为true在测试,若没问题可更新一张近期的人脸底图测试是否能够正常识别,isPercent参数和识得分见下图:

2.2 注册成功后无法正常识别到
该问题需检查是否通过pushPersonById接口将注册人员的特征放入SDK缓存
注册分为 '特征提取 - 特征注册到本地数据库 - 将数据库人员id和特征注册到SDK缓存'三步操作
可能是特征提取成功并注册到本地数据库后未将人员特征放入缓存导致,可检查是否通过pushPersonById接口将特征注册到SDK缓存,接口如下:

2.3 数据库查询不到识别到的人员id
该问题通常为识别流程正常通过,识别得分满足阈值筛选条件,但无法从数据库中查询到该人员信息。原因为SDK缓存中的id和人脸特征与数据库中的人员信息不匹配导致(可能是数据库更新特征时SDK缓存特征为清理导致),可通过FaceSearch.clear()方法清空SDK缓存,从新同步数据库人脸特征,代码截图如下:

2.4 戴口罩如何识别?
首先SDK支持戴口罩识别,但由于嘴巴鼻子和部分面部被遮挡原因,识别精度会相比不带口罩情况下会降低,需要项目中将质量检测中遮挡部分的判断去掉可进行戴口罩识别,具体代码如下

2.5 是否支持远距离如何识别和人脸检测
SDK建议范围在0.5~1.5米(部分比如广角摄像头建议在1米内),超过1.5米以上由于面部不清晰会导致识别精度下降或检测不到人脸问题,8.5版本SDK可通过BDFaceSDKConfig.scaleRatio参数提升人脸检测的距离,参数越大检测到的距离越远,具体代码如下:

2.6 老版特征SDK更新后识别不到人脸
大版本不同情况下SDK特征不可公用,比如6.0、7.0、8.0此类大版本不同SDK,需从新提取人脸特征,复用老版特征情况下会出现识别得分普遍偏低、误识别等问题。8.0、8.2、8.5此类大版本相同SDK人脸特征可以公用
2.7 检测不到人脸,结果返回为空
该问题通常为track接口返回为null检测不到人脸导致,通常原因为人脸检测角度调整错误或者摄像头数据不匹配导致,可以先调整BDFaceImageInstance中的人脸角度参数(0 90 180 270)测试能否检测到人脸,代码如下:

如果4个角度都检测不到人脸,可先参考SaveImageManager.java类保存
人脸检测图片,如果图像成像错误(花屏),为视频流格式错误,可与摄像头厂获取摄像头数据格式,调整识别参数解决,具体截图如下:

2.8 检测角度和回显角度是歪的如何解决
该问题可参考demo项目设置中的镜头设置,可调整回显角度和检测角度,具体代码如下:
回显角度接口:

检测角度接口:

2.9 人脸框左右人脸镜像
通常为检测图片与摄像头成像相反(镜像)导致,该问题可以通过调整送检的人脸镜像参数或调整人脸框view的旋转值控制(可参考demo设置中-镜头设置),具体代码截图如下:
通过人脸镜像参数调整

通过人脸框view旋转参数调整

2.10 RGB活体检测被2D图片攻破
目前项目中只使用RGB单目活体会存在被2D图片或电子图片攻破的情况,采用双目摄像头RGB+NIR检测为最优,只有单目情况下可以开启多音子模型优化单目活体效果(开启后活体接口耗时会上升,且通过率会下降),活体多因子模型如下:

2.11 CPU占用高 使用卡顿 如何解决
识别速度慢(总耗时1s以上)或CPU占用一直在80~90%,可能原因为系统占用过高,SDK与系统抢占CPU资源导致,可通过adb或Profiler查看系统占有率(部分设备启动摄像头占用会比较高)排查是否为cpu占用过高问题,cpu占有率查看如下:

解决方案:
可通过setCoreConfigure接口降低SDK cpu使用线程下降cpu占有率,截图如下

3568专版SDK可通过powerMode参数,降低cpu占用,阈值建议为0高档 1中档 2抵挡:

2.12 活体得分低如何排查
如果活体得分长时间普遍偏低(人脸检测角度正常)情况下,可能为摄像头成像和摄像头适配问题,可以先确保摄像头镜面无模糊、水汽、贴有半透明保护膜等情况。若摄像头镜面和成像显示正常,可降低活体得分或保存活体不通过图片提交工单,活体得分设置如下图:

活体不通过图片保存方法见下图:

2.13 图片批量注册不成功 特征提取失败如何解决?
图片注册失败可先排查中注册图片分辨率,目前建议分辨率不超过2000*3000,不要小于640*480,过大会导致无法检测到人脸,建议送检前进行图像分辨率压缩。图片过小则会导致面部大小过小导致检测不到人脸 或 面部质量差出现质量检测不通过情况,可通过根据项目需求调整人脸最小值和质量部分代码来控制,截图如下:


若分辨率正常,可以获取失败错误码,参考9.3图片特征批量提取错误码说明排查错误原因。
2.14 特征注册接口pushPersonById注册失败如何解决?
该问题通常为pushPersonById注册人脸特征时报错1003导致,通常为注册id冲突导致,需确保传入id没有重复(全量导入情况下线调用clear接口情况SDK缓存特征),具体截图如下:

2.15 同一时间反复初始化数据库卡死如何解决?
项目中引用的数据库为安卓自带的sqlite数据库,初始化数据为耗时操作不建议同一时间反复初始化,通常5w底库初始化需要5分钟左右,建议放入子线程并进行线程同步,截图如下:

2.16 接口崩溃如何解决?
接口崩溃SDK会打印接口的堆栈崩溃信息,通常为track或detect接口的崩溃,崩溃截图如下:

部分老版本SDK(8.2、8.0、3568_3.8专版)SDK有可能在部分设备上出现该问题,可以调整人脸检测数量为2,解决该问题,调整接口如下:

2.17 多线程人脸检测(图片注册+识别)崩溃如果解决
该问题通常为同一个检测对象在多个线程同时被调用导致,SDK不支持单个对象多线程下调用,不同线程需创建不同的检测和识别对象,传入不同的BDFaceInstance区分调用,具体截图如下:


2.18 如何判断图片中是否存在多人脸?
需要线将人脸检测数量接口调整为>2,后判断人脸检测接口返回的数组长度即可,截图如下:


2.19 如何只检测画面中指定区域的人脸?
人脸检测接口中会返回人脸的宽高和人脸中心点,可以通过中心点和宽高判断人脸是否在指定区域,宽高与中心点获取方式如下:


2.20 SDK支持多远距离下识别?能否设置远距离人脸识别?
目前市面上不同摄像头相同距离下拍摄出的人脸大小距离有区别,测试环境下SDK支持0.5~1.5米内人脸距离识别,如果是广角或超广角摄像头识别距离会缩短。
可以通过SDK的BDFaceSDKConfig.scaleRatio参数提升人脸检测距离,目前建议最远可设置为2,支持2米左右的人脸检测识别(太远情况下可检测到人脸但识别精度对下降),具体代码如下:


2.21 人脸特征是否支持保存到后台下发到其他设备?
支持,人脸特征为512位的byte数组,可通过Base64转换为字符串保存至后台服务器(服务器需自行部署)后下发到其他设备在解密为数组注册识别,具体代码如下:


2.22 通用版SDK与3568专版SDK有什么区别?SDK支持哪个版本的npu?
通用版SDK: 为cpu算力没有使用npu算力加持,适用于市面上5.0以上大部分设备。
3568专版SDK: 仅支持在3568和3566主板上使用,有npu加持,识别速度相比通用版快1~2倍数。支持1.1.0到1.4.0的npu使用
2.23 SDK是否支持外国人识别?有没有专版SDK
目前最新8.5版本SDK识别模型融合了外国人和国人的识别功能,支持白人、黑人、国人的人脸识别。
3授权激活问题
3.1设备指纹获取失败,在线激活报错no enough params如何解决
该问题通常出现在android 10以上的设备中,由于部分系统差异问题存在该情况,可以关闭电话权限,在项目中搜索android.permission.READ_PHONE_STATE权限并全部注释后,卸载app重装可以正常获取设备指纹

3.2 每次启动都需要激活吗?
根据目前SDK策略,app启动并激活只限于本次启动时使用,杀死程序、设备重启等需要重新打开app的操作需要从新进行SDK激活和模型初始化。且SDK支持静默激活,可在app启动时进行调用SDK激活接口,无需添加UI界面手动点击激活
3.3 相同设备不同应用能否使用相同激活码?
可以,SDK是通过设备指纹进行激活,相同设备不进行恢复出厂设置、系统更新、更换硬件情况下不同应用获取的指纹不变,可以使用相同激活码,并且可通过SDK的getDeviceId接口获取设备指纹,截图如下

3.4 激活时填写了不属于硬件指纹的号码或设备指纹改变如何解决?
在离线激活设备指纹填错,恢复出厂设置、系统更新、更换硬件等操作原因导致设备指纹改变,情况下当前激活码无法从新绑定新的指纹,且不可回收,需更换其他激活码从新激活。
3.5 在线或批量激活可以不联网激活吗?
在线和批量激活,首次激活需要进行联网,激活成功后会把授权信息保存至/data/data/包名 缓存目录下,之后第二次开始激活无需进行联网。
但APP卸载、清空缓存等操作会清空缓存目录,需从新联网激活,在线、批量激活授权信息缓存位置如下

3.6 激活失败怎么办?
激活过程中可能会出现激活失败问题,并打印license expired error等日志,该问题需要手动打印激活的错误码和错误提示来进一步判断错误问题,错误码可参考9.1在线和离线初始化错误码说明,拿离线激活举例,错误码和错误提示可参考如下截图:

3.7 人脸识别Android SDK激活授权时是否需要设备联网
离线识别Android
SDK共3种激活方式:在线激活、离线激活、批量激活(应用激活)。
需要设备联网的方式是:在线激活、批量激活方式;
无需设备联网的方式是:离线激活方式。
无论选择哪种方式完成的激活授权,在首次激活成功后均可在弱网或无网环境中使用。
3.8 人脸识别Android SDK时间校验机制原理
在完成人脸识别Android
SDK的激活鉴权后,由于各种因素如出现设备的时间发生了变化,可能导致SDK报错需重新激活。但序列号仍在有效期内,为什么会出现鉴权失败的问题?
问题产生原因:出现该问题的原因是设备在鉴权时,SDK内部会保存当前激活的RTC时间,在后续在正常使用的过程中设备的时间仅能往后计数(即实时显示时间大于等于首次激活的时间),若由于设备原因或人为调整时间因素,而出现设备时间小于首次激活时间,SDK会认为该设备还未进行激活鉴权,即当前时刻对应的RTC时间之前从未识别到SDK有过激活授权操作,导致会出现无法使用人脸识别能力的情况。
解决方案:恢复设备时间为系统时间,并按照文档中的激活流程重新执行一次鉴权流程即可,同时您请在后续使用中也保持系统时间不手动调整时间。
3.9 批量激活不成功解决方案
解决方案:批量激活首先需设备连接网络,在激活过程中实际比对的是控制台自定义的licenseid和应用包名。因此,您先保持设备连接网络,并在控制台新建应用,如图:

填入您应用名称、license ID、包名(注意您这里填写的包名需与工程中实际使用的包名一致)

填入完成之后点击创建应用,进入SDK工程的路径:FaceSDKAndroid/app/src/main/java/com/baidu/idl/face/main/activity/start/ActivitionActivity,配置控制台刚配置的license Id,如图:

最后编译生成apk推进设备,选择应用激活方式,点击"立即激活",即可完成授权。
3.10 设备存储卡与激活授权的关系
在完成激活鉴权后,会有激活文件保存到存储卡内,若拔走储存卡安装在另外的设备上会提示该序列号已激活,因为卡内存的是上一个设备的信息,不建议这样操作。
3.11人脸识别SDK序列号回收
问题背景:如您在控制台已分配了序列号,且序列号对应激活状态是未激活,则您可通过以下流程回收该序列号。
解决方案:测试序列号暂无法回收,可回收正式序列号。正式序列号回收方法如下:

3.12使用人脸识别Android SDK新版本始终报错鉴权问题
问题背景:如您的该台设备之前已安装过人脸识别Android SDK旧版本,当前使用新版本始终无法完成激活流程。
解决方案:您可尝试清除设备缓存,重新安装SDK进行激活。
4 摄像头问题
4.1 SDK支持哪些摄像头?
目前市场上安卓自带Camera可正常启动的RGB和NIR摄像头均可使用(包括外接usb摄像头),Depth摄像头目前SDK支持奥比、华捷摄像头
4.2 相机采集到的图像如果转成图片?
通常SDK与相机部分没有直接关系,相机的每帧图像、ui展示、启动都是使用的安卓自带的接口完成,通常RGB相机会返回YUV21格式的视频流数据,可转换为RGBA格式后转换为Bitmap图片。
送检的视频流数据会转换为SDK需要的BDFaceImageInstance图片对象,可参考工程中SaveImageManager类转换为Bitmap保存,具体代码如下:

4.3摄像头是黑白的,摄像头想调整为前(后)置摄像头如何调整
摄像头黑白通常为rgb+nir双目摄像头导致。
原因为摄像头id错误导致,可调整传入Camera.open()接口参数解决该问题(通常为0为rgb 1为nir,部分设备在硬件组装时会搞反),截图如下:

4.4 单目NIR能否进行人脸识别
目前SDK不支持单目NIR的人脸识别,会影响识别和活体精度,建议使用RGB或RGB+NIR双目摄像头进行人脸识别
4.5 更改分辨率后预览崩溃如何解决
该问题可能与摄像头不支持该分辨率有关,通常摄像头支持的分辨率为640*480、1280*720,demo默认为640*480,可先跟厂家沟通是否支持修改的分辨率,demo工程的分辨率调整接口如下:

5 demo工程相关问题
5.1 人脸注册的图片存在SD卡 Success-Import文件下,能否删除?
可以,但demo工程进入数据库界面时会由于找不到图片显示不出人脸图片,不影响特征识别和注册
5.2 人脸SDK与openCV库冲突如何解决
该问题通常为libc++_shared.so库冲突导致,可在gradle中添加过滤解决该问题,截图如下:

5.3 demo是否支持保存相机注册时的图片?
Demo支持保存识别时的图片,目前不支持保存相机注册图片,可在工程中调整注册部分代码,使用SaveImageManage类进行存图,图片会存在SD卡SaveImage文件夹下,具体截图如下:

5.4 CPU架构兼容问题
SDK支持CPU架构如下:armeabi,arm64-v8a,armeabi-v7a,x86。 如您在使用过程中,出现设备CPU架构的报错,您可根据实际硬件支持的架构选择对应型号即可,请参考:

5.5 离线识别Android SDK存储的人脸特征值大概占多少内存
5万的人脸图片底库大概占用内存大小60M~70M。
5.6 二次开发后查看人脸识别Andorid SDK版本号方法
在您的工程中找到SDK核心库,上面有标明SDK版本

如果未显示版本号,通过命令certutil -hashfile 文件名称.文件类型 MD5 ,查看生成的MD5(即为该jar包对应的MD5)。使用相同的方式获取您身边识别SDK所有DEMO版本FaceSDK.jar对应的MD5,其中一致MD5对应的DEMO版本号即为您当前工程中集成使用的人脸识别DEMO版本号。
5.7人脸识别Android SDK本地数据库迁移
问题背景:如您基于SDK的已有人脸数据库,需将本地设备上的人脸数据迁移到其他设备中,完成人脸库的迁移,您可参考以下方案。
解决方案:在Android Studio中点击右下角Device File Explorer,找到路径com.baidu.idl.face.demo文件夹下databases/face.db,即可将该文件导入另一设备中同路径下完成人脸库的迁移。

5.8人脸识别Android SDK相机码流的照片像素,推荐尺寸
人脸识别Android SDK相机码流照片像素推荐尺寸为640×480。
5.9人脸框不与人脸实时跟踪问题
题背景:您在使用Android
人脸识别SDK中若发现视频流标注人脸框与人脸未实时跟踪对应,您可操作以下方案。
解决方案:在您使用的模块点击右上角设置-镜头设置-人脸检测框镜像-开启检测框镜像。
5.10人脸识别Android SDK人脸注册成功后,重启SDK人脸数据丢失
问题背景:若您二次开发后在使用人脸库批量导入功能,若出现重启SDK人脸数据丢失的问题,可通过以下流程排查
排查方案:排查在人脸批量导入后,是否有调用FaceApi.getInstance().init,如图:

排查这里是否正常执行,若没有则手动调用执行重新编译。
5.11人脸识别Android SDK修改topNum参数导致人脸比对不同步问题
问题背景:若基于DEMO修改了featureResult对应list获取的topNum参数,导致在进行人脸1:N比对时出现人脸库未实时同步问题。
解决方案:正常情况在DEMO中,这部分对应的topNum参数是1,如图:

修改为FaceApi.getInstance().getAllUserList().size(),请参考:

5.12人脸识别Android SDK livenessmodel为null问题
您若在使用过程中发现您设备中打印的livenessmodel始终为null,您可排查设备的视频流是否接入正常,以及确认设备的镜头是否安装倒置。
5.13人脸识别Android SDK批量激活,控制台报错授权过期
问题背景:如您在控制台新建应用对人脸识别Android SDK
批量激活时,报错授权已过期
解决方案:这需为您延长该应用的有效期,您提交工单,我们为您在后台延长应用的有效期即可。
5.14人脸识别Android SDK 戴口罩无法识别通过
解决方案:在录入人脸时需不带口罩进行录入人脸,注册成功后,您可通过以下两种方式解决戴口罩无法识别问题:
1.关闭质量检测;
2.质量检测开关打开:左右脸颊设置1,鼻子设置1,嘴巴设置1,下巴设置1。
以上两种方式均可。
5.15人脸识别Android SDK批量导入方式,识别效果有所欠缺
问题背景:如您在使用人脸识别Android
SDK人脸图片批量导入方式批量注册人脸,在识别时出现识别效果不是很好,该情况的出现是由于以批量导入方式受限于图片的内容和具体分辨率,可能会有识别效果没有现场人脸录入的效果那么好。
解决方案:您可尝试通过裁剪图片的背景部分仅保留清晰人脸、筛选模糊人脸图片提高分辨率。
5.16如何判断人脸识别SDK视频流中已出现人脸
人脸识别Android
SDK共分包括闸机模式、考勤模式等8个功能模块,应用什么模块,就在对应模块内部进行查看,这里以闸机模式gatelibrary为例进行分析:
首先进入路径FaceSDKAndroid/gatelibrary/src/main/java/com/baidu/idl/main/facesdk/activity/gate/FaceRGBGateActivity,找到FaceSDKManager.getInstance().onDetectCheck,如图:

判断图中标注livenessModel是否为null:livenessModel为null代表此时视频流中未检测到人脸;livenessModel不为null代表此时视频流中已检测出人脸。
5.17 Android人脸识别SDK特征值提取 ret返回-11问题
问题背景:正常情况下人脸特征值提取成功返回的ret状态是128,若返回ret -11,应排查以下方法的执行是否正常
排查方案:可打印FaceSDKManager.getInstance().getFaceFeature().feature返回的featureSize,单步排查流程执行逻辑

5.18 人脸识别Android SDK调用pushPersonFeatureList未返回
问题背景:在识别SDK中调用pushPersonFeatureList方法没有返回,可通过以下流程排查
排查方案:打印日志确认getFaceSearch方法返回的FaceSearch对象的属性是否不为空,且已经正常执行进入getFaceSearch方法,如图:

5.19 人脸识别Android SDK人脸库图片对应路径
对于在SDK人脸库中注册成功的人脸库,可在sd卡根目录Success-Import文件夹中进行查看。
6 其他问题
6.1 Android Studio编译报错 Task 'assembleDebug' not found in project':app'
如使用Android Studio编译SDK出现如下报错

解决方案:点击Android Studio左下角Build Variants,切换打包方式(debug与release切换)重新编译

6.2人脸识别Android SDK抵御活体攻击方法
当前人脸识别Android SDK在抵御活体攻击方面具备以下策略,您可结合您的需求设置:
1.若您对于安全等级要求较高,您请开启双目模式,包括rgb+nir双目模式或rgb+depth双目模式;
2.若您需抵御照片翻拍攻击、提前录制视频攻击等方式:
您可开启rgb+nir双目模式,该模式会对视频中的人像进行nir近红外活体识别,仅对于红外活体过滤通过的人脸会通过进行下一步的特征值提取及比对,对照片、视频等一系列平面的攻击方式有较好效果;
3.若您需抵御佩戴人脸模具等攻击方式
您可开启rgb+depth双目模式,该模式对于人脸模具等立体结构的攻击有较好效果。
6.3 人脸识别Android SDK release版本编译报错"Program type already present: com.baidu.idl.main.facesdk.BuildConfig"
问题背景:如您在使用人脸识别Android SDK对release版本编译时报错"Program type already present: com.baidu.idl.main.facesdk.BuildConfig",如下:

解决方案:正式包会进行混淆并且需要手动录入基础信息,因此您需修改package信息,这里以Demo包名为例,您进入facelibrary->src->main->AndroidManifest.xml按以下修改,重新编译即可。

6.4 人脸图片的特征值提取
问题:
如何获取对应人脸图片的特征值
解决方案:
首先在这里下载工程
链接: https://pan.baidu.com/s/1EFi-CW2FNZOL1R-iRh2F5g 提取码: abq6
1.导入待测试图片
将您需提取特征值的人脸图片,放入SD卡根目录test文件夹下(如果没有test文件夹您手动新建并放入即可)
2.进入工程HomeActivity文件

3.实际获取人脸图片特征值
以下只是对提取特征值的逻辑进行介绍,不用实际操作

4.输出打印特征值

这里打印输出的faceFeature即为传入人脸图片对应的特征值信息。
6.5 Andorid人脸识别SDK人证核验无法通过解决方案
问题:
人脸识别Android SDK使用人证核验模式无法比对通过问题。
解决方案如下:
(以下方案依次执行即可,不用全部操作)
1.关闭质量检测,将人脸最小识别px调至30px
2.增大读卡器读取的身份证图片分辨率,如您是通过读卡器等外置设备,提取身份证、卡证等人脸图片,您可适当提高人脸图片的分辨率。
3.阈值调整
证件照1:1比对,推荐阈值70(对于老年图片或照片遮挡模糊度较高还可继续往下调整);
证件照1:N比对,推荐阈值80。
4.手动拍摄身份证照片传入SDK
5.打印log,看逻辑 对具体流程进行比对。
以下是对于仍不能认证通过的排查步骤:
(a)排查特征值提取是否正常
identifylibrary模块,onActivityResult中uir1中传入证件照片,返回的secondFeature为对应的人脸特征值

ret返回128,secondFeature有值,则证件特征值提取成功。
(b)排查证件照与人脸视频流比对是否正常比对
传入刚刚获取的图片特征值secondfeature,视频流中人脸的特征值SDK会自动获取并保存。确定图中标注视频流人脸特征值feature1与证件特征值feature2是否正常

使用featureCompare进行识别比对,根据返回的score与自定义阈值比较,判定是否比对通过。
(c)若用户使用两张图片格式进行人脸比对,则根据demo进行二次开发:
首先获得人脸图片1的特征值,对应secondFeature:

相同方式获得人脸图片2的特征值,对应firstFeature:

两张图片进行比对,返回score,根据阈值进行自定义结果返回

此外,若用户上传的证件照为生活照格式,则这里也可对应进行替换

替换为

6.6 人脸识别7.X 版本SDK重启设备需重新激活解决方案
问题:
在7.X版本的人脸识别Android SDK,存在问题:设备通过在线激活成功后,断网重启的情况下需要重新激活授权问题。
解决方案:
首先下载license文件,下载地址:https://ai-toolbox.bj.bcebos.com/AndroidTool/licenseFix.rar?authorization=bce-auth-v1/2a5115b018924a7bb2405efb5392855f/2022-09-21T02%3A27%3A17Z/-1/host/0311b5a4babfb7fb6347f52c07022086083716e9cadd8fbb1ad15e1b6e8b4410
解压后关注两处文件:
(1)jar包
进行拷贝bd_unifylicense.jar,如图:

(2)进入jni文件

再次进入arm64-v8a与armeabi-v7a

分别进入,拷贝以下文件,如图:


共拷贝这三处文件,至此完成需要替换文件的拷贝。
进入原正在使用的SDK工程路径,如图

再进入FaceSDKAndroid

使用Android Studio打开工程,并将以上三份文件替换到如下文件中,如图:
(注意仅替换文件,不是整体文件夹)

替换后在AS上方,点击Build-Clean Project
执行成功后,编译APK推进设备安装,该APK即可修复在首次激活成功后,重启设备即使在无网络环境下也无需再次激活授权流程。
6.7 人脸识别Android SDK镜头问题解决方案
问题:
用户在人脸识别SDK中, 切换前后镜头(或多个镜头设备切换指定镜头) 未生效;
点击旋转镜头角度 未生效。
解决方案:
以下分两个问题解决:
1.切换前后置镜头问题
解决方案
在具体模块( 这里以考勤模式attendancelibrary为例)CameraPreviewManager添加以下代码

标红框中的参数替换为以下之一(具体哪一个与设备的实际情况有关,需要实际测试)

2.切换显示角度,修改回显角度不生效,镜头属于旋转90度问题

SDK中角度对应的实际代码位置如下
重要:本处是举例修改8个模块中具体一个,这里是考勤模式attendace下的CameraPreviewManager文件,实际上共有8个模块可修改(使用哪个模块修改哪个模块对应的文件即可)

同时若在人脸注册时视频流仍是旋转的,对应找到需注册模块 registerlibrary的CameraPreviewManager文件,同步修改。
注意:您的每次修改都需将设备中历史SDK删除,并通过重新安装方式保证参数修改生效。
6.8 人脸识别SDK 1:N人脸搜索逻辑分析
人脸识别SDK1:N整体流程如下:
init资源——暗光恢复——.track绘制人脸框——.detect进一步获取详细人脸信息——最优人脸控制——质量检测——.silentlive活体检测(rgb活体校验、nir活体校验、depth活体校验)——.feature提取特征值——.search人脸搜索1:N返回结果。
1.initModel初始化资源
code=0 代表资源加载成功,否则根据错误码排查模型初始化问题。

各类模型初始化

onDetectCheck 开始检测识别
rgbData对应为使用rgb摄像头获取人脸数据信息、irData对应为使用nir摄像头获取人脸数据信息

onDetectCheck 检测-活体-特征-人脸检索流程,两个入口
获取faceInfo[0]最优质人脸信息
a.

b.

在该函数内部,首先rgbData转Instance

2.判断暗光恢复

3.绘制人脸框

track()获 取到的人脸初步信息存入FaceInfo[]数组,且绘制人脸框。
onLivenessCheck

4.进一步获取详细人脸信息

5.最优人脸控制

6.质量检测
完成光照、遮挡、属性部位的质量过滤

7.进行各项活体检测过滤
(1)rgb活体校验

(2)nir活体校验

(3)depth活体校验

特征提取+人脸检索

重点在这里 color="#0000dd">landmarks —> feature (人脸关键点转人脸特征值)
8.提取特征值

9.featureSearch人脸检索1:N

搜索结果与设定阈值比较

若比对通过返回人脸信息
综合以上步骤,人脸搜索1:N全流程 :
init资源——暗光恢复——.track绘制人脸框——.detect进一步获取详细人脸信息——最优人脸控制——质量检测——.silentlive活体检测(rgb活体校验、nir活体校验、depth活体校验)——.feature提取特征值——.search人脸搜索1:N返回结果。
6.9 人脸识别SDK去除本地时间校验解决方案
问题:
在控制台下载并使用人脸SDK后,根据在线激活、离线激活、批量激活方式完成授权后,在后续使用过程中报错: license use times has reached the upper limit问题
解决方案:
(该方案是去除本地时间校验和在线激活每次均需联网的方案,间接性地解决了激活次数上限问题)
根据链接下载license文件,下载链接如下:
链接: https://pan.baidu.com/s/1PUOXKuH8693kmUmDSs4Jeg 提取码: v51d
解压后关注两处文件:
(1)jar包
进行拷贝

(2)so库


分别进入,拷贝


拷贝so文件后,进入使用的SDK 工程路径

再进入

将以上文件替换到如下文件中(注意仅替换文件,不是整体文件夹)

替换后在AS上方,点击Build-Clean Project
执行成功后,编译APK推进设备安装,该APK即可完成在激活后,去除本地时间校验报错license use times has reached the upper limit问题。
6.10 识别SDK视频流屏蔽与控制的解决方案
问题:
屏蔽视频流、控制SDK视频流大小,保证功能运行+接入三方业务UI

解决方案:
在具体模块(指如闸机模块、考勤模块)中找到starpreview函数执行,这里以属性检测模块中代码为例进行分析,如图

startPreview是SDK开启摄像头的逻辑,视频流真正开启时,对应的UI控制和显示就在这里
在该Activity中找到 autoTexturePreviewView对应layout .fa_auto

找到该Activity对应layout文件

进入页面布局文件中,根据id找到对应视频流UI com.baidu.idl.face.main.attribute.camera.AttrbuteAutoTexturePreviewView

1、解决屏蔽SDK视频流显示:
在这里修改宽、高就可以了,width、height修改为1dp,视频流完成屏蔽不会再显示。
(除可以修改宽高,也可自己写入其他view进行覆盖)

或者透明度修改为0也可实现

2、控制SDK视频流大小
这里如果将width和height修改为91dp、99dp( 具体宽高大小根据业务需求进行更改即可 ),可对画面中视频流的大小进行控制
此外, 在这里也可加入居中等其他排版完成对视频大小和方位的控制。

覆盖或屏蔽视频流后在在该布局文件中根据实际需求添加新的UI,或引入自行的view进行显示即可。

同时也可以使用以下方式实现:自定义设定宽高

6.11 人脸注册添加自定义质量检测解决方案
解决:人脸注册时结合用户三方业务需求,添加自定义逻辑方案
人脸注册模块代码对应位置如下:

根据活体模型执行对应跳转:
不使用活体、RGB活体、RGB+NIR活体、RGB+DEPTH活体、RGB+NIR+DEPTH活体

虽然有4种方式,但根据跳转的进入方式,只分两种逻辑

1、若进入的是RGB单目活体方式

进入FaceTrackManager

找到实际进行质量检测的逻辑onQualityCheck

结合用户三方业务需求,添加自定义逻辑方案,
如左眼达到遮挡条件时进行提示、不再进行注册、或其他自行需求逻辑执行

2、若进入的是除RGB单目方式之外的逻辑

进入对应逻辑FaceSDKManager onDetectCheck

找到实际进行质量检测的逻辑onQualityCheck

结合用户三方业务需求,添加自定义逻辑方案,
比如鼻子遮挡后进行提示、不再进行注册、或其他自行需求逻辑执行

6.12 人脸识别 Android SDK 批量激活去除重复激活解决方案
问题:
人脸识别Android SDK,若您使用的批量激活方式激活,在授权后,重启设备会重新进入激活授权界面,需要您点击批量激活重新完成激活授权过程,通过以下方案您可去除该重复操作步骤,仅需一次批量激活流程。
解决方案:
(由于该修改过程较为繁琐,因此我们已经为您修改代码,将修复后的工程上传到云端,您可下载直接使用)
您请先在这里下载修复工程包:
https://ai-toolbox.bj.bcebos.com/AndroidTool/BatchUPFaceSDKAndroid.zip?authorization=bce-auth-v1/2a5115b018924a7bb2405efb5392855f/2022-12-05T08%3A36%3A46Z/-1/host/8227aea41483654bd2fcf569d1e4ef9dfa42b30e81d479f862a0d0c06f28369b
下载解压后。打开找到以下路径文件,如图:
app/src/main/java/com.baidu.idl.face.main/activity/FaceSDKManager

找到图中标注 licenseBatchlineKey 赋值处,在该处填写控制台配置的批量激活licenseId,如图:

将图中您申请的License Id填入以上licenseBatchlineKey中,点击 build 重新编译生成 apk,即可安装使用。该版本 apk 可在首次完成激活授权后,在退出、重启设备等操作下无需再次激活流程。
