靜默式活體檢測,是華為HMS Core機器學習服務所屬的人臉活體檢測能力,即無需用戶配合做出張嘴、扭頭、眨眼等動作,便可實時捕捉人臉,快速判斷是否為活體,用戶使用過程便捷,綜合體驗感較佳。
技術原理
靜默活體檢測能力使用RGB攝像頭,通過屏幕拍攝出現的摩爾紋、紙質照片反光等一些細節信息進行甄別攝像頭前的檢測物是真實人臉,還是人臉翻拍圖片、人臉翻拍屏幕、人臉面具等假臉攻擊。同時,靜默活體檢測能力的活體數據覆蓋光照、臉部飾品、性別、發型、面具材質等場景,對人臉存在的宏觀環境進行分析,排除明顯不可能存在人臉的場景。

靜默活體檢測能力的模型設計采用輕量化卷積模塊,同時將模型的線性計算通過重參數化思想在推理階段轉成單個卷積或全連接模塊。模型部署采用Mindspore-lite推理框架,對算子進行裁剪,實現極致的包大小,更利於開發者集成應用。
應用場景
活體檢測技術通常應用在人臉對比技術之前,比如在人臉識別手機解鎖時,首先需要通過活體檢測技術判別機器前出現的人臉是真臉還是假臉,然后再對比當前人臉與系統已錄入人臉是否是同一人,這樣可以防止當事人不在場的情況下,有人假冒當事人解鎖手機,造成個人信息泄露等嚴重損失。
那么,如何才能集成靜默活體檢測能力呢?
集成步驟
1.開發准備
詳細步驟可參考華為開發者聯盟官網中的應用開發介紹:https://developer.huawei.com/consumer/cn/doc/development/hiai-Guides/liveness-detection-0000001051386243?ha_source=hms1
靜默活體檢測提供兩種調用方式,您可以根據需求選擇相應的調用方式構建活體檢測服務。

2.默認掃描界面
2.1 創建靜默活體檢測結果回調,用於獲取檢測結果。
private MLLivenessCapture.Callback callback = new MLLivenessCapture.Callback() {
@Override
public void onSuccess(MLLivenessCaptureResult result) {
// 檢測成功的處理邏輯,檢測結果可能是活體或者非活體。
}
@Override
public void onFailure(int errorCode) {
// 檢測未完成,如相機異常CAMERA_ERROR,添加失敗的處理邏輯。
}
};
2.2 創建靜默活體檢測實例,啟動檢測。
MLLivenessCapture capture = MLLivenessCapture. getInstance();
capture.startDetect(activity, callback);
3.自定義掃描界面
3.1 創建MLLivenessDetectView,並加載到Activity布局。
- I.綁定相機預覽界面,設置活體識別區域。
在相機預覽流中,靜默活體檢測會對人臉在不在圖像的中間進行判斷,為了提高活體的通過率,建議人臉框放在屏幕中間,且活體識別區域比繪制的人臉框范圍略大。
-
II.設置是否檢測口罩。
-
III.設置結果回調。
-
IV.將MLLivenessDetectView加載到Activity。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_liveness_custom_detection);
mPreviewContainer = findViewById(R.id.surface_layout);
// ObtainLLivenessDetectView
mlLivenessDetectView = new MLLivenessDetectView.Builder()
.setContext(this)
//設置是否檢測口罩
.setOptions(MLLiveness DetectView.DETECT_MASK)
//設置人臉框相對於MLLivenessDetectView的Rect
.setFaceRect(new Rect(0, 0, 0, 200))
//設置結果回調
.setDetectCallback(new OnMLLivenessDetectCallback() {
@Override
public void onCompleted(MLLivenessCaptureResult result) {
// 靜默活體檢測完成時的結果回調
}
@Override
public void onError(int error) {
// 活體檢測發生錯誤時的錯誤碼回調
}
@Override
public void onInfo(int infoCode, Bundle bundle) {
// 靜默活體檢測提示信息回調,可用於界面提示
// if(infoCode==MLLivenessDetectInfo.NO_FACE_WAS_DETECTED){
// 當前沒有檢測到人臉
// }
// ...
}
@Override
public void onStateChange(int state, Bundle bundle) {
// 靜默活體檢測狀態切換回調
// if(state==MLLivenessDetectStates.START_DETECT_FACE){
// 開始人臉檢測
// }
// ...
}
}).build();
mPreviewContainer.addView(mlInteractiveLivenessDetectView);
mlInteractiveLivenessDetectView.onCreate(savedInstanceState);
}
4.對MLLivenessDetectView設置生命流程監聽。
@Override
protected void onDestroy() {
super.onDestroy();
mlLivenessDetectView.onDestroy();
}
@Override
protected void onPause() {
super.onPause();
mlLivenessDetectView.onPause();
}
@Override
protected void onResume() {
super.onResume();
mlLivenessDetectView.onResume();
}
@Override
protected void onStart() {
super.onStart();
mlLivenessDetectView.onStart();
}
@Override
protected void onStop() {
super.onStop();
mlLivenessDetectView.onStop();
}
更多關於機器學習服務介紹,請訪問華為開發者聯盟官網。
如果您在集成SDK或上架應用到華為應用市場時遇到問題,都可以在線提單。
了解更多詳情>>
訪問華為開發者聯盟官網
獲取開發指導文檔
華為移動服務開源倉庫地址:GitHub、Gitee
關注我們,第一時間了解 HMS Core 最新技術資訊~
