刷臉認證如何實現人臉又快又準完成校驗?

2022-06-09 15:03:24

網際網路飛速發展的今天,各種App的驗證方法也越來越方便使用者,從一開始的密碼輸入,到後來的指紋解鎖,演變成如今的刷臉認證。刷個臉,就可以解鎖裝置、線上/線下支付、通過門禁、快速檢票等。與此同時也伴隨了很多安全問題,首要就是如何判斷使用者的真實性。

HMS Core機器學習服務(ML Kit)的人臉比對和活體檢測能力能夠快速捕捉人臉,通過識別並提取模板中的人臉特徵,不需要使用者配合做動作就可以判斷是真實人臉,還是人臉攻擊,同時將模板人像和人臉進行高精度比對,輸出相似度值,進而判斷兩者是否為同一個人。

基於此,開發者可以快速構建人臉檢測能力,比如在金融類App中,比對使用者身份證照片和人臉檢測結果,判斷使用者資訊真實性,可提供快速安全的身份核驗流程,適用於網際網路遠端開戶、刷臉支付等金融業務。在辦公App中,可採取刷臉考勤,識別是否為本人,有效防止代打卡等行為。

效果展示

從效果展示圖來看,活體檢測幾秒鐘就可以完成精準識別手機上的假照片。

開發步驟

開發準備

  1. 在AppGallery Connect中設定相關資訊,具體開發準備可以參考檔案

  2. 設定HMS Core SDK的Maven倉地址。

開啟Android Studio專案級「build.gradle」檔案。

新增AppGallery Connect外掛以及Maven程式碼庫。

在「allprojects」>「repositories」裡面設定HMS Core SDK的Maven倉地址。

allprojects {
    repositories {
        google()
        jcenter()
        maven {url 'https://developer.huawei.com/repo/'}
    }
 }

在「buildscript」>「repositories」裡面設定HMS Core SDK的Maven倉地址。

buildscript {
    repositories {
        google()
        jcenter()
        maven {url 'https://developer.huawei.com/repo/'}
    }
 }

在「buildscript」>「dependencies」裡面增加AppGallery Connect外掛設定。

buildscript{
    dependencies {
         classpath 'com.huawei.agconnect:agcp:1.3.1.300'
    }
 }

人臉比對功能開發

  1. 建立人臉比對檢測器範例。
MLFaceVerificationAnalyzer analyzer = MLFaceVerificationAnalyzerFactory.getInstance().getFaceVerificationAnalyzer();
  1. 通過android.graphics.Bitmap建立MLFrame物件用於設定模版圖片,支援的圖片格式包括:JPG、JPEG、PNG、BMP。
// 通過bitmap建立MLFrame
MLFrame templateFrame = MLFrame.fromBitmap(bitmap);
  1. 設定人臉比對模版圖片。如果模板中無人臉,則表示模板設定失敗,保持該範例上一次設定的模板不變。
List<MLFaceTemplateResult> results = analyzer.setTemplateFace(templateFrame);
for (int i = 0; i < results.size(); i++) {
    // 處理模板圖片識別結果
}
  1. 通過android.graphics.Bitmap建立MLFrame物件用於設定比對圖片。支援的圖片格式包括:JPG、JPEG、PNG、BMP。
// 通過bitmap建立MLFrame
MLFrame compareFrame = MLFrame.fromBitmap(bitmap);
  1. 呼叫同步或非同步方法進行人臉比對。檢測結果主要包括比對圖片中檢測到的人臉資訊、檢測到的人臉資訊與模板人臉是同一個人的置信度。詳細資訊請參見MLFaceVerificationResult

• 非同步方法範例程式碼:

Task<List<MLFaceVerificationResult>> task = analyzer.asyncAnalyseFrame(compareFrame);
task.addOnSuccessListener(new OnSuccessListener<List<MLFaceVerificationResult>>() {
    @Override
    public void onSuccess(List<MLFaceVerificationResult> results) {
        // 檢測成功
    }
}).addOnFailureListener(new OnFailureListener() {
    @Override
    public void onFailure(Exception e) {
        // 檢測失敗
    }
});

• 同步方法範例程式碼:

SparseArray<MLFaceVerificationResult> results = analyzer.analyseFrame(compareFrame);
for (int i = 0; i < results.size(); i++) {
    // 檢測結果處理
}
  1. 檢測完成,停止分析器,釋放檢測資源。
if (analyzer != null) {
    analyzer.stop();
}

活體檢測功能開發

預設掃描介面

  1. 建立靜默活體檢測結果回撥,用於獲取檢測結果。
private MLLivenessCapture.Callback callback = new MLLivenessCapture.Callback() {
   @Override
   public void onSuccess(MLLivenessCaptureResult result) {
    //檢測成功的處理邏輯,檢測結果可能是活體或者非活體。
   }


   @Override
   public void onFailure(int errorCode) {
       //檢測未完成,如相機異常CAMERA_ERROR,新增失敗的處理邏輯。
   }
};
  1. 建立靜默活體檢測範例,啟動檢測。
MLLivenessCapture capture = MLLivenessCapture.getInstance();
capture.startDetect(activity, callback);

瞭解更多詳情>>

存取華為開發者聯盟官網
獲取開發指導檔案
華為移動服務開源倉庫地址:GitHubGitee

關注我們,第一時間瞭解 HMS Core 最新技術資訊~