静默活体

1. 静默活体 SDK 说明文档

1.1 简介

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

人脸分为三种:真实人脸,照片人脸,视频人脸。活人/活体就是真实人脸,非活体就是照片、视频等非真实活体的人脸。

1.2 活体流程

目录

1.3 Anti-hack 流程

目录

  1. Mobile SDK: 您需要首先将它集成到自己的应用中, 这将会帮助您获取人脸图片. 阅读 SDK Integration 来快速集成.
  2. Server API: 它会帮助你判断你上传的加密数据是否是真实的人脸,参考 Server API . 在静默活体SDK中我们需要实现这个api开启 anti-hack

1.4 当前版本

活体 SDK 当前最新版本是v2.1.6,2020年6月17日更新。

支持架构armeabi-v7a,arm64-v8a

sdk双架构编译增量2.4M,armeabi-v7a编译增量1.9M,arm64-v8a编译增量2.0M

最低支持系统版本Android4.2

2. 活体 SDK 集成说明

2.1 注意事项

license文件(DFLicense)用以控制程序的包名和有效时间(时间范围可以直接查看文件内容获取),请用户一定要确认程序的包名是否与 license 绑定的包名一致,请确保程序运行设备的系统时间在 license 的有效时间内。

2.2 SDK目录结构

目录

2.3 将SDK集成到开发环境

使用SDK前,首先需要将其集成到您的开发环境中。

1,将DFLivenessSilentDemo下的module模块DFLivenessLibrary以module的方式导入工程,通过File->New>importModule->选中DFLivenessSilentDemo文件夹下的DFLivenessLibrary->连续点击Next完成导入。

2,在新建应用的根目录下面的builde.gradle下添加

 repositories { 
     flatDir {
             dirs project(':DFLivenessLibrary').file('libs')
        } 
 }

在build.gradle中的dependencies{}中添加

compile project(':DFLivenessLibrary')

修改如下

allprojects {
    repositories {
        google()
        jcenter()

        flatDir {
            dirs project(':DFLivenessLibrary').file('libs')
        }

    }
}

 dependencies {
     compile project('DFLivenessLibrary')
 }

3,将DFLivenessSilentDemo工程中DFLivenessSample的assets目录下的所有文件拷贝到您的工程中的assets目录下。

2.4 开始检测

使Application实现DFTransferResultInterface接口

如果您的项目中没有Application,请自行添加

public class MyApplication extends Application implements DFTransferResultInterface {

    private DFProductResult mResult;

    @Override
    public void setResult(DFProductResult result) {
        mResult = result;
    }

    @Override
    public DFProductResult getResult() {
        return mResult;
    }
}

跳转检测界面

Bundle bundle = new Bundle();

 Intent intent = new Intent();
 intent.setClass(this, DFSilentLivenessActivity.class);
 intent.putExtras(bundle);
 //设置返回图片结果
 intent.putExtra(DFSilentLivenessActivity.KEY_DETECT_IMAGE_RESULT, true);
 intent.putExtra(DFSilentLivenessActivity.KEY_HINT_MESSAGE_HAS_FACE, "请保持静止");
 intent.putExtra(DFSilentLivenessActivity.KEY_HINT_MESSAGE_NO_FACE, "请将人脸置入圈内");
 intent.putExtra(DFSilentLivenessActivity.KEY_HINT_MESSAGE_FACE_NOT_VALID, "请远离一点点");
 startActivityForResult(intent, KEY_TO_DETECT_REQUEST_CODE);

在onActivityResult接收数据

在onActivityResult(int requestCode, int resultCode, Intent data)中获取SDK结果

如果 resultCode == Activity.RESULT_OK, 则活体检测成功, 否则活体检测失败

然后进行anti-hack,发送livenessEncryptResult数据到服务端接口服务端接口

if (resultCode == RESULT_OK) {
    DFProductResult mResult = ((DFTransferResultInterface) getActivity().getApplication()).getResult();

    //获取关键帧图像
    DFLivenessSDK.DFLivenessImageResult[] imageResultArr = mResult.getLivenessImageResults();

    if (imageResultArr != null) {
        int size = imageResultArr.length;
        if (size > 0) {
               DFLivenessSDK.DFLivenessImageResult imageResult = imageResultArr[0];
               Bitmap imageBitmap = BitmapFactory.decodeByteArray(imageResult.image, 0, imageResult.image.length);
          }
     }

      //获取活体检测加密数据
      byte[] livenessEncryptResult = mResult.getLivenessEncryptResult()
} else {
    Log.e("onActivityResult", "silent liveness cancel,error code:" + resultCode);
}

当活体检测失败的时候,错误码(resultCode)参考 错误码

开启 anti-hack

如果你想要开启anti-hack, 请设置 KEY_ANTI_HACK(default false)参数.

intent.putExtra(DFSilentLivenessActivity.KEY_ANTI_HACK, true);

如果你想要自己实现anti-hack

发送 加密数据 服务端, 你可以参考下面的代码.

/**
* DFNetworkUtil.java
* package com.liveness.dflivenesslibrary.net
**/

public static DFNetResult doAntiHack(byte[] data) {
    HashMap<String, byte[]> hashMap = new HashMap<>(1);
    hashMap.put("liveness_data_file", data);
    DFNetResult dfNetResult = new DFNetResultLiveness();
    return doInternal(SILENT_ANTI_HACK_URL, null, hashMap, dfNetResult, new NetworkResultProcess() {
        @Override
        public void resultProcess(DFNetResult result, JSONObject netResult) {
            double score = netResult.optDouble("score");
            result.mNetworkResultStatus = score < ANTI_HACK_THRESHOLD;
        }
    });
}

2.5 AndroidX迁移

项目目录下build.gradle中gradle插件版本不低于 3.2.0

classpath 'com.android.tools.build:gradle:3.2.0'

compileSdkVersion和targetSdkVersion版本不低于28

compileSdkVersion 28
defaultConfig {
        targetSdkVersion 28
    }

AS 3.2 及以上版本提供了更加方便快捷的方法一键迁移到 AndroidX。选择菜单上的ReFactor —— Migrate to AndroidX... 即可

示例

results matching ""

    No results matching ""