Android-3568专版SDK
概述
- 百度人脸离线识别SDK Android版本,主要支持RK3568、3566芯片平台(可登陆百度智能云控制台console后台获取SDK部署包)
1、SDK简介
1.1 功能架构
SDK具有人脸检测、跟踪、质量检测、特征提取、RGB、 NIR以及3D结构光静默活体、1:1比对、1:N识别、年龄、性别、是否戴口罩、戴眼镜和佩戴安全帽、左右眼球注意力等功能,架构图如下:

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

3、SDK及Demo工程结构说明
3.1 官网工程包结构说明
目前百度AI官网有集成SDK摄像头、人脸数据库统一封装的效果展示的SDK Demo工程,官网的下载地址为: https://console.bce.baidu.com/ai-engine/old/#/ai/face/offline/index

该工程中分为Andorid通用项目、DEPTH 3D结构光项目、SDK、文档,四个板块,主要功能为:
| 文件夹名 | 说明 |
|---|---|
| SDK | SDK核心库,包含SDK的aar以及模型文件 |
| FaceSDKAndroid | Android通用项目,适用于大部分摄像头和安卓设备,支持RGB+NIR双目摄像头识别,集成方式可参考后述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_v7.0.rknn.encrypted | 人脸快速对其模型 | 否 | 使用人脸跟踪能力可快速进行人脸检测 |
| align_v7.0.rknn.encrypted | 人脸对其模型 | 否 | 再检测过程中更加稳定的模型,且后续的活体检测和识别都需要依赖人脸检测的输出结果,不建议删除 |
| attribute.rknn.encrypted | 人脸属性模型 | 是 | 若不使用人脸属性检测功能,该文件夹可删除 |
| best_image-customized-pa-rk3568.model.int8-2.0.1.1 | 最佳人脸 | 否 | 最佳人脸通常是质量判断的一个环节、不建议删除 |
| blur_v7.0_u8.rknn.encrypted | 人脸质量模糊度检测 | 否 | 过滤模糊的图片,选择清晰的图片,可提高识别通过率 |
| dark_enhance-customized-pa-zero_depthwise.model.float32-1.0.2.2 | 暗光恢复模型 | 是 | 用于暗光情况图像优化,若不使用该功能,该文件夹可删除 |
| detect_V192x192_v8.0.rknn.encrypted | 人脸检测模型 | 否 | 通常与人脸对其模型同时加载,可检测出人脸宽高位置及人脸关键点信息,且后续人脸特征 人脸识别 |
| feature_live_v8.5.rknn.encrypted | 特征提取模型 | 是 | 人脸特征提取模型,需要进行1:N识别或 1:1比对的情况下不建议删除 |
| mouthmask_v8.0.rknn.encrypted | 口罩检测模型 | 是 | 检测是否戴口罩,不需要该功能可删除 |
| occlusion_fp16_v7.0.rknn.encrypted | 质量检测遮挡模型 | 否 | 面部遮挡模型,人脸识别时候,建议通过遮挡模型判断 |
| safety_helmet_v8.0.rknn.encrypted | 安全帽检测模型 | 是 | 安全帽检测模型,不需要可删除 |
| liveness_rgb_fp16_v8.0.rknn.encrypted | RGB活体检测模型 | 是 | 用于RGB可见光单目静默活体,若只使用rgb静默活体,则该文件夹下除该文件外均可删除 |
| liveness_nir_fp16_v8.0.rknn.encrypted | NIR活体检测模型 | 是 | 用于NIR可见光单目静默活体,若没有NIR摄像头或不使用NIR活体可删除 |
4、Demo工程的编译和使用
SDK Demo工程下载解压后,FaceSDKAndroid工程如下:

使用android studio打开FaceSDKAndroid项目

注:部分版本的android studio在编译的时候会出现错误,或者提示需要升级gradle8.0以上版本,该问题为java jdk不适配导致,目前demo的gradle版本为7.4,可在android studio中设置11或17版本的java jdk,截图如下: 相关报错


解决方案


Jdk设置完成后,等待项目编译完成,运行项目

注:andorid手机需开启开发者模式和usb调试才可以正常运行,通常在手机设置-关于手机-找到系统版本连点7下即可开启开发者模式,不同型号手机位置不同

