资讯 文档
技术能力
语音技术
文字识别
人脸与人体
图像技术
语言与知识
视频技术

Android-SDK

概述

  • 百度人脸离线识别SDK Android版本,主要支持RK3288、3399芯片平台,且已验证支持高通450/8953、MTK6763/8788(可登陆百度智能云控制台console后台获取SDK部署包)
  • 针对其他安卓平台的芯片,例如RK3568/3566、晶晨S905D3(CPU/NPU)、全志A63/T509,为了保障每个芯片平台上算法效果最优,都有专项适配调优的SDK版本,请线下联系商务咨询获取专版SDK。

版本日志

版本 日期 更新说明
V8.5.0 2025.07.07 1、修改demo UI,去掉部分模块减少demo工程复杂度,新增1:1比对示例;
2、新增调用云端特征提取接口示例代码;
3、升级支持安卓13、14高阶版本;
4、人证核验增加图片1:1比较功能;
5、优化部分已知问题
V8.2.0 2024.06.07 1、优化了人脸特征提取模型;
2、考勤模块下新增了多人脸识别功能并支持UI横屏识别
V8.1.2 2023.03.02 1、接入动态底库策略,解决由于底库质量差带来的误识别问题;
2、优化口罩检测、安全帽检测模型;
3、添加活体多帧策略,配合阈值设备同解决多镜头泛化问题;
4、添加加密芯片授权支持,软硬授权并线支持;
5、支持多款3D结构光模组兼容适配
v8.1 2022.11.18 1、修复日志信息错误bug;
2、去除应用层的网络判断逻辑,解决每次设备断网重启重新激活的问题;
3、添加安卓11系统兼容性配置
v8.0 2022.04.20 1、检测、活体、识别更新至8.0最新算法版本;
2、解决旧版本偶发崩溃问题,支持边注册、边识别;
3、隐藏情绪识别功能,优化Demo中人脸追踪框的效果
v7.0 2021.08.24 1、更新人脸检测模型,解决部分场景下非人脸误检测的问题;
2、全面更新多模态活体检测模型,提升对新材质活体攻击道具的防御能力;
3、更新人脸识别模型,实现单模型同时支持戴口罩人脸识别和外国人识别;
4、增加业务层二次开发接口,降低SDK集成难度,保障端到端算法效果;
5、完善示例工程功能,优化示例工程交互;
6、修复部分已知Bug
v6.0 2021.02.26 1、更新人脸检测模型,提升在强光、暗光、逆光、阴阳光等复杂光线场景下人脸检测的召回率;
2、更新RGB、NIR和Depth三种模态的活体检测模型,提升在复杂光线场景下真人活体检测通过率,同步提升高清2D和高质量3D道具的活体攻击防御效果;
3、更新人脸识别模型,提升复杂光线场景下人脸识别的准确率;
4、新增暗光恢复功能,对暗光场景下的图片进行亮度提升,提高检测和识别的准确率;
5、区分『通用版』和『口罩版』,通用版适用于非戴口罩场景下的人脸识别,口罩版适用于在戴口罩场景下完成人脸识别;
6、修复部分已知Bug
v5.1 2021.01.01 1、新增『金融活检』示例工程,该示例工程集成了多帧检测等活体检测策略,提升活体检测准确率;
2、新增『RGB+NIR』混合模态人脸识别示例工程,解决暗光人脸识别问题,提升弱光人脸识别准确率;
3、优化示例工程的功能和代码结构,更有利于直接使用和进行二次开发;
4、修复部分已知Bug
v5.0 2020.10.16 1、升级了了人脸检测模型,重点优化了复杂光线场景下的人脸检测能力;
2、升级了RGB、NIR和Depth三种模态的活体检测模型,优化后2D照片攻击防御能力和复杂光线场景下的真人活体检测能力提升明显;
3、升级了最新的人脸特征抽取与比对模型(人脸识别模型),升级后识别模型对老人、儿童等极端年龄群体的泛化行提升明显;
4、在RK3288主板上,端到端全流程耗时缩短到<300ms;
5、增加了最优图像帧功能,提升识别准确率;
6、增加多线程的示例工程,支持边注册、边识别和多模态同时检测功能;
7、解决了部分已知Bug。
注:由于该版本的SDK更换了特征抽取与比对的模型,因此从旧版本升级到该版本的用户需要重新注册人脸底库(刷库)
v4.2.1 2020.07.07 1、增加场景化示例工程,针对「闸机通行」、「考勤打卡」、「金融支付」、「属性检测」、「人证核验」、「驾驶员行为分析」和「注意力检测」7大应用场景提供定制化的交互流程和交互界面;
2、优化示例工程中的注册激活功能,提供快速、便捷的「在线激活」、「离线激活」和「批量激活」功能;
3、优化示例工程中人脸库管理功能和设置功能;
4、解决部分已知Bug
注:4.2.1版本主要针对示例工程进行了全面重构和优化,功能和接口与4.1.1版本保持一致
v4.1.1 2020.03.12 1、新增注意力检测模型和接口;
2、新增驾驶行为分析模型和接口;
3、优化口罩检测模型;
4、解决部分已知Bug
注:若使用4.1.1版本中注意力检测功能,请参考章节1.6的内容;若使用4.1.1版本中驾驶员行为分析功能,请参考章节1.7的内容
v4.0.0 2020.02.25 1、新增NIR检测、识别模态;
2、新增RGBD识别模态;
3、优化检测、对齐、活体、证件照/生活照识别模型;
4、优化端到端全流程耗时;
5、新增人脸是否戴口罩分类能力和接口;
6、新增抠图能力和接口
7、解决部分已知Bug
注:若使用4.0版本中口罩检测能力,请务必参考章节1.11.1的内容
v3.2.0 2019.12.10 1、底层支持多线程;
2、增加睁闭眼、张闭嘴模型;
3、优化NIR界面适配效果;
4、修复部分已知Bug
注:由3.0/3.1版本升级到3.2的客户,请按照章节1.11.2的方案进行初始化修改
v3.1.0 2019.08.13 1、优化人脸检测性能;
2、新增离线人脸属性模型,包括年龄、种族、性别、7种细分情绪和3种分类情绪、佩戴眼镜等属性
v3.0.0 2019.07.25 1、新版检测模型,人脸检测及跟踪速度大幅提升;
2、新版RGB、NIR、Depth活体模型,优化活体检测的有效人脸大小尺寸范围,活体通过率大幅提升。增加更多攻击类型样本数据,非活体拒绝率大幅提升;
3、新版生活照模型,特征抽取速度大幅提升;
4、新版接口实现,功能逻辑精简优化,更易集成;
5、新版示例工程,优化功能逻辑,新增大量自定义设置项,效果调节更简单;
6、新增「按应用批量鉴权」,应用初始化时自动联网激活。
v2.0.3 2019.06.14 1、更新硬件指纹获取模块,优化特殊环境下指纹变更的问题
v2.0.2 2019.04.01 1、全新人脸检测模型,检测追踪更流畅;
2、全新证件照模型:体积更小,速度更快 ;
3、部分接口细节优化
v2.0.1 2019.03.14 1、接口设计优化;
2、增加几款结构光镜头支持;
3、已知bug修复
v2.0.0 2019.01.10 1、优化生活照模型精度及速度
2、优化检测模型及策略
3、优化接口设计
4、优化活体检测速度
v1.1.0 2018.09.03 1、增加离线证件照特征抽取模型,可有效处理芯片照、证件照比对需求
2、增加离线人脸属性模型,支持性别、年龄等属性分析
3、增加多线程支持
4、增加离线激活支持,可导入授权文件无网激活
5、增加对奥比中光Astra Pro深度图镜头模组支持
6、增加对华捷艾米深度镜头模组支持
7、其他细节优化及已知bug修复
v1.0.1 2018.08.03 1、修复设备指纹发生变化bug
2、替换近红外活体模型,优化效果
3、修复批量注册人脸到人脸库,失败问题
4、修复注册、图片人脸检测、视频返回图片抽取特征失败,经常出现检测不到人脸问题
v1.0.0 2018.06.29 初版,包括离线人脸采集、离线活体检测、离线对比识别、离线人脸库管理等功能

99e9be89709a15f13ac3792f2d4205d6.PNG

此技术文档主要是针对Android 8.5版本SDK进行说明,从接口文档和示例工程DEMO两个角度详尽地阐述了8.5版本的强大功能及使用方法。

1、SDK简介

1.1 功能架构

SDK具有人脸检测、跟踪、质量检测、特征提取、RGB、 NIR以及3D结构光静默活体、1:1比对、1:N识别、年龄、性别、是否戴口罩、戴眼镜和佩戴安全帽、左右眼球注意力等功能,架构图如下: WPS图片(1).jpeg

2、人脸识别流程

人脸识别流程如下图所示,通过SDK的授权激活且模型初始化成功后,根据输入的图片或视频帧进行人脸检测,同时对人脸进行质量、活体和属性等进行过滤判断(通常情况下质量合格的图在1:N人脸识别时候识别率更高),通过对质量通过后的高质量图片进行人脸特征提取后、可根据人脸特征进行人脸1:1的比对和1:N的识别(1:N识别前需要先进行人脸注册入本地库),通常以人脸特征的比对或识别阈值大于80分为比对成功或识别通过。 WPS图片(1).png

3、SDK及Demo工程结构说明

3.1 官网工程包结构说明

