Android 快速接入騰訊雲人臉核身(識別)

Android 通過 SDK 快速接入騰訊雲人臉核身

官方文檔 :https://cloud.tencent.com/document/product/1007/35866

前期操作就是一系列的申請啊,拿到對應的AppId 和 keyLicence,secret ,沒什麼要求,就是等待審覈,本文就講代碼接入

步驟。

一  、申請簽名和faceId(文檔上說是後臺申請,但是你也可以都在Android端搞定)

申請簽名需要ticket,申請ticket 需要Access Token.

  •  申請 Access Token:

     請求 URL:https://idasc.webank.com/api/oauth2/access_token 請求方法GET

     請求參數:

參數 說明 類型 長度(字節) 是否必填
app_id 請添加小助手微信 faceid001,進行線下對接獲取 String 騰訊雲線下對接決定
secret 請添加小助手微信 faceid001,進行線下對接獲取 String 騰訊雲線下對接決定
grant_type 授權類型,默認值爲:client_credential(必須小寫) String 20
version 版本號,默認值爲:1.0.0 String 20

成功響應:

{
"code":"0","msg":"請求成功",
"transactionTime":"20151022043831",
"access_token":"accessToken_string",
"expire_time":"20151022043831",
"expire_in":"7200"
}
  • 申請Ticket

       請求 URL:https://idasc.webank.com/api/oauth2/api_ticket 請求方法:GET

       請求參數:

參數 說明 類型 長度(字節) 是否必填
app_id 請添加小助手微信 faceid001,進行線下對接獲取 String 騰訊雲線下對接決定
access_token 請根據 Access Token 獲取 指引進行獲取 String 騰訊雲線下對接決定
type ticket 類型,默認值:NONCE(必須大寫) String 20
version 版本號 String 20
user_id 當前使用用戶的唯一標識,需合作伙伴自行定義
注意:合作伙伴必須保證 user_id 的全局唯一性
String 30

       響應結果:

{
    "code": "0",
    "msg": "請求成功",
    "transactionTime": "20151022044027",
    "tickets": [{
        "value": "ticket_string",
        "expire_in": "120",
        "expire_time": "20151022044027"
    }]
}
  •  拿到ticket後,就可以生成sign了
  • 生成簽名的算法:

