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

Android-1.0

Android端人脸采集SDK金融1.0使用文档

1.简介

百度Face SDK Android 版是一种面向 Android 移动设备人脸技术开发包,此版SDK包含人脸检测、炫瞳活体识别等功能,以aar包+动态链接库的形式发布。

基于该方案,开发者可以轻松的构建包含人脸检测、采集和活体识别的应用。在您使用SDK之前,我们首先为您介绍以下SDK本身及相关人脸能力,以便您能更方便使用人脸服务。

1.1 功能介绍

此版SDK所包含的能力如下:

  • 离线炫瞳活体检测:通过屏幕上闪烁不同颜色的光线,判断当前用户是否真人操作。通过颜色活体进行面部反光鉴别的同时,百度特加入独有的瞳孔反光识别,提升整体的攻击拒绝率指标,可有效抵御高清图片、3D建模、视频等攻击。
  • 端云互验加密:在采集SDK端加入端云互验加密功能,在采集SDK端对数据进行加密,云端进行解密,从而可以有效识别第三方非法黑产通过绕过APP用脚本攻击接口的行为发生。
  • 大数据风控:与百度安全实验室联合推出大数据风控功能,与云端接口配合对设备端进行环境校验,可有效识别ROM注入、视频劫持、云手机等行为。
  • 离线人脸质量检测:判断视频流中的图片帧中,哪些图片质量较佳,即人脸图像特征清晰(满足姿态角、光照、模糊度、遮挡等校验)。
  • 离线人脸图像采集:通过本地SDK能力,采集人脸图像,同时经过人脸质量检测,确保采集到的人脸图像符合各条件校验(满足姿态角、光照、模糊度、遮挡等校验),为设备前端获取有效可分析人脸的主要功能。
  • 离线授权:SDK的授权判断,授权介质也称为license,在SDK使用中,优先验证本地离线鉴权文件,验证通过可离线使用;在本地鉴权失败情况下需要向授权服务器发起请求,远程拉取授权进行验证。

此版SDK全部功能为离线版本,所有功能均本地化使用,主要用于在客户端(Android)获取人脸,实际业务使用中,可以按照业务需要,配合在线API完成全流程的业务集成。

业务流程

为了方便您的开发,我们已经为您准备了【人脸实名认证】场景的示例工程,您可以根据业务需要,在后台进行直接下载, 示例工程参考下图:

WechatIMG135.png

1.2 兼容性

系统:支持 Android 5.1(API Level 22)及以上系统。需要开发者通过 minSdkVersion来保证支持系统的检测。

机型:手机和平板皆可(暂不支持横屏)

构架:支持 CPU架构平台【armeabi-v7a、arm64-v8a】

网络:支持 WIFI 及移动网络。

1.3 开发包说明

文件/文件夹名 说明
/faceplatform-release SDK lib库、模型文件以及采集逻辑代码打包的aar
/faceplatform-ui SDK的UI库,封装采集和动作活体UI等功能,以及各平台的so库。so包含以下几个平台如果关注包大小,请自行删减。【armeabi-v7a、arm64-v8a】
/app DEMO工程(包含首页面、采集成功失败页面、设置页面等)

2.集成指南

​ 本章将进行 Step-By-Step的讲解,如何快速的集成 人脸Sdk到现有应用中。一个完整的Demo 请参考开发包中的示例程序 FacePlatform。方案架构参考下图:

方案架构

2.1 准备工作

2.1.1 申请license

人脸SDK License:此license用于SDK离线功能使用,在您的申请人脸SDK的后台页面,全局->产品服务->人脸识别->客户端SDK申请

人脸控制台路径如下:

把脸移入框内

点击客户端SDK管理,弹出如下图:创建应用(这里创建应用是为了使用离线SDK,上面创建应用为了使用人脸在线接口,如注册、识别等)

把脸移入框内

在弹出的框中输入授权标识,选择应用类型,应用系统,以及包名、MD5签名,详情请查看输入框右边提示

把脸移入框内

2.1.2 下载SDK

把脸移入框内

下载SDK分为自动配置授权信息(创建license后就可以选择为该应用,下载后SDK自动帮您配置授权,不用下载license拷贝到工程中,初始化参数licenseID,包名也帮您配置好了)和未配置授权信息两种方式:

把脸移入框内