目前百度AI官网有集成SDK摄像头、人脸数据库统一封装的效果展示的SDK Demo工程,官网的下载地址为: https://console.bce.baidu.com/ai-engine/old/#/ai/face/offline/index image.png 该工程中分为Andorid通用项目、DEPTH 3D结构光项目、SDK、文档,四个板块,主要功能为:

文件夹名 说明
SDK SDK核心库,包含SDK的aar以及模型文件
FaceSDKAndroid Android通用项目,适用于大部分摄像头和安卓设备,支持RGB+NIR双目摄像头识别,集成方式可参考后述5、SDK以及项目的集成
FaceSDKAndroid_depth DEPTH 3D结构光项目,使用RGB+DEPTH的3D结构光摄像头场景,对3D头模的活体防御有明显提升,改项目仅支持对华捷 和 奥比 两款摄像头进行测试,

集成方式可参考后述5、SDK以及项目的集成
开发文档 项目开发文档

3.2 工程结构说明

Demo示例工程针对百度离线人脸识别SDK调用,并且对sqlite人脸数据库和相机等功能进行封装,FaceSDKAndroid Demo工程结构如下:

工程模块名 说明
app 工程主模块,主要进行欢迎页,激活页,首页的展示。并对SDK进行激活和模型初始化接口的调用,sqlite数据库初始化的工作
attrbutelibrary 属性模块,主要对识别的到人员性别、年龄、是否佩戴安全帽子 眼镜 口罩和左右眼注意力的效果展示
datalibrary 数据模块,对SDK原子接口(人脸检测,注册,识别,活体,质量等)、sqLite数据库、摄像头展示、人脸绘制功能进行封装,依赖faceaar
faceaar SDK核心库,添加了SDK aar包依赖
facelibrary SDK核心库,依赖faceaar,并添加SDK模型文件
gatelibrary 1:N识别模块,展示界面有 闸机模式、考勤模式、支付模式,主要对人脸检测 活体检测 质量检测 1:N识别和耗时的效果展示,依赖datalibrary模块
identifylibrary 1:1识别模块,展示界面有 人证核验,主要针对 视频流和图片的1:1 和 图片与图片的1:1效果展示,依赖datalibray模块
registerlibrary 注册模块,主要针对视频流数据和图片数据信息特征提取和注册,注册成功后可在gatelibrary模块中识别出人员信息
settinglibrary 阈值设置界面,对活体检测、质量检测、人脸大小等阈值参数设置,及对摄像头角度、检测调度及镜像的设置

3.3 SDK aar文件和模型文件说明

SDK分为aar(历史版本为jar so)和模型资源文件等几个部分、SDK aar库文件位于项目中的faceaar/FaceSDK_8.5_20241220-release.aar目录下

模型文件储存在项目facelibrary/assets/face-sdk-models文件夹中,各模型文件说明如下:

模型文件名称 说明 是否可删 删减说明
align_rgb-customized-pa-fast.model.float32-0.7.5.5 人脸快速对其模型 使用人脸跟踪能力可快速进行人脸检测
align_rgb-customized-pa-80.model.float32-6.4.14.4 人脸对其模型 相比快速对其模型,通常与人脸检测模型同步使用。

再检测过程中更加稳定的模型,且后续的活体检测和识别都需要依赖人脸检测的输出结果,不建议删除
attribute-customized-pa-mobile.model.float32-1.0.9.5 人脸属性模型 若不使用人脸属性检测功能,该文件夹可删除,
best_image-mobilenet-pa-dcqe449_live_e51_relu_128.model.float32-1.0.3.1 最佳人脸 最佳人脸通常是质量判断的一个环节、不建议删除
blur-customized-pa-addcloud_quant_e19.model.float32-3.0.13.3 人脸质量模糊度检测 过滤模糊的图片,选择清晰的图片,可提高识别通过率
dark_enhance-customized-pa-zero_depthwise.model.float32-1.0.2.2 暗光恢复模型 用于暗光情况图像优化,若不使用该功能,该文件夹可删除
detect_rgb-customized-pa-192.model.float32-0.0.18.1 人脸检测模型 通常与人脸对其模型同时加载,可检测出人脸宽高位置及人脸关键点信息,且后续人脸特征 人脸识别 人脸活体检测中需要用到该模型输出结果,不建议删除
driver_monitor_nir-customized-pa-DMS_rgb_nir_detect.model.float32-1.0.1.2 驾驶员行为模型 用于喝水 抽烟 打电话 吃东西的行为检测,不需要该功能可删除
feature_live-mnasnet-pa-attention_v4.model.int8-2.0.239.1 特征提取模型 人脸特征提取模型,需要进行1:N识别或 1:1比对的情况下不建议删除
gaze-customized-pa-mobile.model.float32-1.0.3.4 注意力检测模型 眼球上下左右注意力检测模型,不需要该功能可删除
mouth_mask-customized-pa-faceocc_3classes.model.float32-1.0.9.2 口罩检测模型 检测是否戴口罩,不需要该功能可删除
occlusion-customized-pa-paddle.model.float32-2.0.7.3 质量检测遮挡模型 面部遮挡模型,人脸识别时候,建议通过遮挡模型判断
attribute-customized-pa-anquanmao2023_v1.model.float32-1.0.73.1 安全帽检测模型 安全帽检测模型,不需要可删除
liveness_rgb-customized-pa-DCQsdk80.model.float32-1.1.82.1 RGB活体检测模型 用于RGB可见光单目静默活体,若只使用rgb静默活体,则该文件夹下除该文件外均可删除
liveness_nir-customized-pa-DCQ_80.model.float32-1.1.78.1 NIR活体检测模型 用于NIR可见光单目静默活体,若没有NIR摄像头或不使用NIR活体可删除
liveness_depth-customized-pa-paddle_60.model.float32-1.1.13.2 DEPTH活体检测模型 用于3D结构光静默活体检测,不使用3D结构光摄像头情况下可删除
liveness_rgb-customized-pa-DCQsdk80.model.float32-1.1.82.1 RGB活体多音子检测模型 用于增强RGB可见光静默活体防攻击效果的模型,更好的防御电子设备中人脸图片的攻破效果,不需要可删除
liveness_rgb-customized-pa-hand_sdk_224.model.float32-1.1.69.1 RGB活体多音子检测模型 用于增强RGB可见光静默活体防攻击效果的模型,更好的防御电子设备中人脸图片的攻破效果,不需要可删除
liveness_rgb-customized-pa-model_freeze_2dmask_20211210_sdk_224_epoch7.model.float32-1.1.80.1 RGB活体多音子检测模型 用于增强RGB可见光静默活体防攻击效果的模型,更好的防御电子设备中人脸图片的攻破效果,不需要可删除

4、Demo工程的编译和使用

SDK Demo工程下载解压后,FaceSDKAndroid工程如下: image.png 使用android studio打开FaceSDKAndroid项目 image.png 注:部分版本的android studio在编译的时候会出现错误,或者提示需要升级gradle8.0以上版本,该问题为java jdk不适配导致,目前demo的gradle版本为7.4,可在android studio中设置11或17版本的java jdk,截图如下: 相关报错 image.png image.png 解决方案 image.png image.png Jdk设置完成后,等待项目编译完成,运行项目 image.png 注:andorid手机需开启开发者模式和usb调试才可以正常运行,通常在手机设置-关于手机-找到系统版本连点7下即可开启开发者模式,不同型号手机位置不同 image.png demo主要运行流程为,其中激活须设备能连接网络(离线激活不需要),激活用到的序列号可在百度AI官网申请,官网具体位置和激活流程请参考4.1 授权激活,demo主要流程图如下: image.png

4.1 授权激活

SDK分为离线激活、在线激活、批量激活三种激活方式(可使用其中任何一种进行激活),SDK需要通过授权激活后才能正常使用,三种激活方式可从官网申请激活文件或激活序列号(三种激活方式均会对通过指纹对设备进行绑定,如果存在系统更新、硬件更新、固件刷新的情况会导致设备指纹改变从而激活失败),官网申请激活序列号以及离线激活地址如下: https://console.bce.baidu.com/ai/?_=1670415860750&fromai=1#/ai/face/offline/index

4.1.1离线激活(适应于无网或弱网环境)

SDK Demo运行后,首先会进入激活界面,在离线激活选项中可找到当前设备的设备指纹,在官网填入指纹信息,可获取授权文件(License.zip)无需解压,将授权文件放到设备sdcard(/sdcard/License.zip)目录下,进入离线激活界面,点击激活,即可完成激活,百度官网的离线激活页面如下: image.png

4.1.2在线激活(需要设备能连网)

SDK Demo运行后(首次需联网),首先会进入激活界面,点击在线激活,在激活选项中输入官网的16位序列号,点击激活,即可完成在线激活,激活授权序列号可参考如下页面(百度AI官网登录账号购买后可显示): image.png image.png

4.1.2批量激活(需要设备能联网)

SDK Demo运行后(首次需联网),首先会进入激活界面,点击批量激活,该激活方法需要在代码中添加批量激活序列号,在官网-批量授权选项中可申请批量激活授权序列号,批量激活序列号可参考如下页面在百度AI官网获取、获取后填写到如下页面代码中(红色标记处): image.png image.png

4.2 SDK Demo使用说明(可直接编译Demo生成apk体验)

4.2.1 模型加载及镜头角度设置