demo主要运行流程为,其中激活须设备能连接网络(离线激活不需要),激活用到的序列号可在百度AI官网申请,官网具体位置和激活流程请参考4.1 授权激活,demo主要流程图如下:

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)目录下,进入离线激活界面,点击激活,即可完成激活,百度官网的离线激活页面如下:

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


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


4.2 SDK Demo使用说明(可直接编译Demo生成apk体验)
4.2.1 模型加载及镜头角度设置
SDK激活成功后(激活可参考4.1 授权激活)会进入demo首页,此时会自动进行模型初始化加载操作,等待首页提示模型初始化成功后,再进行后续操作,模型初始化接口及弹窗提示效果如下:

模型初始化成功后,部分设备还不能进行注册和人脸识别,需在设置界面中调整人脸检测和摄像头的角度(须人脸正向),角度正确后可进行注册和人脸识别操作,界面如下:

在设置界面中找到镜头设置

镜头设置中分为:人脸检测图像设置为SDK对视频流进行解码的角度(识别角度),视频流回显图像设置为摄像头在屏幕中显示的角度(显示角度),具体界面如下(如人脸不是正向的时候,可点击旋转按钮把人脸摆正):


4.2.2 图片及视频流注册
设置好摄像头角度后,返回首页,在右上角按钮中可找到人脸注册和人脸库管理选项(进行人脸1:N识别,需要先进行人脸注册入库,1:N识别时候是实时检测的视频帧和人脸库里的已经注册入库的N个人进行比对识别),其中人脸注册功能支持将摄像头中检测的人脸数据注册到数据库(也支持图片批量导入注册入库),人脸库管理中可查看注册的人脸信息并且也可以对图片进行人脸注册,整体效果截图如下: 视频流注册: 选择人脸注册

检测到人脸后,输入用户信息,点击确认方可完成注册

图片注册: 图片注册需要手动拷贝将需要注册的人脸图片放到设备/sdcard/Face-Imort/文件夹中,在人脸库管理-批量导入中方可进行图片注册,效果如下:

在人脸库管理中还可以看到目前数据库中的人脸数据进行查询和删除的操作,点击右上角批量导入,方可进行图片注册(注:目前demo对图片名进行控制,不得超过5个字、另外可能会有部分不符合质量要求的人脸注册入库时候失败,具体可根据调试信息查看)

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

1:1比对: SDK Demo中的人证核验模块为1:1比对展示界面,点击底部上传证件照按钮,进入相册选择证件照图片方可进行视频流1:1比对,比对展示效果如下:

5、SDK以及项目的集成
5.1 集成说明
项目集成分为业务层(安卓原生)和SDK能力层(原子接口)的集成,集中需要将SDK核心库、SDK模型和dataLibrary模块集成到项目中。(其中dataLibrary模块为安卓原生业务层代码,内容可以自行修改,该模块包含了摄像头启动、sqlite数据库封装、SDK原子接口封装,可以更高效的进行SDK的接口集成)具体位置为:

模块以及核心库导入完成后,将1:N(gateLibrary)或1:1(identifylibrary)模块中的FaceUtils文件放入到项目,该文件对SDK初始化以及阈值进行封装,可更好的设置SDK参数,具体可参考5.3.1 FaceUtils类方法说明

上述功能导入后,可直接使用dataLibrary中封装好的类进行界面展示和识别接口的调用,dataLibrary功能説明可參考5.3工程核心类和方法说明(dataLibrary)
5.2 项目集成流程说明
项目集成中根据自身不同业务场景,可自由定制化开发,其中SDK能力层主要流程和接口截图流程如下:

SDK核心库、FaceUtils、SDK模型和dataLibrary模块集成到项目中后, 先调用激活接口initLicenseOffLine(离线激活)、initLicenseOnLine(在线激活)、initLicenseBatchLine(批量激活),激活成功(OonResponse方法code参数为0则成功)后,才可以进行之后操作,具体代码如下:



激活成功后,需要进行SDK模型初始化和数据库初始化,模型初始化成功后才可以进行后续识别和注册操作,具体代码如下:

