开发准备
1. 注册腾讯云账号,进入 人脸核身控制台,即可开通相应服务。
2. 从慧眼 SDK 下载链接中下载 SDK,并集成到本地。
Android 端慧眼 SDK 接入流程
SDK 提供了 huiyansdk_android_1.0.9.3_release.aar、huiyanmodels_1.0.0_release.aar等aar文件(具体版本号以官网下载为准),这些aar文件封装了人脸活体检测的功能。
依赖环境
当前 Android 端慧眼 SDK 适用于 API 19 (Android 4.4) 及以上版本。
接入步骤
1. 将 huiyansdk_android_1.0.9.3_release.aar、huiyanmodels_1.0.0_release.aar 以及 公共库 tencent-ai-sdk-aicamera-1.0.21-release.aar、tencent-ai-sdk-common-1.1.33-release.aar、tencent-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 {// 引入慧眼SDKimplementation 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-featureandroid: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。反之,如果用户不同意《隐私政策》授权,则不能调用正式初始化函数。
@Overridepublic void onCreate() {super.onCreate();instance = this;HuiYanAuth.init(getApp());}
设置获取 FaceIdToken 的方法
在您使用慧眼 SDK 进行活体核身检测的时候,为了增加请求的安全性,需要您设置获取 FaceIdToken 的回调方法,慧眼 SDK 在请求认证阶段会主动调用您传入的回调类获取 FaceIdToken。(getCustomerFaceIdToken 方法的调用默认在子线程执行)
HuiYanAuth.setFaceIdTokenCreateFunction(new CreateFaceIdToken() {@Overridepublic 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 TokenauthConfig.setSdkToken(token);HuiYanAuth.startHuiYanAuth(authConfig, new HuiYanAuthResultListener() {@Overridepublic void onSuccess(String faceIdToken) {String showText = "认证成功 faceIdToken: " + faceIdToken;Log.e(TAG, showText);Toast.makeText(App.getApp(), showText, Toast.LENGTH_SHORT).show();}@Overridepublic 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();}});
注意
main├── AndroidManifest.xml├── assets│ └── YTFaceSDK.license├── java
AuthConfig 主要为配置参数信息,可以参考 Android 端 API 概述 文档里有关 AuthConfig 的详细说明。 请您注意,SDK 不强制获取可选参数,即使没有获取可选参数,SDK 基本功能也能正常运行。您可以配置可选参数,以便使用 SDK 提供的其他可选功能。
SDK 资源释放
在您 App 退出使用的时候,可以调用 SDK 资源释放接口。终端用户撤销同意处理其个人信息的授权时,您可通过调用release()接口关闭SDK功能并停止采集用户数据,您可以按如下步骤实现。
@Overrideprotected 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.8compileOptions {sourceCompatibility JavaVersion.VERSION_1_8targetCompatibility 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 #0x7f070001at 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'