2.2 运行示例工程

2.3.1 运行自动配置授权信息的示例工程

该下载的示例工程,已经帮你改好了license和包名

  • Android Studio导入下载的示例工程
  • 配置打包签名文件,由于SDK运行时会校验签名文件的MD5是否和申请时填入一样。为了便于debug能正常使用SDK,需要配置打包签名文件。
  • 运行示例工程

7.png

2.3.2 运行未配置授权信息的示例工程

(1)Android Studio导入下载的示例工程

(2)下载license拷贝到工程的assets目录

image

(3)修改HomeActivity.java的initialize方法参数

5.png

image

(4)修改app.gradle里面的包名为申请license填入的包名,如上图安卓包名。

image

(5)配置打包签名文件,由于SDK运行时会校验签名文件的MD5是否和申请时填入一样。为了便于debug能正常使用SDK,需要配置打包签名文件。

7.png

image

(6)运行示例工程。如果无法正常体验,请查看logcat日志。是否有 FaceSDK-License LICENSE_INFO_CHECK_ERROR日志。如果有说明授权没有成功,可以查看本文档最后的常见问题进行解决。

2.4 添加SDK到工程

FaceSdk以androidstudio开发方式提供,以下介绍在android studio开发工具导入FaceSdk

(1)将开发包中的faceplatform-release库Copy 到工程根目录。

img

(2)将开发包中的faceplatform-ui库Copy 到工程根目录。

(3)SDK提供的了开源的faceplatform-ui库,把活体检测和人脸图像采集功能等功能进行了封装,适配了主流机型机型。如果需要使用,请添加faceplatform-ui模块到的工程中。faceplatform-ui目录结构如下图

img

(4)在build.gradle使用compile project引人faceplatform-ui库工程。

img

(5)Setting.gradle中include faceplatfrom-ui和facepaltfrom-release

img

(6)从官网下载授权文件license,复制到app/src/main/assets目录下。

