集成指南

优质
小牛编辑
139浏览
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-release.aar和tensorflowcore-release.aar文件拷贝到项目主module的libs目录下。

在build.gradle文件中加入如下配置

implementation(name: 'liveness-release', ext: 'aar')
implementation(name: 'tensorflowcore-release', ext: 'aar')

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

aaptOptions {
        noCompress "model"
}

重新build即可

2.2 活体调用流程

1、获取token

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

MacDown Screenshot

2、配置活体参数,开发者可根据业务需求对活体参数做相应的配置
            // 定义动作序列
            ArrayList<LFLivenessMotion> motionList = new ArrayList<>();
            motionList.add(LFLivenessMotion.BLINK);
            motionList.add(LFLivenessMotion.OPEN_MOUTH);
            motionList.add(LFLivenessMotion.NOD_HEAD);
            motionList.add(LFLivenessMotion.SHAKE_HEAD);
            // 选择难度模式
            LFLivenessComplexity complexity = LFLivenessComplexity.HARD;
            // 多图和单图模式
            LFLivenessOutputType outputType = LFLivenessOutputType.MULTI_IMAGE;
            // 是否保存视频
            boolean isOutputVideo = true;
            // 是否打开语音
            boolean isOpenSound = true;
            builder = new LFLivenessBuilder(MainTestActivity.this)
                    .setToken(token)
                    .setMotionList(motionList)
                    .setComplexity(complexity)
                    .setOutputType(outputType)
                    .setOutputVideo(isOutputVideo)
                    .setOpenSound(isOpenSound);
3.开启人脸识别

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

LFLivenessManager.getInstance().startDetect(builder, new LFLivenessListener() {
            @Override
            public void onDetectStart() {

            }

            @Override
            public void onDetectFinish(LivenessResult result) {
                if (result == null) {
                    return;
                }
                switch (result.getErrorCode()) {
                    case LivenessResult.CODE_SUCCESS: //成功 
                        requestHack(result.getData());
                        break;
                    case LivenessResult.CODE_CANCEL: // 取消
                        // do someThing
                        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,识别模型会自动处理,并正确访问该资源

四、国际化

使用本SDK到其他的语言环境中,可以使用如下方式让活体页面展示您需要的语言。

SDK默认使用中文(如下图):

MacDown Screenshot

您可以在活体开始之前,调用LivenessString.reset()方法覆盖中文字符串。

MacDown Screenshot