有奖捉虫:办公协同&微信生态&物联网文档专题 HOT

开发准备

1. 注册腾讯云账号,进入 人脸核身控制台,即可开通相应服务。
2. 从慧眼 SDK 下载链接中下载 SDK,并集成到本地。

Android 端慧眼 SDK 接入流程

SDK 提供了 huiyansdk_android_1.0.9.3_release.aarhuiyanmodels_1.0.0_release.aar等aar文件(具体版本号以官网下载为准),这些aar文件封装了人脸活体检测的功能。

依赖环境

当前 Android 端慧眼 SDK 适用于 API 19 (Android 4.4) 及以上版本。

接入步骤

1. huiyansdk_android_1.0.9.3_release.aarhuiyanmodels_1.0.0_release.aar 以及 公共库 tencent-ai-sdk-aicamera-1.0.21-release.aartencent-ai-sdk-common-1.1.33-release.aartencent-ai-sdk-youtu-base-1.0.1.32-release.aar、tencent-ai-sdk-network-1.0.2.3.8-release.aar(具体版本号以官网下载为准)添加到您工程的 libs 目录下。
2. 在您工程的 build.gradle 中进行如下配置:
// 设置ndk so架构过滤(以armeabi-v7a为例)
ndk {
abiFilters 'armeabi-v7a'
}

// 过滤重复定义so的问题(以armeabi-v7a为例)
packagingOptions{
pickFirst 'lib/armeabi-v7a/libc++_shared.so'
// 避免so被AS优化
doNotStrip "**/*.so"
}

dependencies {
// 引入慧眼SDK
implementation files("libs/huiyansdk_android_1.0.9.3_release.aar")
// 慧眼使用的模型库
implementation files("libs/huiyanmodels_1.0.1_release.aar")
// 必须引入公共库
implementation files("libs/tencent-ai-sdk-aicamera-1.0.21-release.aar")
implementation files("libs/tencent-ai-sdk-common-1.1.33-release.aar")
implementation files("libs/tencent-ai-sdk-youtu-base-1.0.1.32-release.aar")
implementation files("libs/tencent-ai-sdk-network-1.0.2.3.8-release.aar")
}
3. 同时需要在 AndroidManifest.xml 文件中进行必要的权限声明 SDK 不强制获取可选权限,即使没有获取可选权限,SDK 基本功能也能正常运行。您可以配置可选权限,以便使用 SDK 提供的其他可选功能。建议调用请求前在合适的时机调用 SDK 提供的方法,在用户授权的情况下获取声明中的权限。
<!-- 摄像头权限 -->
<uses-permission android:name="android.permission.CAMERA" />
<uses-feature
android:name="android.hardware.camera"
android:required="true" />
<uses-feature android:name="android.hardware.camera.autofocus" />
<!-- SDK需要的权限 -->
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<!-- SDK可选的权限 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
对于需要兼容 Android 6.0以上的用户,以上权限除了需要在 AndroidManifest.xml 文件中声明权以外,还需使用代码动态申请权限。

SDK 接口使用说明

初始化

在您 App 初始化的时候调用,推荐在 Application中调用,主要是进行一些 SDK 的初始化操作。 确保在用户阅读 App 隐私政策并取得用户授权之后,按 App 功能需要在合适时机调用正式初始化函数 HuiYanAuth.init 初始化 SDK。反之,如果用户不同意《隐私政策》授权,则不能调用正式初始化函数。
@Override
public void onCreate() {
super.onCreate();
instance = this;
HuiYanAuth.init(getApp());
}

设置获取 FaceIdToken 的方法

在您使用慧眼 SDK 进行活体核身检测的时候,为了增加请求的安全性,需要您设置获取 FaceIdToken 的回调方法,慧眼 SDK 在请求认证阶段会主动调用您传入的回调类获取 FaceIdToken。(getCustomerFaceIdToken 方法的调用默认在子线程执行)
HuiYanAuth.setFaceIdTokenCreateFunction(new CreateFaceIdToken() {
@Override
public String getCustomerFaceIdToken() {
return currentToken;
}
});
注意:
也可将获取到的 FaceIdToken 通过 AuthConfig 传入 SDK,推荐使用 AuthConfig 直接传入的方式,示例如下:
AuthConfig authConfig = new AuthConfig();
authConfig.setSdkToken(token);
startHuiYanAuth(authConfig, callback);

启动活体核身

当您需要启动活体核身检测的时候,只需要调用 HuiYanAuth.startHuiYanAuth()函数,同时传入此次核身需要的配置信息以及监听结果的回调即可。
// 启动活体核身的配置信息
AuthConfig authConfig = new AuthConfig();
// 活体检测的界面风格,目前支持PageColorStyle.Light与PageColorStyle.Dark两种默认配置
authConfig.setPageColorStyle(PageColorStyle.Light);
// 此license文件存放在assets下,需要客户提前申请
authConfig.setAuthLicense("YTFaceSDK.license");
// 设置SDK Token
authConfig.setSdkToken(token);