SDK激活成功后(激活可参考4.1 授权激活)会进入demo首页,此时会自动进行模型初始化加载操作,等待首页提示模型初始化成功后,再进行后续操作,模型初始化接口及弹窗提示效果如下: image.png 模型初始化成功后,部分设备还不能进行注册和人脸识别,需在设置界面中调整人脸检测和摄像头的角度(须人脸正向),角度正确后可进行注册和人脸识别操作,界面如下: image.png 在设置界面中找到镜头设置 image.png 镜头设置中分为:人脸检测图像设置为SDK对视频流进行解码的角度(识别角度),视频流回显图像设置为摄像头在屏幕中显示的角度(显示角度),具体界面如下(如人脸不是正向的时候,可点击旋转按钮把人脸摆正): image.png image.png

4.2.2 图片及视频流注册

设置好摄像头角度后,返回首页,在右上角按钮中可找到人脸注册和人脸库管理选项(进行人脸1:N识别,需要先进行人脸注册入库,1:N识别时候是实时检测的视频帧和人脸库里的已经注册入库的N个人进行比对识别),其中人脸注册功能支持将摄像头中检测的人脸数据注册到数据库(也支持图片批量导入注册入库),人脸库管理中可查看注册的人脸信息并且也可以对图片进行人脸注册,整体效果截图如下: 视频流注册: 选择人脸注册 image.png 检测到人脸后,输入用户信息,点击确认方可完成注册 image.png 图片注册: 图片注册需要手动拷贝将需要注册的人脸图片放到设备/sdcard/Face-Imort/文件夹中,在人脸库管理-批量导入中方可进行图片注册,效果如下: image.png 在人脸库管理中还可以看到目前数据库中的人脸数据进行查询和删除的操作,点击右上角批量导入,方可进行图片注册(注:目前demo对图片名进行控制,不得超过5个字、另外可能会有部分不符合质量要求的人脸注册入库时候失败,具体可根据调试信息查看) image.png

1.4 1:N识别和1:1比对

1:N识别: SDK Demo提供了闸机模式、支付模式、考勤模式,这几种场景化示例Demo均为1:N人脸识别功能,除界面不同外识别效果和接口基本相同,开发者可根据项目需求选择不同界面进行集成,通过操作可将人脸注册入库,并且在识别时候对视频流中的人脸进行人脸框绘制、活体、质量检测的判断、提取摄像头中人脸特征、最后跟前述已经注册入库的人脸特征值进行识别比对,返回相似度最高的人员信息和各个SDK原子接口的识别耗时以及总耗时,具体页面展示效果如下: image.png 1:1比对: SDK Demo中的人证核验模块为1:1比对展示界面,点击底部上传证件照按钮,进入相册选择证件照图片方可进行视频流1:1比对,比对展示效果如下: image.png

5、SDK以及项目的集成

5.1 集成说明

项目集成分为业务层(安卓原生)和SDK能力层(原子接口)的集成,集中需要将SDK核心库、SDK模型和dataLibrary模块集成到项目中。(其中dataLibrary模块为安卓原生业务层代码,内容可以自行修改,该模块包含了摄像头启动、sqlite数据库封装、SDK原子接口封装,可以更高效的进行SDK的接口集成)具体位置为: image.png 模块以及核心库导入完成后,将1:N(gateLibrary)或1:1(identifylibrary)模块中的FaceUtils文件放入到项目,该文件对SDK初始化以及阈值进行封装,可更好的设置SDK参数,具体可参考5.3.1 FaceUtils类方法说明 image.png 上述功能导入后,可直接使用dataLibrary中封装好的类进行界面展示和识别接口的调用,dataLibrary功能説明可參考5.3工程核心类和方法说明(dataLibrary)

5.2 项目集成流程说明

项目集成中根据自身不同业务场景,可自由定制化开发,其中SDK能力层主要流程和接口截图流程如下: WPS图片(1).png SDK核心库、FaceUtils、SDK模型和dataLibrary模块集成到项目中后, 先调用激活接口initLicenseOffLine(离线激活)、initLicenseOnLine(在线激活)、initLicenseBatchLine(批量激活),激活成功(OonResponse方法code参数为0则成功)后,才可以进行之后操作,具体代码如下: image.png image.png image.png 激活成功后,需要进行SDK模型初始化和数据库初始化,模型初始化成功后才可以进行后续识别和注册操作,具体代码如下: image.png 其中FaceSDKManager.getInstance().initModel接口包含: FaceDetect类中人脸检测模型的初始化,可参考6.3.1 模型加载接口 FaceDetect类中质量检测模型的初始化,可参考6.3.2 质量检测模型加载接口 FaceLive类中活体检测模型的初始化,可参考6.4.1 活体模型加载接口 FaceFeature类中人脸特征提取模型的初始化,可参考6.5.1 特征提取模型加载接口 FaceSearch人脸识别模型的初始化,可参考6.6 FaceSearch识别对象 等,单个模型初始化接口可参考下图: image.png 数据库初始化代码如下图所示: image.png 模型初始化成功后,需要进行人脸注册才可以正常识别到人脸, 通过FaceSDKManager.getInstance().personDetect获取图片的人脸特征结果, image.png 其中,FaceSDKManager.getInstance().personDetect特征提取接口中包含: FaceDetect的detect人脸检测接口调用,可参考6.3.5 人脸检测接口 FaceFeature的feature人脸特征提取接口调用,可参考6.5.2 特征提取接口,具体截图如下 image.png 特征提取成功后,通过FaceApi的registerUserIntoDBmanager或userAdd接口注册到数据库, image.png 数据库保存成功后,在通过FaceSDKManager.getInstance().initPush,将数据库的人脸信息放到SDK缓存中 image.png 注册成功后,在识别界面创建识别阈值BDFaceCheckConfig和BDLiveConfig,其中包含识别、活体、质量等阈值的配置信息 image.png 识别阈值参数创建完成后,创建BDFaceImageConfig摄像头数据参数类,并使用CameraPreviewManager和GlMantleSurfacView打开摄像头,并展示摄像头界面 image.png image.png image.png 摄像头启动成功后,在CameraPreviewManager的setmCameraDataCallback接口可获取到摄像头每帧数据,将每帧数据放到BDFaceImageConfig摄像头数据参数类中,通过FaceSDKManager.getInstance().onDetectCheck对该数据进行人脸识别操作 image.png 其中FaceSDKManager.getInstance().onDetectCheck识别接口包含: FaceDetect类中的track人脸快速检测接口调用,可参考6.3.6 人脸跟踪接口 FaceDetect类中的detect人脸检测接口调用,可参考6.3.5 人脸检测接口 FaceLive类中的silentLive人脸活体检测接口调用,可参考6.4.2 人脸静默活体检测接口 FaceFeature类中的feature人脸特征提取接口调用,可参考6.5.2 特征提取接口 FaceSearch类中的注册接口调用,可参考6.6.1.1 单个特征注册接口 FaceSearch类中的1:N识别接口调用,可参考6.6.3 1:N识别接口 FaceSearch类中的1:1识别接口调用,可参考6.6.4 1:1比对接口,具体代码截图如下: image.png image.png image.png image.png image.png image.png

5.3 工程核心类和方法说明

Demo工程中的dataLibrary模块为demo应用层核心模块,封装了数据库、摄像头以及SDK识别功能的使用,核心功能类分为;

类名 功能说明
FaceApi 数据库封装类,会在默认路径创建face.db人脸库文件、进行对人员信息和人脸特征的增删改查、都会保存在该文件中,具体可参考5.3.2 FaceApi类方法说明
FaceSDKManager 封装SDK接口,通过一个方法可进行人脸检测、活体检测、质量检测、1:1比对、1:N识别效果,且封装了人脸模型的初始化,人脸特征注册接口,具体可参考5.3.3 FaceSDKManager类方法说明
CameraPreviewManager 摄像头启动类,单例的工具类仅支持一个摄像头的启动,可通过该类进行RGB摄像头的展示,对界面预览中出现的变形问题进行优化处理,并获取摄像头逐帧数据,具体可参考5.3.4 CameraPreviewManager类方法说明
PreviewTexture 摄像头启动类,相比CameraPreviewManager更加轻量级的效果展示,支持创建多个实例进行多个摄像头同时启动,具体可参考5.3.5 PreviewTexture类方法说明

5.3.1 FaceUtils类方法说明

该类對识别、质量(光照、遮挡、模糊、角度)、活体等参数的阈值进行了封装,可通过该类快速获取识别和SDK初始化时所需要的阈值信息

方法名 所需参数 返回值 功能说明
GetBDFaceSdkConfig() BDFaceSDKConfig:人脸检测配置实体类 获取人脸检测实体类,通常在模型初始化时传入
GetBDFaceCheckConfig() BDFaceCheckConfig 获取1:1和1:N时所需要的阈值信息
GetBDLiveConfig() BDLiveConfig 获取活体阈值信息

5.3.2 FaceApi类方法说明

该类为业务层封装类,客户可根据自身业务调整内部逻辑,主要作用为人脸数据库的初始化,和人员信息的增删改查

方法名 所需参数 功能说明
init(

DBLoadListener dbLoadListener , Context context)
DBLoadListener:初始化返回结果

Context:上下文
初始化数据库
userAdd(User user) User:用户信息 添加用户
GetAllUserList() 查询所有用户
getUserListByUserName(

String userName)
String:用户名 根据用户名查询用户
getUserListById(

int _id)
_id:用户id 根据用户id查找用户
userDeleteByName(

String userName)
String:用户名 根据用户名删除用户
registerUserIntoDBmanager(

String groupName,

String userName,

String picName,

String userInfo,

byte[] faceFeature)
groupName:群组名

