使用说明

优质
小牛编辑
130浏览
2023-12-01

一、 概要

1.1、 简介

Android 活体检测SDK 是一个 Android 端活体检测解决方案,将真实人脸与照片、视频等假冒人脸区分开,有效防止假冒攻击。

目前SDK支持最低版本minSdkVersion 18;

目前SDK不提供开放下载,获取SDK包请联系 market@linkface.cn

1.2、技术原理

活体检测技术是由人脸检测、动作分析和人脸图像采集三部分组成。

  • 人脸检测、定位及捕捉:系统从摄像头拍摄画面中利用算法找出人脸位置,进行定位,再根据其特征值估算出人脸的大小,然后进行分割。
  • 人脸图片采集:在交互动作的同时采集高质量人脸图片。

1.3、活体流程

MacDown Screenshot

二、集成步骤

2.1、活体SDK项目结构目录与准备工作

  • 必要的用户权限
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.CAMERA" />
  • build.gradle配置

把提供的liveness.aar拷贝到项目主module的libs目录下。在build.gradle文件中加入如下配置

implementation(name: 'liveness', ext: 'aar')

为防止资源文件被压缩,在项目主module的build.gradle android标签下加入如下配置

aaptOptions {
        noCompress "model"
}

重新build即可

2.2 活体调用流程

1、获取token

在拉起活体之前,需要先从客户服务器获取token,然后用token拉起活体识别页面。具体逻辑在demo中有示例。

2、配置活体参数,开发者可根据业务需求对活体参数做相应的配置
            // 选择难度模式
            LFLivenessComplexity complexity = LFLivenessComplexity.HARD;
            // 是否保存视频
            boolean isOutputVideo = true;
            // 是否打开语音
            boolean isOpenSound = true;
            builder = new LFLivenessBuilder(MainTestActivity.this)
                    .setToken(token)
                    .setComplexity(complexity)
                    .setOutputType(outputType)
                    .setOutputVideo(isOutputVideo)
                    .setOpenSound(isOpenSound);
3.开启人脸识别

开发者根据LFLivenessManager的回调做对应的业务处理。活体SDK回调的result中包含了动作照片、动作视频地址(文件目录)和活体数据

LFLivenessManager.getInstance().startDetect(builder, new LFLivenessListener() {

            @Override
            public void onDetectFinish(LivenessResult result) {
                hideLoading();
                if (result == null) {
                    return;
                }
                switch (result.getErrorCode()) {
                    case LivenessResult.CODE_SUCCESS: //成功
                        result.getVideoResultPath(); // 视频地址
                        requestHack(result.getLivenessDataPath()); // 加密文件地址
                        break;
                    default: 
                        break;
                }
            }
        });
4、安全hack

前端的活体检测只能保证动作的连续性,只能做到初步的防欺诈。 因为客户务必调用hack接口,以保证安全。详细用法参照demo.

5、错误码
错误码描述
1000活体sdk成功
1001取消
1002token失效
1003重复调用
1004活体异未知错误
1006应用不在前台
1007出现多个人脸,检测中断
1008没有识别到人脸
1009活体检测超时
1010出现cpu架构不支持

三、减小包大小

1.动态加载SO(因每个APP所选用的abi架构不同,使用动态加载时,请联系我们的商务。)

如Demo所示,在LivenessActivity的onCreate()方法中,动态加载so库。

DynamicSO.loadSoFile(this, livenessSrc);

livenessSrc为资源包的sd卡地址,客户可在应该启动时或合适的时机把资源包解压到sd卡。 注意:由于Android的特殊性,宿主APP一旦设定了固定的ABI,则需要修改DynamicSO中的加载逻辑。

2.动态加载识别模型

DetectorOptions options = new DetectorOptions();
options.setContext(this);
options.setLivenessSrc(livenessSrc);

同样把资源包的地址传给DetectorOptions,识别模型会自动处理,并正确访问该资源