臉部辨識目前已廣泛應用於手機解鎖、刷臉支付、閘機身份驗證等生活場景,然而,臉部辨識能力雖帶來了極大的便利,卻無法鑑別人臉是否真實,比如使用高模擬圖片、精密石膏或3D建模面具,即可輕鬆攻破臉部辨識演演算法,單獨使用該能力存在極大的安全隱患。
華為機器學習服務的動作活體檢測能力,通過採用指令動作配合的方式進行活體檢測,在眨眼、張嘴、左搖頭、右搖頭、注視、點頭六種動作中隨機選擇三種,讓使用者按指令完成動作,使用人臉關鍵點及人臉追蹤技術,通過連續的圖片,計算變化距離與不變距離的比值,進行上一幀影象與下一幀影象的對比,從而驗證使用者是否為真實活體本人操作,對照片、視訊和麵具的攻擊具有很好的防禦效果,是臉部辨識能否有效應用的前提條件。
除此之外,在使用動作活體檢測能力過程中,針對遮擋和光線不佳等檢測場景,支援引導檢測,如及時展示「暗光提示」、「人像模糊」「墨鏡、口罩遮擋」、「人臉過近、過遠」等提示資訊,實現更加友好的互動體驗,打造安全可靠的支付級活體檢測能力。
相較於無需使用者做出配合動作的靜默活體檢測,互動式的動作活體檢測能力更適用於銀行金融、醫療等需要人機互動的場景。比如,在金融領域使用該技術,使用者不必親去銀行場地,遠端即可進行金融開戶、保險理財等操作;線上下超市等自助支付場景中,使用者需通過動作活體檢測完成支付,保證個人資金安全性;在社保、醫保、個稅等辦理操作場景中,同樣需要通過動作活體檢測來精準驗證操作人是否為活體本人,以此提高操作安全性。
那麼如何整合動作活體檢測能力呢?步驟如下。
在進行開發之前,您需要完成必要的開發準備工作,同時請確保您的工程中已經設定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();
}
瞭解更多詳情>>
存取機器學習服務官網
存取華為開發者聯盟官網
獲取開發指導檔案
華為移動服務開源倉庫地址:GitHub、Gitee
關注我們,第一時間瞭解 HMS Core 最新技術資訊~