userName:用户名

picName:人脸图片名

userInfo:用户信息

faceFeature:人脸特征
添加用户,同userAdd

faceSDKManager相关接口截图及说明如下: 初始化人脸数据库,会创建数据库并且获取数据库中的所有用户信息(该操作为耗时操作,需要在线程中进行),获取到的所有用户信息建议储存在list(users)中,方便后续进行用户信息提取操作,优化每次获取用户全部信息耗时过高问题 image.png 将用户信息注册到数据库,进行识别前需要提取出该信息放入SDK缓存中进行识别,具体识别接口可参考6.6 FaceSearch识别对象 image.png 查询所有用户,demo在应用层做了初始化后可以将提取到的用户数据作为list放到缓存的操作,所以此接口获取不会出现耗时操作 image.png 根据姓名查询用户信息,该接口可用于在人脸信息特征提取成功准备注册到数据库时判断数据库中是否包含该用户 image.png 根据用户id查询用户,demo中将数据库id设置为自增的int值,以保证每个id之间不重复,使用该方法可以在人脸识别成功后,通过识别出的用户id在数据库中查询用户信息 image.png 根据姓名在数据库删除用户,若产出成功识别前需要在SDK缓存中也删除该接口,或者从新获取一次数据库信息刷新一遍SDK缓存,具体识别接口可参考6.6 FaceSearch识别对象 image.png

5.3.3 FaceSDKManager类方法说明

方法名 所需参数 功能说明
onDetectCheck(

BDFaceImageConfig bdFaceImageConfig,

BDFaceImageConfig bdNirFaceImageConfig,

BDFaceImageConfig bdDepthFaceImageConfig,

BDFaceCheckConfig bdFaceCheckConfig,

aceDetectCallBack faceDetectCallBack)
BDFaceImageConfig:RGB视频流参数

BDFaceImageConfig:NIR视频流参数

BDFaceImageConfig:DEPTH视频流参数

BDFaceCheckConfig:识别阈值

FaceDetectCallBack:识别返回结果
视频流1:1识别和1:N识别的封装接口,可进行人脸大小位置信息、质量检测、活体检测、识别、识别耗时的功能
setActiveLog boolean:布尔类型 是否开启日志
initModel(Context context, BDFaceSDKConfig config,

SdkInitListener listener)
Context:上下文

BDFaceSDKConfig:人脸检测配置实体类
初始化模型
InitPush Context:上下文 将人脸数据库中的人脸特征注册到sdk内存
personDetect(Bitmap bitmap,

byte[] feature,

BDFaceCheckConfig bdFaceCheckConfig, Context context)
Bitmap:人脸图片

BDFaceCheckConfig:人脸检测和识别阈值

Context:上下文
提取图片人脸特征

faceSDKManager相关接口截图及说明如下:

模型初始化接口,针对人脸快速检测、人脸跟踪、活体检测、特征提取、口罩识别、属性检测、注意力检测、等功能进行模型初始化操作(只有初始化加载了模型、后续人脸检测等能力才能生效) image.png 视频流逐帧检测接口,进行RGB和NIR的人脸检测、活体检测、质量检测、特征提取、1:N识别和1:1识别 image.png 特征提取接口,对图片进行人脸特征提取 image.png initpush接口,主要作用为在识别前将人脸数据库中的信息同步到SDK缓存中(在缓存中比对识别速度更快),在人脸识别时会将视频流中提取的人脸特征和SDK缓存中的特征进行比较,并返回得分最大的人脸 image.png 视频流人脸识别接口,可以识别摄像头中人脸信息,返回人脸坐标进行应用层快速人脸绘制跟踪,并对人脸进行质量检测、活体检测和识别 image.png image.png

5.3.4 CameraPreviewManager类方法说明

方法名 所需参数 功能说明
startPreview(

GlMantleSurfacView textureView,

int videoDirection ,

int width, int height)
GlMantleSurfacView:摄像头展示view

int(videoDirection):摄像头角度

int(width):摄像头宽度

Int(height):摄像头高度
初始化摄像头
setCameraFacing(

int cameraFacing)
Int:摄像头id 设置摄像头id,通常0为RGB,1为NIR
InitCamera() 启动摄像头,并返回开启摄像头的宽高
setmCameraDataCallback(

CameraDataCallback mCameraDataCallback)
CameraDataCallback:摄像头逐帧数据监听器 监听摄像头每帧数据
StopPreview() 关闭摄像头

CameraPreviewManager相关接口截图及说明如下: 初始化摄像头接口,设置展示画面,设置绘制人脸框镜像信息,设置摄像头角度,摄像头宽高等信息 image.png 设置摄像头id,部分摄像头为双目摄像头,包含RGB和NIR两款摄像头,通常id为0是rgb,1为nir image.png 开启摄像头,并且会返回摄像头的宽高(如果初始化摄像头时设置的宽高 摄像头不适配,会返回当前启动摄像头当前适配的宽高) image.png 摄像头数据监听接口,通过该接口获取摄像头的每帧数据,通常为nv21类型,通过获取的摄像头每帧数据送到SDK进行人脸检测等工作 image.png 摄像头关闭接口,在界面关闭时调用,清空摄像头缓存(退出SDK或不使用摄像头的时候注意关闭释放资源) image.png

5.3.5 PreviewTexture类方法说明

方法名 所需参数 功能说明
setCamera(

Camera camera,

int width,

int height)
Camera:摄像头实例

int(width):摄像头宽度

Int(height):摄像头高度
开启摄像头

PreviewTexture相关接口截图及说明如下:

PreviewTexture为摄像头展示view,继承ViewGroup,可以通过setCamera启动摄像头,并将摄像头信息展示到该view中 image.png

5.4 工程数据库db文件路径自定义说明

dataLibrary中默认会将注册的用户信息默认储存在data/data/包名/database 数据库的face.db默认路径下,可在DBHelper文件夹中放开这部分代码,即可修改数据库文件存储路径 15BCAFB8F2DE0AA213C6B2FD70062274.jpg

5.5 在线特征提取接口调用方式

百度AI官网提供了可从云端进行人脸特征值提取的接口功能(通过http调用传入图片base64,返回人脸特征值),可以实现人脸特征抽取和人脸库的构建,主要用于在服务端(云端)提取与人脸离线识别SDK通用的人脸特征值,通过该接口获取的特征值可直接注册到设备中进行人脸1:1或1:N识别,接口调用文档如下:https://ai.baidu.com/ai-doc/FACE/Okg7edktq 此外,demo工程中添加了该接口的调用方式,代码可以参考 dataLibrary模块中的OnLineFeatureManager类,位置如下: 00B0C6394165DABD7C051CFA9468F62F.jpg

注:该接口需输入对应SDK版本参数(该参数是为了对齐SDK的版本和云端提取版本的特征值通用、只有版本对齐了,SDK的特征值和云端提取的特征值才能通用),目前常用参数为: 如:8.0(8.0到9.0范围,比如8.1、8.2、8.5)的sdk对齐云端:Android_8001 3568 3.1专版sdk:RV1109_3000 image.png

5.6 摄像头模组集成方法说明

此章节为应用层的摄像头模组说明,会对不同摄像头进行简单的描述和调用方式,其中摄像头通常分为三类,类型如下、实际场景中,可根据自身需要选择使用那种摄像头配置:

摄像头类型 摄像头功能说明
RGB 标准摄像头,通过红、绿、蓝三原色通道捕获彩色图像的摄像头,安卓手机中自带摄像头准为RGB摄像头

同时也是必不可少的摄像头,在项目中人脸检测、质量检测、1:1和1:N识别都需要使用该摄像头
RGB+NIR RGB:同上

NIR:近红外摄像头,主要用于辅助活体检测,更好的防御在活体检测过程中电子产品产生的人脸攻破问题
RGB+DEPTH RGB:同上

DEPTH:3D结构光深度摄像头,主要用于辅助活体检测,更好的防御在活体检测成3D头模产生的人脸攻破问题

5.6.1 RGB摄像头模组集成说明

RGB摄像头为标准摄像头,Android手机自带摄像头均可理解为RGB摄像头,使用Android原生自带的Camera类进行界面展示和视频流提取,项目工程可参照官网下载的工程包中的FaceSDKAndroid进行集成,工程文件可参照:3.2节 官网工程包结构说明,并且项目中对Camera进行了封装,具体可参照:4.3.5节 CameraPreviewManager类方法说明 image.png

5.6.2 RGB+NIR双目摄像头模组集成说明

RGB和NIR摄像头均可以使用android原生自带的Camera类进行界面展示和视频流提取,可以理解为这两种摄像头启动方式完全相同,唯一不同在一启动时传入id不同(id通常由系统决定,未插入其他usb设备情况下,通常为0是RGB、1是NIR)。项目工程可参照官网下载的工程包中的FaceSDKAndroid进行集成,工程文件可参照:3.2 官网工程包结构说明,集成说明如下: RGB摄像头:同上,可参照5.6.1节 RGB摄像头模组集成说明 NIR摄像头:demo中使用PreviewTexture对NIR摄像头进行了封装(也可以开启RGB摄像头),具体可参考:5.3.5 PreviewTexture类方法说明 image.png

5.6.3 RGB+DEPTH摄像头模组集成说明

