人臉識別目前已廣泛應用于手機解鎖、刷臉支付、閘機身份驗證等生活場景,然而,人臉識別能力雖帶來了極大的便利,卻無法鑒別人臉是否真實,比如使用高仿真圖片、精密石膏或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 one rror(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 最新技術資訊~
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/499930.html
標籤:Android