其中FaceSDKManager.getInstance().initModel接口包含: FaceDetect类中人脸检测模型的初始化,可参考6.3.1 模型加载接口 FaceDetect类中质量检测模型的初始化,可参考6.3.2 质量检测模型加载接口 FaceLive类中活体检测模型的初始化,可参考6.4.1 活体模型加载接口 FaceFeature类中人脸特征提取模型的初始化,可参考6.5.1 特征提取模型加载接口 FaceSearch人脸识别模型的初始化,可参考6.6 FaceSearch识别对象 等,单个模型初始化接口可参考下图:

数据库初始化代码如下图所示:

模型初始化成功后,需要进行人脸注册才可以正常识别到人脸, 通过FaceSDKManager.getInstance().personDetect获取图片的人脸特征结果,

其中,FaceSDKManager.getInstance().personDetect特征提取接口中包含: FaceDetect的detect人脸检测接口调用,可参考6.3.5 人脸检测接口 FaceFeature的feature人脸特征提取接口调用,可参考6.5.2 特征提取接口,具体截图如下

特征提取成功后,通过FaceApi的registerUserIntoDBmanager或userAdd接口注册到数据库,

数据库保存成功后,在通过FaceSDKManager.getInstance().initPush,将数据库的人脸信息放到SDK缓存中

注册成功后,在识别界面创建识别阈值BDFaceCheckConfig和BDLiveConfig,其中包含识别、活体、质量等阈值的配置信息

识别阈值参数创建完成后,创建BDFaceImageConfig摄像头数据参数类,并使用CameraPreviewManager和GlMantleSurfacView打开摄像头,并展示摄像头界面



摄像头启动成功后,在CameraPreviewManager的setmCameraDataCallback接口可获取到摄像头每帧数据,将每帧数据放到BDFaceImageConfig摄像头数据参数类中,通过FaceSDKManager.getInstance().onDetectCheck对该数据进行人脸识别操作

其中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比对接口,具体代码截图如下:






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类方法说明 |
| FaceModel | SDK接口封装类,封装了模型初始化(包含检测 活体 质量 识别 特征提取 口罩等模型)和SDK原子接口的封装,可进行快速初始化和对原子接口快速调用 |
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)中,方便后续进行用户信息提取操作,优化每次获取用户全部信息耗时过高问题

将用户信息注册到数据库,进行识别前需要提取出该信息放入SDK缓存中进行识别,具体识别接口可参考6.6 FaceSearch识别对象

查询所有用户,demo在应用层做了初始化后可以将提取到的用户数据作为list放到缓存的操作,所以此接口获取不会出现耗时操作

根据姓名查询用户信息,该接口可用于在人脸信息特征提取成功准备注册到数据库时判断数据库中是否包含该用户

根据用户id查询用户,demo中将数据库id设置为自增的int值,以保证每个id之间不重复,使用该方法可以在人脸识别成功后,通过识别出的用户id在数据库中查询用户信息

根据姓名在数据库删除用户,若产出成功识别前需要在SDK缓存中也删除该接口,或者从新获取一次数据库信息刷新一遍SDK缓存,具体识别接口可参考6.6 FaceSearch识别对象

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相关接口截图及说明如下:
模型初始化接口,针对人脸快速检测、人脸跟踪、活体检测、特征提取、口罩识别、属性检测、注意力检测、等功能进行模型初始化操作(只有初始化加载了模型、后续人脸检测等能力才能生效)

视频流逐帧检测接口,进行RGB和NIR的人脸检测、活体检测、质量检测、特征提取、1:N识别和1:1识别

特征提取接口,对图片进行人脸特征提取

initpush接口,主要作用为在识别前将人脸数据库中的信息同步到SDK缓存中(在缓存中比对识别速度更快),在人脸识别时会将视频流中提取的人脸特征和SDK缓存中的特征进行比较,并返回得分最大的人脸

视频流人脸识别接口,可以识别摄像头中人脸信息,返回人脸坐标进行应用层快速人脸绘制跟踪,并对人脸进行质量检测、活体检测和识别


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

5.3.5 PreviewTexture类方法说明
| 方法名 | 所需参数 | 功能说明 |
|---|---|---|
| setCamera( Camera camera, int width, int height) |
Camera:摄像头实例 int(width):摄像头宽度 Int(height):摄像头高度 |
开启摄像头 |
PreviewTexture相关接口截图及说明如下:
PreviewTexture为摄像头展示view,继承ViewGroup,可以通过setCamera启动摄像头,并将摄像头信息展示到该view中