RGB+DEPTH的3D结构光摄像头会根据不同厂家生产的摄像头不同,调用方式各不相同,需要取对应厂家的官网下载摄像头启动的SDK集成到项目中,使用厂家规定的启动开启才行,目前官网项目种仅提供了奥比和华捷两款3D结构光的启动方式,项目工程可参照官网下载的工程包中的FaceSDKAndroid_depth项目进行集成,工程文件可参照:3.2 官网工程包结构说明,集成说明如下:

5.6.3.1奥比摄像头

奥比摄像头SDK位于工程文件FaceLibrary/libs/orbbec_module-debug.aar下,将该SDK集成到项目可以调取奥比3D结构光摄像头接口 image.png 项目代码位于 aobilibrary\src\main\java\com\baidu\idl\main\facesdk\activity\aibi\FaceDepthGateActivity.java 中,提供了RGB和DEPTH的效果展示 image.png RGB摄像头: 奥比RGB摄像头可以使用原生自带camera方式启动,可参照5.5.1 RGB摄像头模组集成说明 DEPTH摄像头: 奥比3D结构光摄像头需要用到奥比SDK中的OpenNIHelper(摄像头启动类) VideoStream(摄像头数据拉取类)和OpenNIView(数据展示类) 首先先在ui中创建摄像头展示view,创建深度摄像头回显 image.png image.png 创建完成后,项目中创建OpenNIHelper摄像头启动类,并调用requestDeviceOpen方法开始,监听摄像头状态, image.png 在requestDeviceOpen方法启动摄像头后,会拉起onDeviceOpened,表示摄像头已开启,失败则会拉起onDeviceOpenFailed(摄像头已经启动)或onDeviceNotFound(没有找到深度摄像头) onDeviceOpened拉起成功后初始化VideoStream摄像头数据拉取类,且由于奥比摄像头种类不同,摄像头宽高比也不同,这里需要使用宽高判断摄像头模组,截图和奥比模组种类如下: image.png

奥比摄像头类型 宽高比
奥比中光海燕、大白 640*400
奥比中光海燕Pro、Atlas 400*640
奥比中光蝴蝶、Astra Pro\Pro S 640*480

模组宽高设置后,开启一个独立线程,使用VideoStream进行摄像头逐帧数据的拉取,并展示到OpenNIView中,截图如下: image.png 最后,退出界面时(onDestroy ,onPause )需关闭摄像头,关闭当前监听的线程,确保后续功能正确,截图如下 image.png

5.6.3.2 华捷摄像头

华捷摄像头SDK位于工程文件FaceLibrary/libs/orbbec_module-debug.aar下,将该SDK集成到项目可以调取奥比3D结构光摄像头接口 image.png 项目代码位于 huajielibrary\src\main\java\com\baidu\idl\main\huajie\activity\huajie\FaceLimActivity.java中,提供了RGB和DEPTH的效果展示,截图如下: image.png 并且,需要将datalibrary\src\main\java\com\example\datalibrary\lim华捷摄像头工具类 导入到项目中,集成BaseLimActivity,创建showViewer抽象方法(showViewer会在摄像头启动后被调用),具体截图如下 image.png 集成BaseLimActivity后调用BaseLimActivity的openLim方法,可以打开RGB和DEPTH摄像头,启动成功后会调用showViewer的方法,并返回RGB和DEPTH数据 image.png RGB摄像头: 展示华捷RGB摄像头需要用到GLPanel摄像头展示view,在xml中创建该view实例,在activity中获取彩色图像预览对象,截图如下: image.png image.png 创建GLPanel彩色摄像头对象后,在showViewer抽象方法中将GLPanel赋值给RGB展示对象即可完成摄像头效果展示,截图如下: image.png image.png 创建GLPanel深度摄像头对象后,在showViewer抽象方法中将GLPanel 赋值给深度展示对象即可完成摄像头效果展示,截图如下: image.png RGB和DEPTH摄像头数据获取: showViewer方法被调用用可以开启独立线程,获取RGB和DEPTH视频流数据,使用华捷SDK的ImiDevice.ImiFrame类获取RGB和DEPTH的每帧数据,并对每帧数据进行过滤,最终获取正确的视频流数组,具体截图如下 image.png image.png image.png

6、SDK功能接口说明

6.1 FaceAuth鉴权接口

构造方法 参数 类型 说明
FaceAuth() 创建一个FaceAuth

6.1.1在线授权

方法名 initLicenseOnLine
说明 用户通过申请授权码,在线授权,激活设备
请求参数 说明 必须 类型 返回参数
context 上下文 Context
licenseKey 官网授权码 String
callback 鉴权结果0 为成功,错误码可参考:9.1在线 和 离线初始化错误码说明 Callback

6.1.2离线授权

方法名 initLicenseOffLine
说明 用户申请鉴权文件,放在SD 卡下,点击按钮直接鉴权
方法 initLicenseOffLine(final Context context, final Callback callback)
请求参数 说明 必须 类型 返回参数
context 上下文 Context
callback 鉴权结果0 为成功,错误码可参考:9.1在线 和 离线初始化错误码说明 Callback

6.1.3批量授权

方法名 initLicenseBatchLine
说明 用户通过申请在线批量licenseID进行激活,可直接网络请求获取鉴权文件
方法 initLicenseBatchLine(final Context context, final String licenseKey, final Callback callback)
请求参数 说明 必须 类型 返回参数
context 上下文 Context
callback 鉴权结果0 为成功,错误码可参考:9.1在线 和 离线初始化错误码说明 Callback

6.1.4底层log日志接口

方法名 setActiveLog
说明 用户通过申请在线批量licenseID进行激活,可直接网络请求获取鉴权文件
方法 setActiveLog(BDFaceSDKCommon.BDFaceLogInfo logInfo, int isLog)
请求参数 说明 必须 类型 返回参数
logInfo 底层log 打印 BDFACE_LOG_ERROR_MESSAGE // 打印输出错误日志BDFACE_LOG_VALUE_MESSAGE // 打印输出值日志 BDFACE_LOG_TYPE_PERF// 打印性能日志BDFACE_LOG_TYPE_ALL // 打印全部日志 BDFACE_LOG_TYPE_DEBUG// 打印debug日志 BDFaceLogInfo
isLog 0:不输出日志;1:输出日志 int

6.1.5 设置cpu核数

方法名 setCoreConfigure
说明 根据开发板类型,设置加速对CPU核数依赖,调整参数,提高性能
方法 setCoreConfigure(BDFaceSDKCommon.BDFaceCoreRunMode runMode, int coreNum)
请求参数 说明 必须 类型 返回参数
runMode 推荐使用0, 1, 3;如果有需要绑核的话,用0和1;如果不需要绑核,系统自动调度的话,用3
BDFACE_LITE_POWER_HIGH=0, 绑定大核运行模式。如果ARM CPU支持big.LITTLE,则优先使用并绑定Big cluster。如果设置的线程数大于大核数量,则会将线程数自动缩放到大核数量。如果系统不存在大核或者在一些手机的低电量情况下会出现绑核失败,如果失败则进入不绑核模式。
BDFACE_LITE_POWER_LOW=1,绑定小核运行模式。如果ARM CPU支持big.LITTLE,则优先使用并绑定Little cluster。如果设置的线程数大于小核数量,则会将线程数自动缩放到小核数量。如果找不到小核,则自动进入不绑核模式。
BDFACE_LITE_POWER_FULL=2,大小核混用模式。线程数可以大于大核数量。当线程数大于核心数量时,则会自动将线程数缩放到核心数量。
BDFACE_LITE_POWER_NO_BIND=3,不绑核运行模式(推荐)。系统根据负载自动调度任务到空闲的CPU核心上。
BDFACE_LITE_POWER_RAND_HIGH=4,轮流绑定大核模式。如果Big cluster有多个核心,则每预测10次后切换绑定到下一个核心。
BDFACE_LITE_POWER_RAND_LOW=5,轮流绑定小核模式。如果Little cluster有多个核心,则每预测10次后切换绑定到下一个核心。
BDFaceCoreRunMode
coreNum cpu 核数,选择线程数,建议不超过2 int

6.1.6 获取deviceId设备指纹

方法名 getDeviceId
说明 用于官网离线激活生成授权文件
方法 getDeviceId(Context context)
请求参数 说明 必须 类型 返回参数
Context 上下文 Context String

指纹信息

6.2 BdFaceInstance线程实例

当人脸检测、特征提取需要多个线程使用时,需要用到该对象,需要在每个不同线程中分别创建 人脸检测和特征提取对象,每个线程的检测和提取对象在创建时传入该实例,以保证不同线程中的识别稳定性

构造方法 参数 类型 说明
BdFaceInstance() 创建一个BdFaceInstance

6.2.1 开启BdFaceInstance实例

方法名 creatInstance
说明 开启一个BdFaceInstance实例
方法 creatInstance()
请求参数 说明 必须 类型 返回参数
初始化该实例

6.3 FaceDetect检测对象

该对象主要用于人脸的快速检测,人脸跟踪,人脸检测,质量检测,模糊检测等功能

构造方法

构造方法 参数 类型 说明
FaceDetect() 无参构造调用(执行默认创建的instance )
FaceDetect(BDFaceInstance thisBdFaceInstance) thisBdFaceInstance BDFaceInstance 执行自己创建的instance,独立运行在一个线程,多线程调用情况下需要传,具体可参考6.2 BdFaceInstance线程实例

6.3.1 模型加载接口

