動作活體檢測能力,構建安全可靠的支付級「刷臉」體驗

2022-07-20 12:00:46

臉部辨識目前已廣泛應用於手機解鎖、刷臉支付、閘機身份驗證等生活場景,然而,臉部辨識能力雖帶來了極大的便利,卻無法鑑別人臉是否真實,比如使用高模擬圖片、精密石膏或3D建模面具,即可輕鬆攻破臉部辨識演演算法,單獨使用該能力存在極大的安全隱患。

華為機器學習服務的動作活體檢測能力,通過採用指令動作配合的方式進行活體檢測,在眨眼、張嘴、左搖頭、右搖頭、注視、點頭六種動作中隨機選擇三種,讓使用者按指令完成動作,使用人臉關鍵點及人臉追蹤技術,通過連續的圖片,計算變化距離與不變距離的比值,進行上一幀影象與下一幀影象的對比,從而驗證使用者是否為真實活體本人操作,對照片、視訊和麵具的攻擊具有很好的防禦效果,是臉部辨識能否有效應用的前提條件。

除此之外,在使用動作活體檢測能力過程中,針對遮擋和光線不佳等檢測場景,支援引導檢測,如及時展示「暗光提示」、「人像模糊」「墨鏡、口罩遮擋」、「人臉過近、過遠」等提示資訊,實現更加友好的互動體驗,打造安全可靠的支付級活體檢測能力。

相較於無需使用者做出配合動作的靜默活體檢測,互動式的動作活體檢測能力更適用於銀行金融、醫療等需要人機互動的場景。比如,在金融領域使用該技術,使用者不必親去銀行場地,遠端即可進行金融開戶、保險理財等操作;線上下超市等自助支付場景中,使用者需通過動作活體檢測完成支付,保證個人資金安全性;在社保、醫保、個稅等辦理操作場景中,同樣需要通過動作活體檢測來精準驗證操作人是否為活體本人,以此提高操作安全性。

那麼如何整合動作活體檢測能力呢?步驟如下。

1 開發步驟

在進行開發之前,您需要完成必要的開發準備工作,同時請確保您的工程中已經設定HMS Core SDK的Maven倉地址,並且完成了本服務的SDK整合。

方式一:fullSDK方式整合

dependencies{
    // 引入動作活體檢測集合包。
    implementation 'com.huawei.hms:ml-computer-vision-interactive-livenessdetection
: 3.2.0.122'
}

方式二:基礎SDK方式整合

dependencies{
    // 引入活體檢測plugin包。
    implementation 'com.huawei.hms:ml-computer-vision-interactive-livenessdetection-plugin:3.2.0.122'
}

動作活體檢測提供兩種呼叫方式,您可以根據需求選擇相應的呼叫方式構建活體檢測服務。

1.1	預設掃描介面
1.建立活體檢測結果回撥,用於獲取檢測結果。
private MLInteractiveLivenessCapture.Callback callback = new MLInteractiveLivenessCapture.Callback() {
    @Override
    public void onSuccess(MLInteractiveLivenessCaptureResult result) {
        // 檢測成功的處理邏輯,檢測結果可能是活體或者非活體。
        swich(result.getStateCode()) {
            case InteractiveLivenessStateCode.ALL_ACTION_CORRECT:
            //驗證通過後對應具體操作

            case InteractiveLivenessStateCode.IN_PROGRESS:
            //正在檢測時對應具體操作
            …
    }

    @Override
    public void onFailure(int errorCode) {
        // 檢測未完成,如相機異常CAMERA_ERROR,新增失敗的處理邏輯。
    }
};
2.建立活體檢測範例,啟動檢測。
MLInteractiveLivenessConfig interactiveLivenessConfig = new MLInteractiveLivenessConfig.Builder().build();

        MLInteractiveLivenessCaptureConfig captureConfig = new MLInteractiveLivenessCaptureConfig.Builder()
                .setOptions(MLInteractiveLivenessCaptureConfig.DETECT_MASK)
                .setActionConfig(interactiveLivenessConfig)
                .setDetectionTimeOut(TIME_OUT_THRESHOLD)
                .build();
MLInteractiveLivenessCapture capture = MLInteractiveLivenessCapture.getInstance();
capture.startDetect(activity, callback);
1.2	自定義掃描介面
1.建立MLInteractiveLivenessDetectView,並載入到Activity佈局。
/**
* I.繫結相機預覽介面,設定活體識別區域。
*在相機預覽流中,活體檢測會對人臉在不在預覽視訊流的人臉框中進行判斷,為了提高活*體的通過率,建議人臉框放在螢幕中間,且活體識別區域比繪製的人臉框範圍略大。
* II.設定是否檢測口罩。
* III.設定結果回撥。
* IV.將MLInteractiveLivenessDetectView載入到Activity。
*/
@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_liveness_custom_detection);
        mPreviewContainer = findViewById(R.id.surface_layout);
        MLInteractiveLivenessConfig interactiveLivenessConfig = new MLInteractiveLivenessConfig.Builder().build();
mlInteractiveLivenessDetectView = new MLInteractiveLivenessDetectView.Builder()
                .setContext(this)
                //設定是否檢測口罩
                .setOptions(MLInteractiveLivenessCaptureConfig.DETECT_MASK)
                //設定檢測動作,靜默為0,動作為1。
                .setType(1)
                //設定相機視訊流預覽位置(左上右下畫素值基於預覽view)
                   .setFrameRect(new Rect(0, 0, 1080, 1440))
                //設定動作活體呼叫
                .setActionConfig(interactiveLivenessConfig)
                //設定人臉框相對於預覽view的位置(左上右下基於640*480影象座標,建議寬高比符合實際人臉比例),人臉框作用為檢測人臉遠近和是否偏移
                .setFaceRect(new Rect(84, 122, 396, 518))
                //設定檢測超時時間,建議10000毫秒左右。
                .setDetectionTimeOut(10000)
                //設定結果回撥
                .setDetectCallback(new OnMLInteractiveLivenessDetectCallback() {
                    @Override
                    public void onCompleted(MLInteractiveLivenessCaptureResult result) {
                    // 活體檢測完成時的結果回撥
                    swich(result.getStateCode()) {
                        case InteractiveLivenessStateCode.ALL_ACTION_CORRECT:
                        //驗證通過後對應具體操作

                        case InteractiveLivenessStateCode.IN_PROGRESS:
                        //正在檢測時對應具體操作
                        …
                        }
                    }

                    @Override
                    public void onError(int error) {
                    // 活體檢測發生錯誤時的錯誤碼回撥
                    }
                }).build();

        mPreviewContainer.addView(mlInteractiveLivenessDetectView);
        mlInteractiveLivenessDetectView.onCreate(savedInstanceState);
}

2.對MLInteractiveLivenessDetectView設定生命流程監聽。
@Override
protected void onDestroy() {
    super.onDestroy();
    MLInteractiveLivenessDetectView.onDestroy();
}

@Override
protected void onPause() {
    super.onPause();
    MLInteractiveLivenessDetectView.onPause();
}

@Override
protected void onResume() {
    super.onResume();
    MLInteractiveLivenessDetectView.onResume();
}

@Override
protected void onStart() {
    super.onStart();
    MLInteractiveLivenessDetectView.onStart();
}

@Override
protected void onStop() {
    super.onStop();
    MLInteractiveLivenessDetectView.onStop();
}

瞭解更多詳情>>

存取機器學習服務官網

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

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