(這裏用到了Hasing,需要用到guava-28.2-jre.jar鏈接:https://download.csdn.net/download/qq_39836064/12194244

public static String sign(List<String> values, String ticket) {
    if (values == null) {
        throw new NullPointerException("values is null");
    }
    values.removeAll(Collections.singleton(null));// remove null
    values.add(ticket);
    java.util.Collections.sort(values);

    StringBuilder sb = new StringBuilder();
    for (String s : values) {
        sb.append(s);
    }
    return Hashing.sha1().hashString(sb, Charsets.UTF_8).toString().toUpperCase();
}

 傳入參數爲:

參數 說明 來源
wbappid 請添加小助手微信 faceid001,進行線下對接獲取 騰訊雲線下對接分配
userId 用戶唯一標識 合作方自行分配(與 SDK 裏定義的 userId 保持一致)
version 參數值爲:1.0.0 -
ticket 合作伙伴服務端緩存的 ticket,注意是 NONCE 類型 獲取方式請參見 獲取 NONCE ticket(所用的 userId 參數值需要與 SDK 裏面定義 userId 值保持一致)
nonceStr 必須是32位隨機數 合作方自行生成(與 SDK 裏定義的隨機數保持一致)
        List<String> values = new ArrayList<String>();
        values.add(wbappid);
        values.add(userId);
        values.add(version);
        values.add(nonceStr);
        String sign = sign(values, ticket);

這時候就拿到sign了,可以去申請faceId了。

  • 生成faceId

     請求 URL:https://idasc.webank.com/api/server/getfaceid   請求方法:POST

     報文格式:Content-Type: application/json

參數 說明 類型 長度(字節) 是否必填
webankAppId 請添加小助手微信 faceid001,進行線下對接獲取 String 騰訊雲線下對接決定
orderNo 訂單號,由合作方上送,每次唯一,不能超過 32 位 String 不能超過 32 位
name 姓名 String -
idNo 證件號碼 String -
userId 用戶 ID ,用戶的唯一標識(不能帶有特殊字符) String -
sourcePhotoStr 比對源照片,注意:原始圖片不能超過 500k,且必須爲 JPG 或 PNG 格式。 參數有值:使用合作伙伴提供的比對源照片進行比對,必須注照片是正臉可信照片,照片質量由合作方保證。參數爲空 :根據身份證號 + 姓名使用權威數據源比對 BASE64String 1048576 否,非必填
sourcePhotoType 比對源照片類型,參數值爲1 時是:水紋正臉照。參數值爲 2 時是:高清正臉照 String 1
version 默認參數值爲:1.0.0 String 20
sign 簽名:使用上面生成的簽名 String 40

響應:

{
"code": 0,
"msg": "成功",
"result": {
     "bizSeqNo":"業務流水號",
     "orderNo":"合作方訂單號",
     "faceId":"cc1184c3995c71a731357f9812aab988"
    }
}

二 、Android端接入

  •  添加騰訊雲提供的arr 文件
//1. 雲刷臉SDK
 compile(name: 'WbCloudFaceLiveSdk-版本號-githash值', ext: 'aar')
 //2. 雲normal SDK
 compile(name: 'WbCloudNormal-版本號-githash值', ext: 'aar')

 混淆規則

###############雲刷臉混淆規則 faceverify-BEGIN##################
#不混淆內部類
-keepattributes InnerClasses

-keep public class com.webank.facelight.tools.WbCloudFaceVerifySdk{
    public <methods>;
    public static final *;
}
-keep public class com.webank. facelight.tools.WbCloudFaceVerifySdk$*{
    *;
}
-keep public class com.webank.record.**{
    public <methods>;
    public static final *;
}
-keep public class com.webank. facelight.ui.FaceVerifyStatus{

}
-keep public class com.webank. facelight.ui.FaceVerifyStatus$Mode{
    *;
}
-keep public class com.webank. facelight.tools.IdentifyCardValidate{
    public <methods>;
}
-keep public class com.tencent.youtulivecheck.**{
    *;
}
-keep public class com.webank. facelight.contants.**{
    *;
}
-keep public class com.webank. facelight.listerners.**{
    *;
}
-keep public class com.webank. facelight.Request.*$*{
    *;
}
-keep public class com.webank. facelight.Request.*{
    *;
}
-keep public class com.webank. facelight.config.FaceVerifyConfig {
    public <methods>;
}

-keep class com.tencent.youtuface.**{
    *;
}
-keep class com.tencent.youtulivecheck.**{
    *;
}
-keep class com.tencent.youtufacetrack.**{
    *;
}
-keep class com.tencent.youtufacelive.model.**{
    *;
}
-keep class com.tencent.youtufacelive.tools.FileUtils{
public <methods>;
}
-keep class com.tencent.youtufacelive.tools.YTUtils{
    public <methods>;
}
-keep class com.tencent.youtufacelive.tools.YTFaceLiveLogger{
    public <methods>;
}
-keep class com.tencent.youtufacelive.tools.YTFaceLiveLogger$IFaceLiveLogger{
     *;
}
-keep class com.tencent.youtufacelive.IYTMaskStateListener{
    *;
}
-keep class com.tencent.youtufacelive.YTPreviewHandlerThread{
    public static *;
    public <methods>;
}
-keep class com.tencent.youtufacelive.YTPreviewHandlerThread$IUploadListener{
     *;
}
-keep class com.tencent.youtufacelive.YTPreviewHandlerThread$ISetCameraParameterListener{
     *;
}
-keep class com.tencent.youtufacelive.YTPreviewMask{
    public <methods>;
}
-keep class com.tencent.youtufacelive.YTPreviewMask$TickCallback{
    *;
}
-keeppackagenames com.webank.mbank.permission_request
# 保留自定義控件(繼承自View)不能被混淆
-keep public class * extends android.view.View {
    public <init>(android.content.Context);
    public <init>(android.content.Context, android.util.AttributeSet);
    public <init>(android.content.Context, android.util.AttributeSet, int);
    public void set*(***);
    *** get* ();
}
################雲刷臉混淆規則 faceverify-END########################

#############webank normal混淆規則-BEGIN###################
#不混淆內部類
-keepattributes InnerClasses
-keepattributes *Annotation*
-keepattributes Signature

-keep, allowobfuscation @interface com.webank.normal.xview.Inflater
-keep, allowobfuscation @interface com.webank.normal.xview.Find
-keep, allowobfuscation @interface com.webank.normal.xview.BindClick

-keep @com.webank.normal.xview.Inflater class *
-keepclassmembers class * {
    @com.webank.normal.Find *;
    @com.webank.normal.BindClick *;
}

-keep public class com.webank.normal.net.*$*{
    *;
}
-keep public class com.webank.normal.net.*{
    *;
}
-keep public class com.webank.normal.thread.*$*{
   *;
}
-keep public class com.webank.normal.thread. *{
   *;
}
-keep public class com.webank.normal.tools.WLogger{
    *;
}
-keep public class com.webank.normal.tools.*{
*;
}

#wehttp混淆規則
-dontwarn com.webank.mbank.okio.**

-keep class com.webank.mbank.wehttp.**{
    public <methods>;
}
-keep interface com.webank.mbank.wehttp.**{
    public <methods>;
}
-keep public class com.webank.mbank.wehttp.WeLog$Level{
    *;
}
-keep class com.webank.mbank.wejson.WeJson{
    public <methods>;
}
-keep public class com.webank.mbank.wehttp.WeReq$ErrType{ 
     *;
}
#webank normal包含的第三方庫bugly
-keep class com.tencent.bugly.webank.**{
    *;
}
###########webank normal混淆規則-END#######################
########雲產品依賴的第三方庫 混淆規則-BEGIN############

## support:appcompat-v7
-keep public class android.support.v7.widget.** { *; }
-keep public class android.support.v7.internal.widget.** { *; }
-keep public class android.support.v7.internal.view.menu.** { *; }

-keep public class * extends android.support.v4.view.ActionProvider {
    public <init>(android.content.Context);
}

#########雲產品依賴的第三方庫 混淆規則-END#############
  •  調用SDK所需參數
參數 說明 類型 長度(字節) 是否必填
faceId 刷臉 ID 號,由合作方向人臉識別後臺拉取獲得 String -
agreementNo 訂單號,合作方訂單的唯一標識 String 32
openApiAppId 騰訊雲線下對接分配的 AppID String 騰訊雲線下對接決定
openApiAppVersion 接口版本號,默認填:1.0.0 String 20
openApiNonce 與服務端生成簽名的隨機數保持一致 String 32
openApiUserId User Id,每個用戶唯一的標識,和服務端保持一致 String 30
openApiSign 第一步中 通過 ticket 計算出來的簽名信息 String 40
verifyMode 人臉核身類型
光線活體:FaceVerifyStatus.Mode.REFLECTION
動作活體是:FaceVerifyStatus.Mode.ACT
數字活體是:FaceVerifyStatus.Mode.NUM
FaceVerifyStatus.Mode -
keyLicence 騰訊雲線下對接分配的 Licence String 騰訊雲線下對接決定
  • 用自己的數據調用騰訊雲SDK提供的接口
# 在MainActivity中單擊某個按鈕的代碼邏輯:
//先填好數據 
Bundle data = new Bundle();
WbCloudFaceVerifySdk.InputData inputData = new WbCloudFaceVerifySdk.InputData(
                faceId,
                agreementNo,
                openApiAppId,
                openApiAppVersion,
                openApiNonce,
                userId,
                userSign,
                verifyMode,
                keyLicence);
  data.putSerializable(WbCloudFaceContant.INPUT_DATA, inputData);

  //個性化參數設置,可以不設置,不設置則爲默認選項。
  //是否顯示成功結果頁,默認顯示,此處設置爲不顯示
  data.putBoolean(WbCloudFaceContant.SHOW_SUCCESS_PAGE, false);
  //是否展示刷臉失敗頁面,默認展示,此處設置爲不顯示
  data.putBoolean(WbCloudFaceContant.SHOW_FAIL_PAGE, false);
//sdk樣式設置,默認爲黑色
//此處設置爲白色
  data.putString(WbCloudFaceContant.COLOR_MODE, WbCloudFaceContant.WHITE);

//設置選擇的比對類型  默認爲權威庫網紋圖片比對
//權威數據源比對 WbCloudFaceContant.ID_CRAD
//自帶比對源比對  WbCloudFaceContant.SRC_IMG
//僅活體檢測  WbCloudFaceContant.NONE
//此處設置權威數據源對比
  data.putString(WbCloudFaceContant.COMPARE_TYPE, WbCloudFaceContant.ID_CRAD);
//是否需要錄製上傳視頻 默認需要,此處設置爲需要 
  data.putBoolean(WbCloudFaceContant.VIDEO_UPLOAD, true);
  //是否對錄製視頻進行檢查,默認不檢查,此處設置爲不檢查
  data.putBoolean(WbCloudFaceContant.VIDEO_CHECK, false);
  //設置是否打開閉眼檢測,默認不檢測,此處設置爲檢測
  data.putBoolean(WbCloudFaceContant.ENABLE_CLOSE_EYES, true);
//設置是否打開語音提示,默認打開,此處設置爲關閉
  data.putBoolean(WbCloudFaceContant. PLAY_VOICE, false);

//初始化 SDK,得到是否登錄 SDK 成功的結果 
WbCloudFaceVerifySdk.getInstance().initSdk(
  MainActivity.this,
  data,a
  //由WbCloudFaceVerifyLoginListener返回登錄結果
  new WbCloudFaceVerifyLoginListener() {
            @Override
            public void onLoginSuccess() {
             //登錄成功,拉起sdk頁面
  WbCloudFaceVerifySdk.getInstance().startWbFaceVerifySdk (MainActivity.this,
new WbCloudFaceVerifyResultListener() {
     //由FaceVerifyResultListener返回刷臉結果
       @Override
public void onFinish(WbFaceVerifyResult result) { 
    if(result != null) {
         if (result.isSuccess()) {
              Log.d(TAG, "刷臉成功!");
           } else {
              Log.d(TAG, "刷臉失敗!);
           }
         }
      });
    }
            @Override
            public void onLoginFailed(WbFaceError error) {
              //登錄失敗
              ...
         }
  • 響應結果
字段名 類型 字段含義 說明
isSuccess boolean 人臉核身是否成功 -
sign String 簽名 供 App 校驗人臉核身結果的安全性
liveRate String 活體檢測分數 -
similarity String 人臉比對分數 “僅活體檢測” 類型不提供此分數
userImageString String 用戶人臉核身圖片 經過 Base64 編碼後的用戶人臉核身圖片,僅用戶成功通過驗證時返回
WbFaceError 自定義對象 人臉核身錯誤 人臉核身成功時爲 null
  • 錯誤響應 
字段名 類型 字段含義 說明
domain String 錯誤發生的階段 -
code String 錯誤碼 -
desc String 錯誤描述 如有需求,可以展示給用戶
reason String 錯誤信息內容 錯誤的詳細實際原因,主要用於定位問題
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章