方法名 initModel
说明 模型加载如检测、对齐等模型,支持可见光、近红外,快速检测模型
方法 initModel(final Context context, final String detectModel, final String alignModel, final BDFaceSDKCommon.DetectType detectType, final BDFaceSDKCommon.AlignType alignType, final Callback callback)
请求参数 说明 必须 类型 返回参数
context 上下文 Context
detectModel 检测模型路径 String
alignModel 对其模型路径 String
detectType 检测类型 DETECT_VIS :为可见光 DETECT_NIR:为近红外 Context
alignType 对齐类型 BDFACE_ALIGN_TYPE_RGB_ACCURATE 为可见光对齐类型; BDFACE_ALIGN_TYPE_RGB_FAST 为可见光快速对齐类型; BDFACE_ALIGN_TYPE_NIR_ACCURATE 为 近红外对齐类型 Context
Callback 模型加载结果,请参考9.2模型初始化错误码说明 Callback

6.3.2 质量检测模型加载接口

方法名 initQuality
说明 质量检测模型加载,判断人脸遮挡信息,光照信息,模糊信息,模型包含模糊模型,遮挡信息,作用于质量检测接口
方法 initQuality(final Context context, final String blurModel, final String occlurModel, final Callback callback)
请求参数 说明 必须 类型 返回参数
context 上下文 Context
blurModel 模糊检测模型路径 String
occlurModel 遮挡检测模型路径 String
Callback 模型加载结果,请参考9.2模型初始化错误码说明 Callback

6.3.3 最优人脸模型加载接口

方法名 initBestImage
说明 最优人脸模型初始化接口,可对图像质量进行筛选
方法 initBestImage(final Context context, final String bestModel, final Callback callback)
请求参数 说明 必须 类型 返回参数
context 上下文 Context
bestModel 最优人脸模型路径 String
Callback 模型加载结果,请参考9.2模型初始化错误码说明 Callback

6.3.4 配置信息加载接口

方法名 loadConfig
说明 检测最小人脸,是否开启内部质量检测,检测或者追踪时间间隔等配置
方法 loadConfig(BDFaceSDKConfig config)
请求参数 说明 必须 类型 返回参数
config 人脸信息配置实体类 BDFaceSDKConfig

6.3.5 人脸检测接口

6.3.5.1 根据图片和loadConfig配置进行人脸检测

方法名 detect
说明 人脸检测接口,可获取图像中的人脸宽高,中心点位置和人脸关键点信息,根据6.3.4 loadConfig中配置,可获取头部姿态角,光照,模糊,属性,模糊等信息
请求参数 detect(BDFaceSDKCommon.DetectType type, BDFaceImageInstance imageInstance)
请求参数 说明 必须 类型 返回参数
detectType 检测类型
DETECT_VIS 为可见光
DETECT_NIR为近红外
DetectType FaceInfo[]:人脸参数信息
imageInstance 图片数据信息,可参考6.7 BDFaceImageInstance图片对象 BDFaceImageInstance

6.3.5.2 根据传入的人脸框信息进行检测

方法名 detect
说明 可灵活配置的人脸检测接口,使用输入的faceInfos通过配置bdFaceDetectListConfig可以控制是否进行以下能力的预测:人脸检测,关键点提取,头部姿态角,光照,模糊,属性,情绪,闭眼,闭嘴。输出返回值为预测后的faceInfos,可作用于后续活体,特征抽取入参。(faceInfos[]可配置为空,即为第一帧检测)
方法 detect(

BDFaceSDKCommon.DetectType detectType, BDFaceSDKCommon.AlignType alignType, BDFaceImageInstance imageInstance, FaceInfo[] faceInfos, BDFaceDetectListConf bdFaceDetectListConfig)
请求参数 说明 必须 类型 返回参数
detectType 检测类型
DETECT_VIS 为可见光
DETECT_NIR为近红外
DetectType FaceInfo[]:人脸参数信息
alignType 对齐类型
BDFACE_ALIGN_TYPE_RGB_ACCURATE

为可见光对齐类型;
BDFACE_ALIGN_TYPE_RGB_FAST

为可见光快速对齐类型;
BDFACE_ALIGN_TYPE_NIR_ACCURATE

为 近红外对齐类型
AlignType
imageInstance 图片数据信息,可参考6.7 BDFaceImageInstance图片对象 BDFaceImageInstance
faceInfos[] 人脸框数据(可以通过人脸追踪能力获取人脸框) FaceInfos[]
bdFaceDetectListConfig 功能配置 BdFaceDetectListConfig

6.3.6 人脸跟踪接口

方法名 track
说明 视频人脸跟踪检测,追踪图片中多个人脸信息,通过参数 num 配置,接口包含检测和跟踪功能,返回基本人脸信息和72 关键点,可以绘制人脸框,描绘眼耳鼻嘴关键点,也可作用于后续活体,特征抽取入参
方法 track(

BDFaceSDKCommon.DetectType detectType, BDFaceSDKCommon.AlignType alignType, BDFaceImageInstance imageInstance)
请求参数 说明 必须 类型 返回参数
detectType 检测类型
DETECT_VIS 为可见光
DETECT_NIR为近红外
DetectType FaceInfo[]:人脸参数信息
alignType 对齐类型
BDFACE_ALIGN_TYPE_RGB_ACCURATE

为可见光对齐类型;
BDFACE_ALIGN_TYPE_RGB_FAST

为可见光快速对齐类型;
BDFACE_ALIGN_TYPE_NIR_ACCURATE

为 近红外对齐类型
AlignType
imageInstance 图片数据信息,可参考6.7 BDFaceImageInstance图片对象 BDFaceImageInstance

6.3.7 检测模型卸载接口

方法名 uninitModel
说明 卸载模型
方法 uninitModel()
请求参数 说明 必须 类型 返回参数
Int

6.4 FaceLive活体检测对象

该对象主要用于对卡通人物、动物、2D纸张、电子产品、3D头模的防御,需要与faceDetect人脸检测对象同步使用

构造方法 参数 类型 说明
FaceLive() 无参构造调用(执行默认创建的instance )
FaceLive(BDFaceInstance thisBdFaceInstance) thisBdFaceInstance BDFaceInstance 执行自己创建的instance,独立运行在一个线程,多线程调用情况下需要传,具体可参考6.7 BDFaceImageInstance图片对象

6.4.1 活体模型加载接口

方法名 initModel
说明 静默活体检测模型初始化,可见光活体模型,深度活体,近红外活体模型初始化
方法 initModel(final Context context, final String visModel, final String vis2dmaskModel, final String visHandModel, final String visReflectionModel, final String nirModel, final String depthModel, final Callback callback)
请求参数 说明 必须 类型 返回参数
context 上下文 context
visModel 可见光图片活体模型 string
vis2dmaskModel 优化RGB活体攻破模型,可以为空 String
visHandModel 优化RGB活体攻破模型,可以为空 String
visReflectionModel 优化RGB活体攻破模型,可以为空 String
nirModel 红外图片活体模型 String
depthModel 深度图片活体模型 String
Callback 说明 Callback

6.4.2 人脸静默活体检测接口

方法名 silentLive
说明 静默活体分值检测,返回0-1结果,demo默认值超过0.8 为活体
方法 silentLive(BDFaceSDKCommon.LiveType type, BDFaceImageInstance bdFaceImageInstance, float[] landmarks, float liveThreshold)
请求参数 说明 必须 类型 返回参数
type BDFACE_SILENT_LIVE_TYPE_RGB

可见光图像静默活体检测
BDFACE_SILENT_LIVE_TYPE_NIR

红外图像静默活体检测
BDFACE_SILENT_LIVE_TYPE_DEPTH

深度图像静默活体检测
LiveType float
imageInstance 图片数据信息,可参考6.7 BDFaceImageInstance图片对象 BDFaceImageInstance
landmarks FaceDetect接口detect或track方法检测到的

FaceInfo中的人脸关键点信息
float[]
liveThreshold RGB活体攻破模型开启的话需要添加,设置活体攻破模型检测阈值 float

6.4.3 活体模型卸载接口

方法名 uninitModel
说明 卸载模型
方法 uninitModel()
请求参数 说明 必须 类型 返回参数
Int

6.5 FaceFeature特征提取对象

该对象主要用于对人脸信息的特征抽取,需要与faceDetect人脸检测对象同步使用

构造方法 参数 类型 说明
FaceFeature() 无参构造调用(执行默认创建的instance )
FaceFeature(BDFaceInstance thisBdFaceInstance) thisBdFaceInstance BDFaceInstance 执行自己创建的instance,独立运行在一个线程,多线程调用情况下需要传,具体可参考6.7 BDFaceImageInstance图片对象

6.5.1 特征提取模型加载接口

方法名 initModel
说明 离线特征获取模型加载,目前支持可见光模型,近红外检测模型(非必要参数,可以为空),证件照模型;用户根据自己场景,选择相应场景模型
方法 initModel(final Context context, final String idPhotoModel, final String visModel, final String nirModel, final String rgbdModel, final Callback callback)
请求参数 说明 必须 类型 返回参数
context 上下文 Context
idPhotoModel 证件照图片模型 String
visModel 可见光图片模型 String
nirModel 红外图片模型 String
rgbdModel RGBD图片模型 String
Callback 模型加载结果,请参考9.2模型初始化错误码说明 Callback

6.5.2 特征提取接口