HuiYanAuth.startHuiYanAuth(authConfig, new HuiYanAuthResultListener() {
@Override
public void onSuccess(String faceIdToken) {
String showText = "认证成功 faceIdToken: " + faceIdToken;
Log.e(TAG, showText);
Toast.makeText(App.getApp(), showText, Toast.LENGTH_SHORT).show();
}

@Override
public void onFail(int errorCode, String errorMsg, String faceIdToken) {
String showText = "认证失败 code: " + errorCode + " msg: " + errorMsg + " faceIdToken: " + faceIdToken;
Log.e(TAG, showText);
Toast.makeText(App.getApp(), showText, Toast.LENGTH_SHORT).show();
}
});
注意
当前的“YTFaceSDK.license”文件是需要您主动申请的,暂时您可以 联系客服 进行 License 申请。将申请完成后的 License 文件放到 assets 文件下。
main
├── AndroidManifest.xml
├── assets
│ └── YTFaceSDK.license
├── java
AuthConfig 主要为配置参数信息,可以参考 Android 端 API 概述 文档里有关 AuthConfig 的详细说明。 请您注意,SDK 不强制获取可选参数,即使没有获取可选参数,SDK 基本功能也能正常运行。您可以配置可选参数,以便使用 SDK 提供的其他可选功能。

SDK 资源释放

在您 App 退出使用的时候,可以调用 SDK 资源释放接口。终端用户撤销同意处理其个人信息的授权时,您可通过调用release()接口关闭SDK功能并停止采集用户数据,您可以按如下步骤实现。
@Override
protected void onDestroy() {
super.onDestroy();
// 主动资源释放
HuiYanAuth.release();
}

混淆规则配置

如果您的应用开启了混淆功能,为确保 SDK 的正常使用,请把以下部分添加到您的混淆文件中。
#慧眼SDK的混淆包含
-keep class com.tencent.could.huiyansdk.** {*;}
-keep class com.tencent.could.aicamare.** {*;}
-keep class com.tencent.could.component.** {*;}
-keep class com.tencent.youtu.** {*;}
-keep class com.tencent.turingcam.** {*;}
-keep class com.tencent.turingfd.** {*;}
-keep class com.tenpay.utils.**{*;}
-keep class com.tencent.turingface.** {*;}
-keep class trpc.engine.yishan_websocket.** {*;}

常见问题

1. 集成慧眼后出现 Invoke-customs are only supported starting with Android O (--min-api 26)错误? 需要在 build.gradle 中添加如下配置:
// java版本支持1.8
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
2. 如果集成方使用了 AndResGuard 的混淆工具,可以添加混淆配置:
// for HuiYanSDK
"R.string.ocr_*",
"R.string.rst_*",
"R.string.net_*",
"R.string.msg_*",
"R.string.fl_*",
3. Android X 针对一些低版本的设备报错 android.content.res.Resources$NotFoundException:from xml type xml resource ID #0x7f0800c3 这一类的错误,可以考虑添加矢量图依赖:
// 低版本的矢量图
implementation 'androidx.vectordrawable:vectordrawable:1.1.0'
4. Android Support 如果在低版本设备上(6.0及以下)出现如下报错:
android.content.res.Resources$NotFoundException: File res/drawable/$txy_face_id_logo__0.xml from color state list resource ID #0x7f070001
at android.content.res.Resources.loadColorStateListForCookie(Resources.java:2800)
at android.content.res.Resources.loadColorStateList(Resources.java:2749)
at android.content.res.TypedArray.getColor(TypedArray.java:441)
at android.content.res.XResources$XTypedArray.getColor(XResources.java:1286)
at android.support.v4.content.res.TypedArrayUtils.getNamedColor(TypedArrayUtils.java:124)
at android.support.graphics.drawable.VectorDrawableCompat$VFullPath.updateStateFromTypedArray(VectorDrawableCompat.java:1746)
at android.support.graphics.drawable.VectorDrawableCompat$VFullPath.inflate(VectorDrawableCompat.java:1712)
at android.support.graphics.drawable.VectorDrawableCompat.inflateInternal(VectorDrawableCompat.java:743)
at android.support.graphics.drawable.VectorDrawableCompat.inflate(VectorDrawableCompat.java:631)
at android.support.graphics.drawable.VectorDrawableCompat.createFromXmlInner(VectorDrawableCompat.java:590)
at android.support.v7.widget.AppCompatDrawableManager$VdcInflateDelegate.createFromXmlInner(AppCompatDrawableManager.java:775)
需要更新 support 依赖到最新版本28.0.0:
implementation 'com.android.support:appcompat-v7:28.0.0'

// 兼容低版本矢量图依赖的组件库
implementation 'com.android.support:support-vector-drawable:28.0.0'
implementation 'com.android.support:animated-vector-drawable:28.0.0'