在您 项目的 build.gradle中增加 maven 仓库配置:
maven {
url 'http://public-n3.advai.net/repository/maven-releases/'
// 若您的 gradle 版本大于 7.0,需要增加如下配置允许通过 http 拉取 aar
// allowInsecureProtocol = true
}在 liveness 模块build.gradle增加库依赖:
dependencies {
...
// 版本更新记录请查看:http://public-n3.advai.net/repository/maven-releases/ai/advance/mobile-sdk/android/liveness-detection/maven-metadata.xml
implementation 'ai.advance.mobile-sdk.android:liveness-detection:${the sdk version}'
}删除 liveness_lib_vx.x.x.aar ,guardian_core_vx.x.aar 两个 aar 文件。
同步 gradle 开始下载依赖。
如果无法拉取 aar,您可以通过下方链接下载 aar,然后手动依赖到项目中:
下方链接以 lib 1.3.9.4 和 core 3.3 为例,修改链接中的版本号可以下载对应的版本。
使用 liveness_lib_v1.3.8.aar ,guardian_core_v3.2.aar 替换旧版本 aar,同时修改 gradle 中的依赖关系即可
在 Activity 中增加闭眼检测提示,示例代码如下:
LivenessActivity.java
private void updateTipUIView(Detector.WarnCode warnCode) {
...
switch (warnCode) {
...
case WARN_EYE_OCCLUSION:
changeTipTextView(R.string.liveness_open_eyes);
break;
...
}
}R.string.liveness_open_eyes 各语种资源如下,请手动添加到strings.xml中:
please open your eyespor favor abre tus ojosकृपया अपनी आँखें खोलोtolong buka matamusila buka mata andaกรุณาเปิดตาของคุณlàm ơn hãy mở mắt ra请睁开眼使用 liveness_lib_v1.2.9.aar,guardian_core_v2.6.aar 替换旧版本 aar,同时修改 gradle 中的依赖关系即可
获取检测过程中的多张图片:
// 示例代码
List<String> imageSequenceList = LivenessResult.getImageSequenceList();
for (String base64Img : imageSequenceList) {
byte[] decode = Base64.decode(base64Img, Base64.NO_WRAP);
Bitmap bmp = BitmapFactory.decodeByteArray(decode, 0, decode.length);
}增加人脸遮挡检测功能,目前主要是检测脸部是否有口罩遮挡。
遮挡检测默认是关闭状态,如需开启遮挡检测,请在初始化SDK之后调用如下方法设置
GuardianLivenessDetectionSDK.isDetectOcclusion(true)在LivenessFragment中的updateTipUIView方法中增加对遮挡情况(WARN_MOUTH_OCCLUSION)的提示,如下:
R.string.liveness_face_occ 提示语国际化文案在新版SDK中,请自行增加到
strings.xml文件中
private void updateTipUIView(Detector.WarnCode warnCode) {
if (mLivenessView.isVertical()) {//phone not vertical
if (warnCode != null) {
switch (warnCode) {
...
case WARN_MOUTH_OCCLUSION:
changeTipTextView(R.string.liveness_face_occ);
break;
...
}
}
} else {
changeTipTextView(R.string.liveness_hold_phone_vertical);
}
}license授权方式(目前只支持印度,其他国家业务会陆续支持)ticket授权方式(目前只支持印尼,其他国家业务会陆续支持)liveness模块增加印地语资源GuardianLivenessDetectionSDK 类中增加如下方法:
// 传入自己的用户唯一标识,用于将该用户和 SDK 采集绑定。当遇到问题时,方便同我们进行日志追踪
public static void bindUser(String userId)liveness模块和您的工程之间完全解耦(需进行全量升级)建议使用全量升级,新版代码更加简洁,几乎无代码侵入。
liveness模块替换旧版本,然后按照集成文档上检测结果新的获取方式进行修改。liveness模块中libs目录下的 aar 文件替换旧的,同时修改 gradle 中的依赖关系即可。原先的
handleResult(ResultEntity entity)方法变更为onDetectionSuccess()中的回调方法onGetFaceDataSuccess(),方法内容如下:
@Override
public void onDetectionSuccess() {
mLivenessView.getLivenessData(new LivenessGetFaceDataCallback() {
@Override
public void onGetFaceDataStart() {
...
}
@Override
public void onGetFaceDataSuccess(ResultEntity entity, String livenessId) {
// TODO 请务必在此处配合您的服务端进行 anti-spoofing 的校验,此处回调中的 entity 对象中 livenessScore 的值需要从您的 server 获取,否则为 0
toResultActivity(entity);
}
@Override
public void onGetFaceDataFailed(ResultEntity entity) {
...
}
});
}全量升级
liveness_lib_v1.1.4.aar 和 guardian_core_v1.2.aar两个文件至 liveness/libs 目录,同时删除对应的旧版本 aar,如果您同时集成了 picture_quality SDK,请同时把该 SDK 依赖的 guardian_core_vxx.aar 替换为 1.2 版本,以免发生版本依赖冲突。liveness/build.gradle 中的 dependencies 标签里增加对 constraint-layout 的依赖:implementation 'com.android.support.constraint:constraint-layout:1.1.3'简单升级:本次更新主要是对 UI 模块做了优化,同时解决了 aar 中少量存在的 bug,您可以选择只替换 aar 文件来修复 aar 中的已知问题。
liveness_lib_v1.1.4.aar 替换 1.1.3 版本文件,同时在 gradle 中将引用更新为 1.1.4 即可。只有活体检测成功后才会有图片
// 获取 bitmap 格式的图片
Bitmap bitmap = LivenessBitmapCache.getLivenessBitmap();
// 获取 base64 格式的图片
String base64Str = LivenessBitmapCache.getLivenessBase64Str();
// 获取图片之后可以调用此方法释放资源
LivenessBitmapCache.clearCache();liveness_lib_v1.1.3.aar替换 1.1.2 版本文件,同时在 gradle 中将引用更新为 1.1.3活体 SDK 初始化方法需要增加国家类别参数
GuardianLivenessDetectionSDK.init(this, "your accessKey","your secretKey",your market);Market
| 枚举 | 解释 |
|---|---|
| Indonesia | 印度尼西亚 |
| Philippines | 菲律宾 |
| Vietnam | 越南 |
| India | 印度 |
不支持的设备判断:
将
LivenessActivity的onResume()和onPause()方法替换,R.string.liveness_device_not_support文字资源在 1.1.3 版本 SDK 中查找
@Override
protected void onResume() {
if (GuardianLivenessDetectionSDK.isDeviceSupportLiveness()) {
mLivenessFragment = LivenessFragment.newInstance();
if (!mLivenessFragment.isAdded()) {
getSupportFragmentManager().beginTransaction().replace(R.id.container, mLivenessFragment).commitAllowingStateLoss();
}
} else {
new AlertDialog.Builder(this).setMessage(R.string.liveness_device_not_support).setPositiveButton(R.string.liveness_perform, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
finish();
}
}).create().show();
}
super.onResume();
}
@Override
protected void onPause() {
if (mLivenessFragment != null && mLivenessFragment.isAdded()) {
mLivenessFragment.release();
getSupportFragmentManager().beginTransaction().remove(mLivenessFragment).commitAllowingStateLoss();
}
super.onPause();
}private void handleResult(ResultEntity entity){
if (entity!=null && entity.success) {
String base64Bitmap = mDetector.getBase64Bitmap();//bitmap base64 type string
byte[] decode = Base64.decode(base64Bitmap, Base64.NO_WRAP);
Bitmap bitmap = BitmapFactory.decodeByteArray(decode, 0, decode.length);//convert base64 string to bitmap
}
}有以下两种方式升级 SDK 至 1.1.2 版本,您可以结合实际需求选择其一。 新版本 aar 中已包含了 armeabi 架构,如您在 1.0 集成过程中拷贝了 libaailiveness_v1.0.0.so 至 libs/armeabi 目录下,请删除此 .so
适用于对 liveness 模块代码 无自定义改动或改动较少 的情况。
适用于改动了 liveness 模块。无需删除旧版本 liveness 模块。
tips: 如您未改动 res 目录,可使用新版 liveness 库工程中的 res 直接拷贝覆盖旧的