安卓活体SDK接入指南 - v6.0.0

一、 概要

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中有示例。

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 取消
1002 token失效
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,识别模型会自动处理,并正确访问该资源

results matching ""

    No results matching ""