Android整合百度人臉識別SDK詳細流程

皮皮蝦吃蝦發表於2020-09-28

最近需要對接百度的人臉識別採集,並且呼叫百度的api,進行人臉比對,在這裡做一個總結,讓後來的碼友少走一些坑。

前提準備

註冊

進入https://console.bce.baidu.com此地址進行百度賬號的註冊以及登入,登陸之後選擇人臉識別進行建立應用,找不到的直接進入https://console.bce.baidu.com/ai/#/ai/face/overview/index此地址建立新應用,新建立的應用有6個月的測試時間,6個月足夠我們測試上線了。

建立應用

在這裡插入圖片描述
建立應用時人臉識別是預設勾選的,如果有其它功能可自行選擇,將其按照規定填寫完畢之後,點選立即建立就好了。

基礎資訊認證

在這裡插入圖片描述
建立應用之後選擇自己的需求,我這邊需要離線採集SDK,另外有離線識別SDK可供選擇,區別自己去看百度文件吧,我這裡的流程按照離線採集sdk,離線識別sdk與此流程基本一樣,選中之後需要進行資訊認證,如下圖介面:
在這裡插入圖片描述
此處稽核通過後會有簡訊通知,一般來說一天直接就可以稽核通過,當時2個小時我的就稽核通過了。

授權

申通通過之後再次選中離線識別sdk進入,會讓使用者新建授權,如下介面:
在這裡插入圖片描述
此處的的安卓簽名MD5需要注意一下,點選什麼是安卓簽名MD5,如何讓獲取,會有獲取步驟。當時我電腦jdk版本為jdk-13.0.1,使用此處的方法獲取不到MD5,只有SHA1以及SHA256,後來百度搜出的結果可能是10以上版本獲取不到MD5,這個時候我下載了jdk1.8.0_202版本,配置環境後,成功獲取到MD5,建立成功後有6個月有效期。

開發資源下載

下滑會看到以下介面,選擇Android,進行下載對應的SDK就可以了,
在這裡插入圖片描述
在這裡插入圖片描述
此處會自動下載配置好Android Studio專案,下載好修改buile.grade中的
classpath 'com.android.tools.build:gradle:3.5.2'為你之前專案的版本,並且開啟grade->wrapper->gradle-wrapper.properties也修改為distributionUrl=https\://services.gradle.org/distributions/gradle-5.4.1-all.zip之前專案的版本,以上操作是為了使用Android Studio開啟此專案的時候不會因為版本不匹配而報錯,這個時候使用Android Studio開啟此專案基本上沒什麼問題了。
此時執行的時候可能還有一些包名路徑錯誤問題,刪除重新匯入就好了。還需要注意一下把百度文件說明中需要修改的key,id這些東西填寫一下,並且有的地方包名會報錯,修改一下就好了。

我為什麼不選擇上方這種方案,原因有二:

  • 這種方式適用於專案剛開始階段,像我之前已經寫好了,只需要加入百度人臉採集的這種,需要把程式碼搬運進來,或者把百度人臉採集搬運過去,這個時候我選擇了把百度官方下載的程式碼搬運過去。
  • 官方下載的Android Studio是使用3.0以下版本的Android Studio寫的,專案比較老舊,而我使用的是3.0以上版本,這個時候我果斷放棄上方方案。

匯入百度SDK

  • 將其demo中assets下的idl-license.face-android拷貝到新專案中
  • 將其demo中 在這裡插入圖片描述facesdk拷貝到新專案目錄下,

app下的build.grade中加入

 implementation project(":facesdk")

settings.grade中的incluse後加入

,":facesdk"

最後點選Sync now

  • -在app下的build.grade中加入以下程式碼,並且填寫對應的引數,以下def alias對應你簽名時的別名,def password對應簽名密碼,def
    filePath
    對應簽名路徑,填好之後點選右上角Sync Now

    
            def alias = "您的keyAlias"
            def password = "您的keyPassword"
            def filePath = "您的storeFile"  //簽名檔案路徑 如:../faceprint.jks
            
            debug {
                keyAlias alias
                keyPassword password
                storeFile file(filePath)
                storePassword(password)
            }
            release {
                keyAlias alias
                keyPassword password
                storeFile file(filePath)
                storePassword(password)
            }
        } ```
        
    
  • 在app下的build.grade中新增依賴:

implementation 'com.squareup.okhttp3:okhttp:3.6.0'

此依賴是demo中獲取token而使用,不想要使用okHttp可以自己換一種方法。

  • 這個時候在新專案中新建資料夾,將其demo中的所有java檔案以及xml佈局檔案拷貝進來,拷貝進來之後會有包名路徑不對的問題,在java檔案中進行刪除重新導包就行了,有些可能還會遇到找不到RecycleView,這個時候可以自己新增RecycleView依賴:
 implementation 'com.android.support:recyclerview-v7:25.1.0'

這時還需要將demo中values下的dimens.xml(整個檔案)以及strings.xml(自定義的字串)也貼上到新專案中,在demo下的mipmap-xxhdpi有兩張圖片也複製一下,在AndroidManifest.xml中新增相對應的activity,例如:

 <activity
            android:name=".ui.activity.DetectActivity"
            android:screenOrientation="portrait"
            android:theme="@style/Theme.AppCompat.Light.NoActionBar" />
        <activity
            android:name=".ui.activity.TrackActivity"
            android:screenOrientation="portrait"
            android:theme="@style/Theme.AppCompat.Light.NoActionBar"/>
        <activity
            android:name=".ui.activity.AttrActivity"
            android:screenOrientation="portrait"
            android:theme="@style/Theme.AppCompat.Light.NoActionBar"/>

將其程式入口路徑改為拷貝進來的MainActivity.java。
到這時基本上已經差不多了,還有最後一步。
Config.java檔案中

    public static String apiKey = 替換為你的apiKey(ak);
    public static String secretKey = 替換為你的secretKey(sk);
    public static String licenseID = "mattress-face-android";
    public static String licenseFileName = "替換為你的licenseFileName";

替換為你申請應用的key就可以了,licenseFileName 就是剛開始時assets中新增檔案的名字。
專案中需要更改開啟哪個攝像頭,百度提供前置攝像頭,後置攝像頭以及usb攝像頭,

private void setCameraType(CameraImageSource cameraImageSource) {
        // TODO 選擇使用前置攝像頭
        //cameraImageSource.getCameraControl().setCameraFacing(ICameraControl.CAMERA_FACING_FRONT);

        // TODO 選擇使用usb攝像頭
          cameraImageSource.getCameraControl().setCameraFacing(ICameraControl.CAMERA_USB);
        // 如果不設定,人臉框會映象,顯示不準
          previewView.getTextureView().setScaleX(-1);

        // TODO 選擇使用後置攝像頭
        // cameraImageSource.getCameraControl().setCameraFacing(ICameraControl.CAMERA_FACING_BACK);
        // previewView.getTextureView().setScaleX(-1);
    }

執行的時候全域性搜尋一下自己更新一下就可以了。

對於程式碼中註釋挺全的,根據自己需求更改就好。

相關文章