靜默式活體檢測,是華為HMS Core機器學習服務所屬的人臉活體檢測能力,即無需使用者配合做出張嘴、扭頭、眨眼等動作,便可實時捕捉人臉,快速判斷是否為活體,使用者使用過程便捷,綜合體驗感較佳。
技術原理
靜默活體檢測能力使用RGB攝像頭,通過螢幕拍攝出現的摩爾紋、紙質照片反光等一些細節資訊進行甄別攝像頭前的檢測物是真實人臉,還是人臉翻拍圖片、人臉翻拍螢幕、人臉面具等假臉攻擊。同時,靜默活體檢測能力的活體資料覆蓋光照、臉部飾品、性別、髮型、面具材質等場景,對人臉存在的巨集觀環境進行分析,排除明顯不可能存在人臉的場景。
靜默活體檢測能力的模型設計採用輕量化卷積模組,同時將模型的線性計算通過重引數化思想在推理階段轉成單個卷積或全連線模組。模型部署採用Mindspore-lite推理框架,對運算元進行裁剪,實現極致的包大小,更利於開發者整合應用。
應用場景
活體檢測技術通常應用在人臉對比技術之前,比如在人臉識別手機解鎖時,首先需要通過活體檢測技術判別機器前出現的人臉是真臉還是假臉,然後再對比當前人臉與系統已錄入人臉是否是同一人,這樣可以防止當事人不在場的情況下,有人假冒當事人解鎖手機,造成個人資訊洩露等嚴重損失。
那麼,如何才能整合靜默活體檢測能力呢?
整合步驟
1.開發準備
詳細步驟可參考華為開發者聯盟官網中的應用開發介紹:https://developer.huawei.com/...
靜默活體檢測提供兩種呼叫方式,您可以根據需求選擇相應的呼叫方式構建活體檢測服務。
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 最新技術資訊~