方法名 feature
说明 支持RGB证件照、RGB生活照、NIR图片的识别,仅对一张图片进行特征提取
方法 feature(BDFaceSDKCommon.FeatureType featureType,BDFaceImageInstance imageInstance, float[] landmarks, byte[] feature)
请求参数 说明 必须 类型 返回参数
featureType BDFACE_FEATURE_TYPE_LIVE_PHOTO :生活照 BDFACE_FEATURE_TYPE_ID_PHOTO :证件照 BDFACE_FEATURE_TYPE_NIR: 红外
Context
idPhotoModel 证件照图片模型 String
visModel 可见光图片模型 String
nirModel 红外图片模型 String
rgbdModel RGBD图片模型 String
Callback 模型加载结果,请参考9.2模型初始化错误码说明 Callback

6.5.3 特征提取卸载接口

方法名 uninitModel
说明 卸载模型
方法 uninitModel()
请求参数 说明 必须 类型 返回参数
Int

6.6 FaceSearch识别对象

该对象主要用于对人脸特征的注册、1:1识别、1:N识别,需要与faceFeature人脸特征提取功能同步使用

构造方法 参数 类型 说明
FaceSearch() 无参构造调用(执行默认创建的instance )
FaceSearch(BDFaceInstance thisBdFaceInstance) thisBdFaceInstance BDFaceInstance 执行自己创建的instance,独立运行在一个线程,多线程调用情况下需要传,具体可参考6.2 BdFaceInstance线程实例

6.6.1 SDK注册接口

该接口可以将数据库存储的人脸特征信息注册到SDK内存中,通过识别接口返回注册到的最相似的人员信息和识别得分

6.6.1.1 单个特征注册接口

方法名 pushPersonById
说明 单张特征注册
方法 pushPersonById(int pointID, byte[] feature)
请求参数 说明 必须 类型 返回参数
pointID 人员id,不可重复 Int Int

0为成功
feature 人脸特征 feature 数组,默认初始化512空字节(3568专版SDK为1024字节) Byte[]

6.6.1.2 批量特征注册接口

方法名 pushPersonFeatureList
说明 多张特征注册
方法 pushPersonFeatureList(List<? extends Feature> features)
请求参数 说明 必须 类型 返回参数
features 多张人脸特征信息 List<Feature> Int

0为成功

6.6.1.3 单个特征删除接口

方法名 delPersonById
说明 删除一张注册的特征
方法 delPersonById(int pointID)
请求参数 说明 必须 类型 返回参数
pointID 注册时传入的id Int Int

0为成功

6.6.1.4 全部特征删除接口

方法名 featureClear
说明 删除所有注册的特征
请求参数 featureClear()
请求参数 说明 必须 类型 返回参数
Int

0为成功

6.6.2 识别多帧检测接口

该接口会筛选识别过程中的识别成功且满足条件优质人脸最为底图重新入库,且可自由设置每个人员的优质人脸数量和条件阈值,建议8.5以上的通用版SDK中使用

6.6.2.1 多帧检测入库数量接口

方法名 setMaxUpdateSize
说明 该接口可设置识别多帧的人脸入库数量
方法 setMaxUpdateSize(int maxUpdateSize)
请求参数 说明 必须 类型 返回参数
maxUpdateSize 入库数量,0为不使用多帧 Int

6.6.2.2 多帧检测入库时间间隔接口

方法名 setInputDBIntervalTime
说明 该接口可设置多帧入库后多久可在进行多帧检测入库
方法 setInputDBIntervalTime(long intervalTime)
请求参数 说明 必须 类型 返回参数
intervalTime 间隔多久可从继续让识别人脸冲新入库 Long

6.6.2.3 多帧检测识别阈值设置接口

方法名 setRegisterCompareThreshold
说明 多帧识别阈值设置,内部会与识别到的人员得分进行比较,满足该阈值可以进行下一步判断,全部通过方可入库
方法 setRegisterCompareThreshold(float registerCompareThreshold)
请求参数 说明 必须 类型 返回参数
registerCompareThreshold 多帧检测识别入库阈值 Long

6.6.2.4 多帧检测更新照阈值设置接口

方法名 setUpdateCompareThreshold
说明 多帧识别更新照阈值设置,会与内部其他该人员的多帧特征进行比较,满足该阈值可以进行下一步判断,全部通过方可入库
方法 setUpdateCompareThreshold(float updateCompareThreshold)
请求参数 说明 必须 类型 返回参数
updateCompareThreshold 多帧检测识别入库阈值 Long

6.6.2.5 多帧检测入库阈值设置

方法名 setInputDBThreshold
说明 满足上述阈值判断后,SDK会判断该识别结果得分是否满足该阈值条件,通过方可入库
方法 setInputDBThreshold(float inputDBThreshold)
请求参数 说明 必须 类型 返回参数
inputDBThreshold 多帧入库阈值 Long

6.6.2.6 多帧检测人员入库监听

方法名 setInputDBListener
说明 对识别过程中识别图像满足多帧条件后,识别图片入库的监听
方法 setInputDBListener(InputDBListener inputDBListener)
请求参数 说明 必须 类型 返回参数
inputDBListener onInputDB(int id1, int id2)

多帧检测监听,返回多帧入库后的人员id
InputDBListener

6.6.3 1:N识别接口

方法名 search
说明 当前feature和注册的Feature 集合比对,返回预加载Feature集合中命中的id,feature 字段和比对分值score;用户可以通过id 在数据库中查找全量信息。
方法 search(BDFaceSDKCommon.FeatureType featureType, float threshold, int topNum, byte[] feature)
请求参数 说明 必须 类型 返回参数
featureType FeatureType.FEATURE_VIS生活照
FeatureType.FEATURE_ID_PHOTO证件照照
FeatureType List<Feature>

识别到的人员结果,可通过id在数据库中查找
threshold 比对阈值 float
topNum 获取前num 个feature+id映射数组 Int
feature 当前检查人脸特征值 Byte[]

6.6.4 1:1比对接口

方法名 compare
说明 两张fature人脸特征进行比对,返回float得分
方法 compare(BDFaceSDKCommon.FeatureType featureType, byte[] feature1, byte[] feature2, boolean isPercent)
请求参数 说明 必须 类型 返回参数
featureType FeatureType.FEATURE_VIS生活照
FeatureType.FEATURE_ID_PHOTO证件照照
FeatureType float

比对得分

通常isPercent建议设为true,满分100分,推荐阈值80分为识别通过
feature 当前检查人脸特征值 Byte[]
feature 比对的人脸特征 Byte[]
isPercent 是否需要阈值映射,建议为true Boolean

6.7 BDFaceImageInstance图片对象

该对象可以将视频流数据或图片(bitmap)数据转换为SDK可用图像

构造方法 参数 类型 说明
BDFaceImageInstance(byte[] data, int height, int width,BDFaceSDKCommon.BDFaceImageType imageType, float angle, int isMbyteArrayror) data byte[] 视频流数据
height Int
width Int
imageType BDFaceImageTyp 图片类型
angle Int 旋转角度
isMbyteArrayror Int 是否镜像
BDFaceImageInstance(Bitmap bitmap) bitmap Bitmap 图片对象

6.7.1 获取图片信息接口

方法名 getImage
说明 如果需要校验底层图片,通过该接口获取底层送检图片信息数据
方法 getImage()
请求参数 说明 必须 类型 返回参数

6.7.2 图片销毁接口

方法名 destory
说明 销毁图片对象,每一帧图像数据使用完之后,必须调用,否着会出现内存溢出
方法 destory()
请求参数 说明 必须 类型 返回参数

6.8 FaceGaze注意力检测对象

该对象主要用于眼部状态检测

构造方法 参数 类型 说明
FaceGaze() 无参构造调用(执行默认创建的instance )
FaceGaze(BDFaceInstance thisBdFaceInstance) thisBdFaceInstance BDFaceInstance 执行自己创建的instance,独立运行在一个线程,多线程调用情况下需要传,具体可参考6.2 BdFaceInstance线程实例

6.8.1 注意力模型加载接口

方法名 initModel
说明 眼睛状态检测,同时判断出左眼,右眼6种状态,分别为向上,向下,向左,向右,向前,闭合
方法 initModel(final Context context, final String gazeModel, final Callback callback)
请求参数 说明 必须 类型 返回参数
context 上下文 Context
GazeModel 注意力模型 String
Callback 模型加载结果,请参考9.2模型初始化错误码说明 Callback

6.8.2 注意力信息获取接口

方法名 gaze
说明 眼睛状态检测,同时判断出左眼,右眼6种状态,分别为向上,向下,向左,向右,向前,闭合
方法 gaze(BDFaceImageInstance imageInstance, float[] landmarks)
请求参数 说明 必须 类型 返回参数
imageInstance 图片数据信息,可参考6.7 BDFaceImageInstance图片对象 BDFaceImageInstance BDFaceGazeInfo