5.3.6 FaceModel类方法说明
faceModel类可以对识别和注册流程中的全部模型进行快速初始化,并获取对应线程(识别和注册通常为双线程,不能使用相同类同时检测)中所需的示例类
| 方法名 | 所需参数 | 功能说明 |
|---|---|---|
| init(BDFaceSDKConfig config, Context context) |
BDFaceSDKConfig :人脸检测参数 context:上下文 |
模型快速初始化接口 |
| setListener(SdkInitListener listener) | SdkInitListener:模型初始化监听回调 | 模型初始化监听接口 |
| getFacePersonFeature() | 无 | 获取注册线程中的人脸特征提取示例类 |
| getFacePersonSearch() | 无 | 获取注册线程中的识别示例类 |
| getFaceDetectPerson() | 无 | 获取注册线程中的人脸检测示例类 |
| getFaceSearch() | 无 | 获取人脸识别示例类 |
| getFaceTrack() | 无 | 获取快速检测人脸示例类 |
| getFaceCrop() | 无 | 获取人脸裁剪示例类 |
| getFaceFeature() | 无 | 获取人脸特征提取示例类 |
| getFaceDetect() | 无 | 获取人脸检测示例类 |
| getFaceNirDetect() | 无 | 获取NIR图像人脸检测示例类 |
| getFaceLive() | 无 | 获取活体检测示例类 |
| getFaceMoutMask() | 无 | 获取口罩检测示例类 |
| getFaceSafetyHat() | 无 | 获取安全帽检测示例类 |
| getFaceGaze() | 无 | 获取眼部注意力检测示例类 |
faceModel相关接口截图及说明如下:

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

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

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

5.5.2 特征字符串转换
在线特征提取接口会返回bsae64位的人脸特征字符串,可使用Base64.decode()方法转换为byte数组,截图如下:

5.6 摄像头模组集成方法说明
此章节为应用层的摄像头模组说明,会对不同摄像头进行简单的描述和调用方式,其中摄像头通常分为三类,类型如下、实际场景中,可根据自身需要选择使用那种摄像头配置:
| 摄像头类型 | 摄像头功能说明 |
|---|---|
| RGB | 标准摄像头,通过红、绿、蓝三原色通道捕获彩色图像的摄像头,安卓手机中自带摄像头准为RGB摄像头 同时也是必不可少的摄像头,在项目中人脸检测、质量检测、1:1和1:N识别都需要使用该摄像头 |
| RGB+NIR | RGB:同上 NIR:近红外摄像头,主要用于辅助活体检测,更好的防御在活体检测过程中电子产品产生的人脸攻破问题 |
5.6.1 RGB摄像头模组集成说明
RGB摄像头为标准摄像头,Android手机自带摄像头均可理解为RGB摄像头,使用Android原生自带的Camera类进行界面展示和视频流提取,项目工程可参照官网下载的工程包中的FaceSDKAndroid进行集成,工程文件可参照:3.2节 官网工程包结构说明,并且项目中对Camera进行了封装,具体可参照:4.3.5节 CameraPreviewManager类方法说明

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类方法说明

5.7 多人脸识别说明
SDK支持多个人脸进行人脸面部ui绘制和识别,可调整SDK的maxDetectNum参数调整人脸识别数量(建议单次识别10个人脸以内),并在FaceSDKManager类中开启多人脸识别测试识别效果,具体截图如下:



