人臉識別目前已廣泛應用於手機解鎖、刷臉支付、閘機身份驗證等生活場景,然而,人臉識別能力雖帶來了極大的便利,卻無法鑒別人臉是否真實,比如使用高模擬圖片、精密石膏或3D建模面具,即可輕鬆攻破人臉識別演算法,單獨使用該能力存在極大的安全隱患。 華為機器學習服務的動作活體檢測能力,通過採用指令動作配合的方式進 ...
人臉識別目前已廣泛應用於手機解鎖、刷臉支付、閘機身份驗證等生活場景,然而,人臉識別能力雖帶來了極大的便利,卻無法鑒別人臉是否真實,比如使用高模擬圖片、精密石膏或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();
}
瞭解更多詳情>>
訪問機器學習服務官網
訪問華為開發者聯盟官網
獲取開髮指導文檔
華為移動服務開源倉庫地址:GitHub、Gitee
關註我們,第一時間瞭解 HMS Core 最新技術資訊~