注意力信息实体类,具体可参考[7.3 BDFaceGazeInfo 实体类](#_7.3%20BDFaceGazeInfo 实体类)
landmarks FaceDetect检测后landmark float[]

6.8.3 注意力卸载接口

方法名 uninitModel
说明 卸载模型
方法 uninitModel()
请求参数 说明 必须 类型 返回参数
Int

6.9 FaceCrop抠图对象

该对象可以根据人脸框或者人脸关键点进行抠图

构造方法 参数 类型 说明
FaceCrop() 无参构造调用(执行默认创建的instance )
FaceCrop(BDFaceInstance thisBdFaceInstance) thisBdFaceInstance BDFaceInstance 执行自己创建的instance,独立运行在一个线程,多线程调用情况下需要传,具体可参考6.2 BdFaceInstance线程实例

6.9.1 抠图能力加载接口

方法名 initFaceCrop
说明 初始化抠图能力
方法 initFaceCrop(final Callback callback)
请求参数 说明 必须 类型 返回参数
Callback 模型加载结果,请参考9.2模型初始化错误码说明 Callback

6.9.2 人脸关键点抠图接口

方法名 cropFaceByLandmark
说明 眼睛状态检测,同时判断出左眼,右眼6种状态,分别为向上,向下,向左,向右,向前,闭合
方法 cropFaceByLandmark(BDFaceImageInstance imageInstance, float[] landmark, float enlargeRatio, boolean correction, AtomicInteger isOutofBoundary)
请求参数 说明 必须 类型 返回参数
imageInstance 图片数据信息,可参考6.7 BDFaceImageInstance图片对象 BDFaceImageInstance BDFaceImageInstance
landmarks FaceDetect检测后landmark float[]
enlargeRatio 抠图放大倍数 float
correction 是否进行人脸矫正 Boolean
isOutofBoundary 抠图是否:是否超出图像范围(是否有黑边) 0为未超出,1为超出 Int

6.10 FaceMouthMask口罩检测接口

构造方法 参数 类型 说明
FaceMouthMask() 无参构造调用(执行默认创建的instance )
FaceMouthMask(BDFaceInstance thisBdFaceInstance) thisBdFaceInstance BDFaceInstance 执行自己创建的instance,独立运行在一个线程,多线程调用情况下需要传,具体可参考6.2 BdFaceInstance线程实例

6.10.1 口罩检测模型加载接口

方法名 initModel
说明 加载口罩检测模型
方法 initModel(final Context context, final String mouthMaskModel, final Callback callback)
请求参数 说明 必须 类型 返回参数
context 上下文 Context
mouthMaskModel 口罩检测模型路径 String
Callback 模型加载结果,请参考9.2模型初始化错误码说明 Callback

6.10.2 口罩检测结果获取接口

方法名 checkMask
说明 通过图片和人脸框数据获取口罩检测置信度数据,0代表不戴口罩,1代表戴口罩
方法 checkMask(

BDFaceImageInstance bdFaceImageInstance, FaceInfo[] faceInfos)
请求参数 说明 必须 类型 返回参数
imageInstance 图片数据信息,可参考6.7 BDFaceImageInstance图片对象 BDFaceImageInstance float[]

口罩检测结果
faceInfos 人脸数据 FaceInfo[]

具体可参考7.1 FaceInfo实体类

6.10.3 口罩检测卸载接口

方法名 uninitModel
说明 卸载模型
方法 uninitModel()
请求参数 说明 必须 类型 返回参数
Int

6.11 FaceSafetyHat安全帽检测

构造方法 参数 类型 说明
FaceSafetyHat() 无参构造调用(执行默认创建的instance )
FaceSafetyHat(BDFaceInstance thisBdFaceInstance) thisBdFaceInstance BDFaceInstance 执行自己创建的instance,独立运行在一个线程,多线程调用情况下需要传,具体可参考6.2 BdFaceInstance线程实例

6.11.1 安全帽模型加载接口

方法名 initModel
说明 加载口罩检测模型
方法 initModel(final Context context, final String safetyHatModel, final Callback callback)
请求参数 说明 必须 类型 返回参数
context 上下文 Context
safetyHatModel 安全帽检测模型路径 String
Callback 模型加载结果,请参考9.2模型初始化错误码说明 Callback

6.11.2 安全帽检测结果获取接口

方法名 checkHat
说明 检测是否带安全帽
方法 checkHat(BDFaceImageInstance bdFaceImageInstance, FaceInfo[] faceInfos)
请求参数 说明 必须 类型 返回参数
imageInstance 图片数据信息,可参考6.7 BDFaceImageInstance图片对象 BDFaceImageInstance float[]

口罩检测结果
faceInfos 人脸数据 FaceInfo[]

具体可参考7.1 FaceInfo实体类

6.11.3 安全帽检测卸载接口

方法名 uninitModel
说明 卸载模型
方法 uninitModel()
请求参数 说明 必须 类型 返回参数
Int

7、SDK实体类说明

7.1 FaceInfo实体类

变量 类型 说明
faceID Int 人脸索引值,标记连续视频帧追踪中人脸ID
centerX float 人脸中心点x坐标
centerY float 人脸中心点y坐标
width float 人脸宽度
height float 人脸高度
angle float 人脸角度
score float 人脸置信度
landmarks float[] 人脸72个关键点数据(鼻子,眼镜,嘴巴,眉毛)
yaw float 人脸左右偏转角
roll float 人脸平行平面内的头部旋转角
pitch float 人脸上下偏转角
bluriness float 人脸模糊度信息
illum int 人脸光照信息
occlusion BDFaceOcclusion 人脸遮挡信息,可参考7.2 BDFaceOcclusion实体类
age Int 人脸年龄
gender BDFaceGender 性别

BDFACE_GENDER_FEMALE, // 女性

BDFACE_GENDER_MALE, // 男性
bestImageScore float 最优人脸得分

7.2 BDFaceOcclusion实体类

变量 类型 说明
leftEye float 左眼遮挡置信度
rightEye float 右眼遮挡置信度
nose float 鼻子遮挡置信度
mouth float 嘴巴遮挡置信度
leftCheek float 左脸遮挡置信度
rightCheek float 右脸遮挡置信度
chin float 下巴遮挡置信度

7.3 BDFaceGazeInfo 实体类

变量 类型 说明
leftEyeConf float 左眼的置信度
rightEyeConf float 右眼的置信度
leftEyeGaze BDFaceGazeDirection 左眼的注意力信息

BDFACE_GACE_DIRECTION_UP, // 向上看

BDFACE_GACE_DIRECTION_DOWN, // 向下看

BDFACE_GACE_DIRECTION_RIGHT, // 向右看

BDFACE_GACE_DIRECTION_LEFT, // 向左看

BDFACE_GACE_DIRECTION_FRONT, // 向前看

BDFACE_GACE_DIRECTION_EYE_CLOSE, // 闭眼
rightEyeGaze BDFaceGazeDirection 右眼的注意力信息

同上

7.4 Feature实体类

变量 类型 说明
id int 人员id
feature byte[] 人员特征,通常为512字节组数(3568专版SDK为1024字节)
score float 识别得分

8、升级指导

注意:不同版本的人脸特征模型不能同步,大版本更新(小版本不需要,如8.1更新到8.2则不需要,7.0到8.0需要)需要删除人脸库,重新导入人脸

8.1 版本3.X->4.X

libs 下所有 jar 和文件替换成 4.0 的 2.assets 下所有模型文件替换成 4.0 的, GlobalSet 模型路径要对应到 assets 下相应的文件夹 image.png

8.2 版本4.X->7.X

版本更新后,SDK对应的识别 活体 人脸检测等模型,均会更新,不同版本模型无法同步,所有需要更新最新模型路径,模型路径通常在每个模块下的GlobaSet文件夹中 90668D14C6CC27CF2D4AEED050FECA0C.jpg

8.3 版本7.X->8.X

(更新版本要刷新人脸底库,重新导入人脸) 同上所述,版本更新后,SDK对应的识别 活体 人脸检测等模型,需更新GlobaSet文件下的所有模型路径 image.png 8.0开始,识别对象从FaceFeature改为了FaceSearch,添加了单个人脸特征注册功能,请添加最新识别对象 image.png image.png image.png image.png 其他版本SDK 升级8.1+,需替换模型以及SDK image.png image.png 替换后更新模型路径文件 image.png

9、激活和模型初始化错误码说明

9.1

错误码 描述
0 激活成功
1 license未初始化
2 license数据解密失败
3 license格式错误
4 key校验错误
5 算法id校验错误
6 MD5校验失败
7 设备id校验失败
8 包名校验错误
9 过期时间不正确
10 功能未授权
11 授权过期
12 本地文件读取失败
13 远程数据拉取失败
14 本地时间校验失败
1001 文件读取失败
1002 缓存清理失败
1003 zip解析失败
1004 zip文件读取失败
1005 没找到授权文件
1006 context为空
1007 devicesId为空
1008 json异常
1009 http请求异常
1010 http数据异常
1011 网络链接异常
28200 未知错误
216100 非法参数
216102 不支持的类型
216101 请求参数不足
290000 无操作权限
290001 序列号生成错误
290002 序列号错误
290003 设备标识错误
290004 序列号被激活
290005 license生成失败
290006 license过期时间设置错误
290007 license更新失败
290008 license下载次数超过上限
290009 license被其他设备绑定
290010 license设备绑定失败
290011 license查询失败

9.2模型初始化错误码说明

错误码 描述
0 激活成功
1 context 为null
-1 非法的参数
-2 内存分配失败
-3  实例对象为空
-4 模型内容为空
-5 不支持的能力类型
-6 不支持预测类型
-7 预测库对象创建失败
-8 预测库初始化失败
-9 图像数据为空
-10 人脸能力初始化失败
-11 能力未加载
-12 人脸能力已加载
-13 未授权
-14 人脸能力运行异常
-15 不支持的图像类型
-16 图像转换失败
上一篇
产品定价
下一篇
WIN-C++-SDK