5.8 Log日志说明
项目中对激活、模型初始化、识别过程进行了日志打印,可通过LogUtils类设置是否打印日志,且可通过FaceModel(模型初始化)、FaceSDKManager(识别)、BdFaceAuth(激活)文字过滤日志,截图如下:

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 1:N识别接口
| 方法名 | featureSearch | |||
|---|---|---|---|---|
| 说明 | 当前feature和注册的Feature 集合比对,返回预加载Feature集合中命中的id,feature 字段和比对分值score;用户可以通过id | |||
| 方法 | featureSearch(byte[] firstFaceFeature, BDFaceSDKCommon.FeatureType featureType, int topNum, boolean isPercent) | |||
| 请求参数 | 说明 | 必须 | 类型 | 返回参数 |
| firstFaceFeature | 当前检查人脸特征值 | 是 | Byte[] | List |
| featureType | FeatureType.FEATURE_VIS生活照 | |||
| FeatureType.FEATURE_ID_PHOTO证件照照 | 是 | FeatureType | ||
| topNum | 获取前num 个feature+id映射数组 | 是 | Int | |
| isPercent | 是否需要阈值映射,建议为true | 是 | Boolean |
6.5.4 1:1比对接口
| 方法名 | compare | |||
|---|---|---|---|---|
| 说明 | 两张fature人脸特征进行比对,返回float得分 | |||
| 方法 | featureCompare(BDFaceSDKCommon.FeatureType featureType, byte[] feature1, byte[] feature2, boolean isPercent) | |||
| 请求参数 | 说明 | 必须 | 类型 | 返回参数 |
| featureType | FeatureType.FEATURE_VIS生活照 | |||
| FeatureType.FEATURE_ID_PHOTO证件照照 | 是 | Byte[] | float |
比对得分 通常isPercent建议设为true,满分100分,推荐阈值80分为识别通过 | | feature1 | 当前检查人脸特征值 | 是| FeatureType| | | feature2 | 比对的人脸特征| 是| Int| | | isPercent | 是否需要阈值映射,建议为true| 是| Boolean| |
6.5.5 特征注册接口
| 方法名 | featurePush | |||
|---|---|---|---|---|
| 说明 | 将特征全量注册到sdk缓存 | |||
| 方法 | featurePush(List features) | |||
| 请求参数 | 说明 | 必须 | 类型 | 返回参数 |
| features | 人脸特征集 | 是 | List | Int 注册code.0为成功 |
6.5.6 特征提取卸载接口
| 方法名 | uninitModel | |||
|---|---|---|---|---|
| 说明 | 卸载模型 | |||
| 方法 | uninitModel() | |||
| 请求参数 | 说明 | 必须 | 类型 | 返回参数 |
| 无 | 无 | 是 | 无 | Int |
6.6 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.6.1 获取图片信息接口
| 方法名 | getImage | |||
|---|---|---|---|---|
| 说明 | 如果需要校验底层图片,通过该接口获取底层送检图片信息数据 | |||
| 方法 | getImage() | |||
| 请求参数 | 说明 | 必须 | 类型 | 返回参数 |
| 无 | 无 | 无 |
6.6.2 图片销毁接口
| 方法名 | destory | |||
|---|---|---|---|---|
| 说明 | 销毁图片对象,每一帧图像数据使用完之后,必须调用,否着会出现内存溢出 | |||
| 方法 | destory() | |||
| 请求参数 | 说明 | 必须 | 类型 | 返回参数 |
| 无 | 无 | 无 |
6.7 FaceCrop抠图对象
该对象可以根据人脸框或者人脸关键点进行抠图
| 构造方法 | 参数 | 类型 | 说明 |
|---|---|---|---|
| FaceCrop() | 无 | 无参构造调用(执行默认创建的instance ) | |
| FaceCrop(BDFaceInstance thisBdFaceInstance) | thisBdFaceInstance | BDFaceInstance | 执行自己创建的instance,独立运行在一个线程,多线程调用情况下需要传,具体可参考6.2 BdFaceInstance线程实例 |
6.7.1 抠图能力加载接口
| 方法名 | initFaceCrop | |||
|---|---|---|---|---|
| 说明 | 初始化抠图能力 | |||
| 方法 | initFaceCrop(final Callback callback) | |||
| 请求参数 | 说明 | 必须 | 类型 | 返回参数 |
| Callback | 模型加载结果,请参考9.2模型初始化错误码说明 | 是 | Callback |
6.7.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.8 FaceMouthMask口罩检测接口
| 构造方法 | 参数 | 类型 | 说明 |
|---|---|---|---|
| FaceMouthMask() | 无 | 无参构造调用(执行默认创建的instance ) | |
| FaceMouthMask(BDFaceInstance thisBdFaceInstance) | thisBdFaceInstance | BDFaceInstance | 执行自己创建的instance,独立运行在一个线程,多线程调用情况下需要传,具体可参考6.2 BdFaceInstance线程实例 |
6.8.1 口罩检测模型加载接口
| 方法名 | initModel | |||
|---|---|---|---|---|
| 说明 | 加载口罩检测模型 | |||
| 方法 | initModel(final Context context, final String mouthMaskModel, final Callback callback) | |||
| 请求参数 | 说明 | 必须 | 类型 | 返回参数 |
| context | 上下文 | 是 | Context | 无 |
| mouthMaskModel | 口罩检测模型路径 | 是 | String | 无 |
| Callback | 模型加载结果,请参考9.2模型初始化错误码说明 | 是 | Callback |
6.8.2 口罩检测结果获取接口
| 方法名 | checkMask | |||
|---|---|---|---|---|
| 说明 | 通过图片和人脸框数据获取口罩检测置信度数据,0代表不戴口罩,1代表戴口罩 | |||
| 方法 | checkMask( BDFaceImageInstance bdFaceImageInstance, FaceInfo[] faceInfos) |
|||
| 请求参数 | 说明 | 必须 | 类型 | 返回参数 |
| imageInstance | 图片数据信息,可参考6.7 BDFaceImageInstance图片对象 | 是 | BDFaceImageInstance | float[] 口罩检测结果 |
| faceInfos | 人脸数据 | 是 | FaceInfo[] 具体可参考7.1 FaceInfo实体类 |
6.8.3 口罩检测卸载接口
| 方法名 | uninitModel | |||
|---|---|---|---|---|
| 说明 | 卸载模型 | |||
| 方法 | uninitModel() | |||
| 请求参数 | 说明 | 必须 | 类型 | 返回参数 |
| 无 | 无 | 是 | 无 | Int |
6.9 FaceSafetyHat安全帽检测
| 构造方法 | 参数 | 类型 | 说明 |
|---|---|---|---|
| FaceSafetyHat() | 无 | 无参构造调用(执行默认创建的instance ) | |
| FaceSafetyHat(BDFaceInstance thisBdFaceInstance) | thisBdFaceInstance | BDFaceInstance | 执行自己创建的instance,独立运行在一个线程,多线程调用情况下需要传,具体可参考6.2 BdFaceInstance线程实例 |
6.9.1 安全帽模型加载接口
| 方法名 | initModel | |||
|---|---|---|---|---|
| 说明 | 加载口罩检测模型 | |||
| 方法 | initModel(final Context context, final String safetyHatModel, final Callback callback) | |||
| 请求参数 | 说明 | 必须 | 类型 | 返回参数 |
| context | 上下文 | 是 | Context | 无 |
| safetyHatModel | 安全帽检测模型路径 | 是 | String | 无 |
| Callback | 模型加载结果,请参考9.2模型初始化错误码说明 | 是 | Callback |
6.9.2 安全帽检测结果获取接口
| 方法名 | checkHat | |||
|---|---|---|---|---|
| 说明 | 检测是否带安全帽 | |||
| 方法 | checkHat(BDFaceImageInstance bdFaceImageInstance, FaceInfo[] faceInfos) | |||
| 请求参数 | 说明 | 必须 | 类型 | 返回参数 |
| imageInstance | 图片数据信息,可参考6.7 BDFaceImageInstance图片对象 | 是 | BDFaceImageInstance | float[] 口罩检测结果 |
| faceInfos | 人脸数据 | 是 | FaceInfo[] 具体可参考7.1 FaceInfo实体类 |
6.9.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 1.v -- 3.v
(更新版本要刷新人脸底库,重新导入人脸)
同上所述,版本更新后,SDK对应的识别 活体
人脸检测等模型,需更新GlobaSet文件下的所有模型路径


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 | 图像转换失败 |
9.3图片特征批量提取错误码说明
| 错误码 | 描述 |
|---|---|
| -1 | 特征提取失败 |
| 1 | 图片格式不符合要求 |
| 2 | bitmap为空 |
| 4 | 人脸角度不通过 |
| 5 | 图像模糊 |
| 6 | 人脸遮挡 |
| 7 | 人脸曝光 |
| 8 | 未检测到人脸 |
| 9 | 检测到多个人脸 |
| 10 | 抠图失败 |
| 128 | 特征提取成功 |
评价此篇文章
