静默活体SDK接入指南 - v1.0.0
一、 概要
1.1、 简介
Android 活体检测SDK 是一个 Android 端活体检测解决方案,将真实人脸与照片、视频等假冒人脸区分开,有效防止假冒攻击。
目前SDK支持最低版本minSdkVersion 18;
目前SDK不提供开放下载,获取SDK包请联系 market@linkface.cn
1.2、技术原理
活体检测技术是由人脸检测、动作分析和人脸图像采集三部分组成。
- 人脸检测、定位及捕捉:系统从摄像头拍摄画面中利用算法找出人脸位置,进行定位,再根据其特征值估算出人脸的大小,然后进行分割。
- 人脸图片采集:在交互动作的同时采集高质量人脸图片。
1.3、活体流程
二、集成步骤
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 | 取消 |
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,识别模型会自动处理,并正确访问该资源