(7)申请的license已经和打包签名key进行了绑定(申请时用到了签名的md5,为了便于debug模式也能调用SDK的功能,需要把debug的key改成申请license的key。

  • 把key拷贝到项目根目录下
  • 主appbuild.gradle android 下面添加(修改)signingConfigs相关的配置。如下图。

img

2.5 权限声明

名称 用途
需要动态申请的权限
android.permission.READ_EXTERNAL_STORAGE 读取手机外部存储权限
android.permission.WRITE_EXTERNAL_STORAGE 写入手机外部存储权限
android.permission.CAMERA 拍照权限
不需要动态申请的权限
android.permission.READ_PHONE_STATE 获取用户手机的 IMEI,用来唯一的标识用户
android.hardware.camera.autofocus 允许相机对焦
android.permission.INTERNET 允许访问网络
android.permission.WRITE_SETTINGS 允许修改系统设置
android.permission.WAKE_LOCK 屏幕常亮权限

2.6、混淆设置

如果工程需要做混淆处理的话,则在工程的proguard-rules.pro文件中添加如下配置:

-keep class com.baidu.vis.unified.license.** {*;}

-keep class com.baidu.liantian.** {*;}

-keep class com.baidu.baidusec.** {*;}

-keep class com.baidu.idl.main.facesdk.** {*;}

2.7、模拟器功能

需要在app下的build.gradle的android{}增加下面的话,保证模拟器能安装

splits {
        abi {
            enable true
            reset()
            include 'x86', 'armeabi-v7a','arm64-v8a'
            universalApk true
        }
    }

3.功能使用

3.1 活体检测接口说明(ILivenessStrategy.java)

    // 活体检测策略功能接口方法
    void setLivenessStrategyConfig(List<LivenessTypeEnum> livenessList, 
	List<String> livenessColorList, Rect previewRect, 
	Rect detectRect, ILivenessStrategyCallback callback);
    // 设置是否开启语音播报
    void setLivenessStrategySoundEnable(boolean flag);
    // 用于视频录制时出现手机不兼容采用抽帧的方式
    void setIsFrameExtraction(boolean frameExtraction);  
    // 开始采集(传入图像视频流,用于非录制情况)
    void livenessStrategy(byte[] imageData);
    // 开始采集(传入图片,用于录制情况,开启后会录制用户操作过程中的视频,并存于本地)
    void livenessStrategy(Bitmap bitmap);
    // 设置图片角度
    void setPreviewDegree(int degree);
    // 释放、重置
    void reset();

3.2 采集中关于View更新的回调(ILivenessViewCallback.java)

    // 获取动作活体类型,用于弹出动作的动画
    void setCurrentLiveType(LivenessTypeEnum liveType);
    // 重置当前完成动作活体个数(当前版本已不使用)
    void viewReset();
    // 设置动画停止的时机
    void animStop();
    // 用于传递faceInfo,调试画框使用
    void setFaceInfo(FaceExtInfo faceInfo);
    // 开始切换炫彩颜色(做炫彩效果时使用)
    void setBackgroundColor(int currentColor, int preColor);
    // 开始录制视频(lostFaceId为是否丢失人脸,如果丢失,则重新录制)
    void startRecordVideo(boolean lostFaceId);

3.3 人脸采集(包含动作活体(可关闭)、炫彩活体)

(1)初始化SDK 参数分别表示:当前上下文、鉴权key、鉴权名称、回调参数 调用FaceSDKManager.getIntance().initialize(Context context, String licenseID, String licenseFileName, IInitCallback callback); Demo中此段代码在HomeActivity中。

(2) 初始化参数设置

        FaceConfig config = FaceSDKManager.getInstance().getFaceConfig();
        // SDK初始化已经设置完默认参数(推荐参数),也可以根据实际需求进行数值调整
        // 质量等级(0:正常、1:宽松、2:严格、3:自定义)
        // 获取保存的质量等级
        SharedPreferencesUtil util = new SharedPreferencesUtil(mContext);
        int qualityLevel = (int) util.getSharedPreference(Const.KEY_QUALITY_LEVEL_SAVE, -1);
        if (qualityLevel == -1) {
            qualityLevel = ExampleApplication.qualityLevel;
        }
        // 根据质量等级获取相应的质量值(注:第二个参数要与质量等级的set方法参数一致)
        QualityConfigManager manager = QualityConfigManager.getInstance();
        manager.readQualityFile(mContext.getApplicationContext(), qualityLevel);
        QualityConfig qualityConfig = manager.getConfig();
        if (qualityConfig == null) {
            return false;
        }
        // 设置模糊度阈值
        config.setBlurnessValue(qualityConfig.getBlur());
        // 设置最小光照阈值(范围0-255)
        config.setBrightnessValue(qualityConfig.getMinIllum());
        // 设置最大光照阈值(范围0-255)
        config.setBrightnessMaxValue(qualityConfig.getMaxIllum());
        // 设置左眼遮挡阈值
        config.setOcclusionLeftEyeValue(qualityConfig.getLeftEyeOcclusion());
        // 设置右眼遮挡阈值
        config.setOcclusionRightEyeValue(qualityConfig.getRightEyeOcclusion());
        // 设置鼻子遮挡阈值
        config.setOcclusionNoseValue(qualityConfig.getNoseOcclusion());
        // 设置嘴巴遮挡阈值
        config.setOcclusionMouthValue(qualityConfig.getMouseOcclusion());
        // 设置左脸颊遮挡阈值
        config.setOcclusionLeftContourValue(qualityConfig.getLeftContourOcclusion());
        // 设置右脸颊遮挡阈值
        config.setOcclusionRightContourValue(qualityConfig.getRightContourOcclusion());
        // 设置下巴遮挡阈值
        config.setOcclusionChinValue(qualityConfig.getChinOcclusion());
        // 设置人脸姿态角阈值
        config.setHeadPitchValue(qualityConfig.getPitch());
        config.setHeadYawValue(qualityConfig.getYaw());
        config.setHeadRollValue(qualityConfig.getRoll());
        // 设置可检测的最小人脸阈值
        config.setMinFaceSize(FaceEnvironment.VALUE_MIN_FACE_SIZE);
        // 设置可检测到人脸的阈值
        config.setNotFaceValue(FaceEnvironment.VALUE_NOT_FACE_THRESHOLD);
        // 设置闭眼阈值
        config.setEyeClosedValue(FaceEnvironment.VALUE_CLOSE_EYES);
        // 设置图片缓存数量
        config.setCacheImageNum(FaceEnvironment.VALUE_CACHE_IMAGE_NUM);
        // 设置活体动作,通过设置list,LivenessTypeEunm.Eye, LivenessTypeEunm.Mouth,
        // LivenessTypeEunm.HeadUp, LivenessTypeEunm.HeadDown, LivenessTypeEunm.HeadLeft,
        // LivenessTypeEunm.HeadRight
        config.setLivenessTypeList(ExampleApplication.livenessList);
        // 设置动作活体是否随机
        // config.setLivenessRandom(ExampleApplication.isLivenessRandom);
        // 设置开启提示音
        config.setSound(ExampleApplication.isOpenSound);
        // 原图缩放系数
        config.setScale(FaceEnvironment.VALUE_SCALE);
        // 抠图宽高的设定,为了保证好的抠图效果,建议高宽比是4:3
        config.setCropHeight(FaceEnvironment.VALUE_CROP_HEIGHT);
        config.setCropWidth(FaceEnvironment.VALUE_CROP_WIDTH);
        // 抠图人脸框与背景比例
        config.setEnlargeRatio(FaceEnvironment.VALUE_CROP_ENLARGERATIO);
        // 检测超时设置
        config.setTimeDetectModule(FaceEnvironment.TIME_DETECT_MODULE);
        // 检测框远近比率
        config.setFaceFarRatio(FaceEnvironment.VALUE_FAR_RATIO);
        config.setFaceClosedRatio(FaceEnvironment.VALUE_CLOSED_RATIO);
        // 是否开启动作活体
        config.setOpenActionLive(ExampleApplication.isActionLive);
        // 设置动作活体颜色类型列表
        config.setLivenessColorTypeList(ExampleApplication.livenessColorList);
        // 设置活体阈值
        config.setLivenessValue(FaceEnvironment.VALUE_LIVENESS_SCORE);
        // 设置炫彩活体颜色分数阈值
        config.setLivenessColorValue(FaceEnvironment.VALUE_LIVENESS_COLOR_SCORE);
        // 设置视频录制时间
        config.setRecordVideoTime(FaceEnvironment.TIME_RECORD_VIDEO);
        // 视频录制中出现分辨率改变的手机或其它不兼容的手机统计
        config.setPhoneList(ExampleApplication.phoneList);
        FaceSDKManager.getInstance().setFaceConfig(config);

关于抠图内部实现方案如下图所示: 61d944285d07ee1c1dbbfb1da.png

(3) startActivity(new Intent(this, FaceLivenessExpActivity.class)),开启预览。

(4)调用FaceSDKManager.getInstance().getLivenessStrategyModule()获得ILivenessStrategy对象。(该方法每次调用都会返回一个新对象).

(6)调用ILivenessStrategy.setPreviewDegree();设置预览图片的旋转角度。调用setDetectStrategySoundEnable设置是否开启语音。调用setDetectStrategyConfig设置,预览图的大小,人脸检测框的坐标和回调。

(7)多次调用livenessStrategy进行人脸图片采集,人脸跟踪、质量检测、动作活体检测、炫彩检测等。

(8)实现ILivenessStrategyCallback的onLivenessCompletion并处理结果。其中base64ImageCropMap为存放人脸抠图图片集,base64ImageSrcMap为存放人脸原图图片集并通过调用getBestImage()方法,通过从优到差的质量排序,获取最优的bitmap,代码如下图所示:

b567bc89ff07f4bfbfc342bee.png

2.png

3.png 另外,livenessScore表示炫彩活体的当前分数,用户可以看到自己的炫彩活体分数。

(9)Demo中的最优抠图或者最优原图,可以调用SecRequest类下的sendMessage(Context context, String secBase64, int secType);将加密后的base64发送到服务端,如需风控,需要把SecRequest.java下的risk_identify参数置为true。

3.4 带视频录制或图片抽帧的人脸采集功能

(1)如果想要测试视频录制功能,则需要在ExampleApplication.java中的ublic static boolean isOpenVideoRecord = false修改为true。 (2)在录制视频过程中,有可能会出现部分手机不兼容的情况,例如打不开摄像头,那么需要在HomeActivity.java中加入白名单处理,如下:

baimingdan.png 加入白名单后,则会采用图片抽帧的方式留存。

视频录制的路径为:/data/data/包名/file/vrecord/XXX.mp4 抽帧图片的路径为:/data/data/包名/file/image/XXX.jpg

(2)初始化SDK 参数分别表示:当前上下文、鉴权key、鉴权名称、回调参数 调用FaceSDKManager.getIntance().initialize(Context context, String licenseID, String licenseFileName, IInitCallback callback); Demo中此段代码在HomeActivity中。

(3)初始化参数设置(参照3.2(2))

(4) startActivity(new Intent(this, FaceLivenessVideoExpActivity.class)),开启预览,开启录制。(如果采用选帧策略,则是跳转到FaceLivenessExpActivity中)

(4)调用FaceSDKManager.getInstance().getLivenessStrategyModule()获得ILivenessStrategy对象。(该方法每次调用都会返回一个新对象).

(5)调用ILivenessStrategy.setPreviewDegree();设置预览图片的旋转角度。调用setDetectStrategySoundEnable设置是否开启语音。调用setDetectStrategyConfig设置,预览图的大小,人脸检测框的坐标和回调。

(6)如果采用图片选帧留存方式,则需要调用void setIsFrameExtraction(boolean frameExtraction);方法,传入true

(7)多次调用livenessStrategy进行人脸图片采集,人脸跟踪、质量检测、动作活体检测、炫彩检测等。

(8)实现ILivenessStrategyCallback的onLivenessCompletion并处理结果。其中base64ImageCropMap为存放人脸抠图图片集,base64ImageSrcMap为存放人脸原图图片集并通过调用getBestImage()方法,通过从优到差的质量排序,获取最优的bitmap,代码如下图所示:

huidiao.png

2.png

3.png 另外,livenessScore表示炫彩活体的当前分数,用户可以看到自己的炫彩活体分数。

(9)Demo中的最优抠图或者最优原图,可以调用SecRequest类下的sendMessage(Context context, String secBase64, int secType);将加密后的base64发送到服务端,如需风控,需要把SecRequest.java下的risk_identify参数置为true。

3.5 质量校验设置

com.baidu.idl.face.platform.FaceConfig类用于人脸检测参数设置。

参数 名称 默认值 取值范围
minFaceSize 最小人脸阈值 200
notFaceValue 非人脸阈值 0.6f 0~1.0f
brightnessValue 图片最小光照阈值 宽松:30、正常:40、严格:60 0-255f
brightnessValue 图片最大光照阈值 宽松:240、正常:220、严格:200 0-255f
blurnessValue 图像模糊阈值 宽松:0.8f、正常:0.6f、严格:0.4f 0~1.0f
occlusionLeftEyeValue 左眼遮挡阈值 宽松:0.95f、正常:0.8f、严格:0.4f 0~1.0f
occlusionRightEyeValue 右眼遮挡阈值 宽松:0.95f、正常:0.8f、严格:0.4f 0~1.0f
occlusionNoseValue 鼻子遮挡阈值 宽松:0.95f、正常:0.8f、严格:0.4f 0~1.0f
occlusionMouthValue 嘴巴遮挡阈值 宽松:0.95f、正常:0.8f、严格:0.4f 0~1.0f
occlusionLeftContourValue 左脸颊遮挡阈值 宽松:0.95f、正常:0.8f、严格:0.4f 0~1.0f
occlusionRightContourValue 右脸颊遮挡阈值 宽松:0.95f、正常:0.8f、严格:0.4f 0~1.0f
occlusionChinValue 下巴遮挡阈值 宽松:0.95f、正常:0.8f、严格:0.4f 0~1.0f
headPitchValue 低头抬头角度 宽松:30、正常:20、严格:15 0~45
headYawValue 左右摇头角度 宽松:18、正常:18、严格:15 0~45
headRollValue 偏头角度 宽松:30、正常:20、严格:15 0~45
eyeClosedValue 闭眼阈值 0.7f 0~1.0f
cacheImageNum 图片缓存数量 3 建议3~6
livenessValue 活体分数阈值 0.9f 0~1.0f

3.6 界面定制说明

3.6.1 修改faceplatform_ui界面

(1)如果SDK自带的UI和您的APP不统一,您可以自行修改FaceDetectRoundView。

img

(2)修改提示语音音频文件,有两种方式。

a、直接替换FaceUI工程raw下的mp3文件和string.xml。

b、FaceEnvironment 提供了setSoundId(FaceStatusNewEnum status, int soundId); 设置提示音资源。 FaceStatusNewEnum为不同的状态。soundId为资源文件所对应的resource id。

3.7 采集中的预览区域和检测区域说明

如下图所示(图中背景设置为透明了,可以看出这两个区域):

9.png

其中: surfaceView宽高为屏幕的宽高; previewRect的宽高为手机摄像头的宽高; detectRect的宽高是以previewRect为基准计算出来的。 计算方式参照FaceDetectRoundView.java的Rect getPreviewDetectRect(int w, int pw, int ph)方法

4.接口设计说明

4.1 人脸功能管理器

4.1.1创建实例

  • 方法

​ FaceSDKManager getInstance()

  • 参数

​ 无

  • 返回

​ 人脸功能管理器

  • 说明

    创建人脸功能管理器

4.1.2 人脸功能管理器初始化

  • 方法
       public void initialize(final Context context, String licenseID, String licenseFileName, IInitCallback callback)
  • 参数

​ context 上下文环境,licenseID 传入申请License时获取的应用名称+_face_android后缀,licenseFileName 鉴权文件名称, callback 鉴权成功与否回调

  • 返回

​ 无

  • 说明

​ 初始化人脸检测功能。进行人脸检测功能License鉴权验证。

4.1.3 设置人脸功能控制参数

  • 方法
       void setFaceConfig(FaceConfig config)
  • 参数

​ config 人脸功能控制参数对象

  • 返回

​ 无

  • 说明

​ 设置人脸功能控制参数对象。

​ FaceConfig对象参数:

​ 最小光照阈值 ​
​ 最大光照阈值

​ 模糊阈值

​ 遮挡阈值

​ 头部姿态角度阈值

​ 最小人脸检测阈值

​ 非人脸阈值

​ 人脸抠图宽高设置

​ 进行活体检测的动作类型列表

​ 超时时间设置

        检测框远近比率设置等

4.1.4 取得人脸图像采集功能接口

  • 方法
    IDetectStrategy getDetectStrategyModule()
  • 参数

​ 无

  • 返回

​ 人脸图像采集功能接口

  • 说明

​ 取得人脸图像采集功能接口。人脸图像采集接口完成,解析图片人脸信息,返回检测结果。

4.1.5 取得活体检测功能接口

  • 方法
   ILivenessStrategy getLivenessStrategyModule()
  • 参数

​ 无

  • 返回

​ 活体检测功能接口

  • 说明

​ 取得活体检测功能接口。活体检测功能接口完成,解析图片人脸信息,返回活体检测结果。

4.1.6 内存释放接口

  • 方法
   void release()
  • 参数

​ 无

  • 返回

​ 无

  • 说明

​ 主要针对模型的释放,以减少内存

4.2 人脸图像采集器

人脸图像采集器IDetectStrategy,检测图片中人脸信息,返回人脸检测状态,完成人脸图像采集。

4.2.1 设置人脸图像采集功能参数

  • 方法
  void setDetectStrategyConfig(Rect previewRect, Rect detectRect,IDetectStrategyCallback callback)
  • 参数

​ previewRect 人脸图片大小,类型:Rect

​ detectRect 人脸检测区域大小,类型:Rect

​ callback 人脸图像采集功能状态监听器

  • 返回

​ 无

  • 说明

​ 设置人脸功能控制参数对象。

4.2.2 人脸图像采集

  • 方法
  void detectStrategy(byte[] imageData)
  • 参数

​ imageData 图片信息

  • 返回

​ 无

  • 说明

​ 检测图片中的人脸信息,完成人脸图像采集,返回检测状态和结果。

4.3 活体检测器

活体检测器LivenessStrategy,检测图片人脸信息,活体检测结果状态。

4.3.1 设置人脸功能控制参数

  • 方法
voidsetLivenessStrategyConfig(

             List<LivenessTypeEnum> livenessList, 

             Rect previewRect, 

             Rect detectRect, 

             ILivenessStrategyCallback callback);
  • 参数

​ livenessList 活体动作列表

​ previewRect 人脸图片大小,类型:Rect

​ detectRect 人脸检测区域大小,类型:Rect

​ callback 人脸图像采集功能状态监听器

  • 返回

​ 无

  • 说明

​ 设置活体检测功能参数对象。

4.3.2 活体检测

  • 方法

​ void livenessStrategy(byte[] imageData);

  • 参数

​ imageData 图片信息

  • 返回

​ 无

  • 说明

​ 检测图片中的人脸信息,完成人脸图像采集和人脸活体检测,返回检测状态和结果。

4.4 人脸图像采集界面

人脸图像采集器界面FaceDetectActivity,包括UI界面,系统相机控制,使用人脸图像采集器IDetectStrategy处理相机采集到的图像。

4.5 活体检测界面

活体检测界面FaceLivenessActivity,包括UI界面,系统相机控制,使用活体检测器ILivenessStrategy处理相机采集到的图像,完成活体检测功能。

4.6 图片加密请求类

图片加密请求类SecRequest,里面的sendMessage方法是为了测试图片加密之后secBase64是否可以通过云端解密的一个示例代码。

4.7 ZID参数获取

调用金融级实名认证接口配合金融级SDK使用时,需传入zid参数打开大数据风控功能。

获取方法:

  FaceSDKManager.getInstance().getZid(Context)

5.常见问题

(1)license文件有什么用,该放在什么地方?

license文件需要申请,目的是作为sdk校验开发者的使用合法性,license文件放置位置不对或未放置license文件会导致没法使用sdk,一般应先申请license文件,并把申请得到的license文件,放置在assets目录下面。

(2)鉴权初始化的错误码对应的信息

ErrorCode 常量值 说明
SUCCESS 0 成功
LICENSE_NOT_INIT_ERROR 1 license未初始化
LICENSE_DECRYPT_ERROR 2 license数据解密失败
LICENSE_INFO_FORMAT_ERROR 3 license数据格式错误
LICENSE_KEY_CHECK_ERROR 4 license-key(api-key)校验错误
LICENSE_ALGORITHM_CHECK_ERROR 5 算法ID校验错误
LICENSE_MD5_CHECK_ERROR 6 MD5校验错误
LICENSE_DEVICE_ID_CHECK_ERROR 7 设备ID校验错误
LICENSE_PACKAGE_NAME_CHECK_ERROR 8 包名(应用名)校验错误
LICENSE_EXPIRED_TIME_CHECK_ERROR 9 过期时间不正确
LICENSE_FUNCTION_CHECK_ERROR 10 功能未授权
LICENSE_TIME_EXPIRED 11 授权已过期
LICENSE_LOCAL_FILE_ERROR 12 本地文件读取失败
LICENSE_REMOTE_DATA_ERROR 13 远程数据拉取失败
LICENSE_LOCAL_TIME_ERROR 14 本地时间校验错误
OTHER_ERROR 0xff 其他错误

(3)FaceSDK-LicenseLICENSE_INFO_CHECK_ERROR =license id

licenseID为您申请时填appname+“_face_android”。如下图demo-turnstile-face-android为license里面的licenseID, demo-turnstile-face-android1为app运行时Config.licenseID,两者必须一致

img

(4)FaceSDK-LicenseLICENSE_INFO_CHECK_ERROR =signature md5

md5不一致错误,签名的为license里面的md5,后面的为app运行时获取的签名文件的md5,这两个md5必须一致且区分大小写。img

(5)FaceSDK-License LICENSE_INFO_CHECK_ERROR =package name

PackageName不一致错误。License里面的packagename为申请license时填的,需要保证和app里面的packagename一致。

(6)活体检测常见有那些动作?是否可配置?

常见有6个动作,眨眼,张大嘴,向上抬头,向下低头,向左摇头,向右摇头等。 sdk提供FaceConfig参数设置类,如活体检测角度、光线,检测动作,检测动作数量等设置。

(7)使用sdk一般会用到活体检测拍照等功能,有什么需要注意?

Android 6.0+,需要注意相机拍摄权限问题。如没申请权限,可能导致没法调起相机。

(8)在有些机型上出现特别卡或出现无响应?

SDK在armeabi上性能非常差,建议删掉其他so只留下armeabi-v7a,包括使用的其他第三方so。因为如果其他so有armeabi,根据android系统查找so的逻辑,在armeabi的机型上只会去该目录下查找so,而人脸SDK没有,就会出现找不到so。

(9)license 文件失效了,不能用了怎么办?

license文件申请时候有期限,如过期会导致校验失效,需要在后台申请延期。

上一篇
增强级SDK
下一篇
IOS-1.0