# 人臉識別
[TOC]
人臉識別(Face Recognize),是一項提取人臉特征信息進行智能分析的生物識別技術,識別率高達99.4%,必肉眼更準確。 MSC SDK 中人臉識別(IdentityVerifier)功能,主要分為下面幾類型:
(1)人臉驗證——1:1 相似度對比
通過提取兩張人臉的特征,進行相似度對比,最終返回相應的置信度得分,系統根據特征匹配程度決定“拒絕”或者“接受”。用于判斷兩個輸入人臉是否屬于同一人。
(2)人臉檢索——1:N相似度對比
在大規模人臉數據庫中快速找出與待檢索人臉相似度最高的一個或多個人臉。
注冊、驗證和模型管理相關說明:
| 名稱 | 說明 |
| --- | --- |
| enroll/注冊 | 上傳包含一張人臉的圖片到云端,引擎對其進行特征抽取,生成一個與之對應的模型,返回模型id(gid)。 |
| verify/驗證 | 注冊成功后,上傳包含一張人臉的圖片到云端,引擎將其與所注冊的人臉模型進行比對,驗證是否為同一個人,返回驗證結果。 |
| delete/刪除 | 刪除注冊的人臉模型 |
| auth_id/用戶id | 由應用傳入,用于標識用戶身份,長度為6-18個字符(由英文字母、數字、下劃線組成,不能以數字開頭),注:注冊和驗證都必須指定auth_id. |
為了獲得較高的準確率,請確保輸入的圖片滿足以下要求:
|項目|要求|
|:---:|---|
|色彩、格式|彩色,PNG、JPG、BMP格式的圖片。|
|人臉大小 、角度|大小應超過100\*100像素,可以容忍一定程度的側臉,為保證識別準確率,最好使用正臉圖片。|
|光照|均勻光照,可容忍部分陰影。|
|遮擋物|臉部盡量無遮擋,眼鏡等物品會一定程度上影響準確率。|
在人臉識別過程的主要參數有:
* 人臉識別會話類型(MFV_SST):λ 會話類型,包括注冊(enroll),驗證(verify),刪除(delete)
* 用戶ID(AUTH_ID):標識每個使用人臉功能的終端用戶的唯一ID
* 業務場景(MFV_SCENES):業務類型,人臉業務為ifr
其中人臉檢測和聚焦是對任意人臉圖片檢測,與用戶是否已注冊無關,故不需要設置用戶 ID。
識別結果通過 RequestListener 回調返回,其中包含了是否成功等信息,詳細的 JSON 格式請參照 附錄。
## 人臉注冊
具體接口調用如下,通過注冊的mEnrollListener中onResult回調中json格式結果進行解析。
~~~
// 設置會話場景
mIdVerifier.setParameter(SpeechConstant.MFV_SCENES, "ifr");
// 設置會話類型
mIdVerifier.setParameter(SpeechConstant.MFV_SST, "enroll");
// 設置用戶id
mIdVerifier.setParameter(SpeechConstant.AUTH_ID, mAuthid);
// 設置監聽器,開始會話
mIdVerifier.startWorking(mEnrollListener);
while( !isDataFinished ){
// 寫入數據,data為圖片的二進制數據
mIdVerifier.writeData("ifr", params, data, offset, length );
}
mIdVerifier.stopWrite("ifr");
~~~
## 人臉驗證
具體接口參數調用如下,通過注冊的mVerifyListener中onResult回調中json格式結果進行解析。
~~~
// 設置會話場景
mIdVerifier.setParameter(SpeechConstant.MFV_SCENES, "ifr");
// 設置會話類型
mIdVerifier.setParameter(SpeechConstant.MFV_SST, "verify");
// 設置驗證模式,單一驗證模式:sin
mIdVerifier.setParameter(SpeechConstant.MFV_VCM, "sin");
// 用戶id
mIdVerifier.setParameter(SpeechConstant.AUTH_ID, mAuthid);
// 設置監聽器,開始會話
mIdVerifier.startWorking(mVerifyListener);
while( !isDataFinished ){
// 寫入數據,data為圖片的二進制數據
mIdVerifier.writeData("ifr", params, data, offset, length );
}
mIdVerifier.stopWrite("ifr");
~~~
## 模型操作
人臉注冊成功后,在語音云端上會生成一個對應的模型來存儲人臉信息,人臉模型的操作即對模型進行刪除,暫時尚未支持查詢"query"操作。具體調用參考如下
~~~
// 設置會話場景
mIdVerifier.setParameter(SpeechConstant.MFV_SCENES, "ifr");
// 用戶id
mIdVerifier.setParameter(SpeechConstant.AUTH_ID, authid);
// 設置模型參數,若無可以傳空字符傳
StringBuffer params = new StringBuffer();
// 執行模型操作,cmd取值"delete" 刪除
mIdVerifier.execute("ifr", cmd, params.toString(), mModelListener);
~~~
## 安全性問題
在人臉識別中,最重要的問題,可能是圖片的可復制重復使用的問題。根據前文可知道, MSC SDK 在人臉識別時,并不是直接使用攝像頭等硬件,只要應用傳入二進制的圖片數據即可。這時,在驗證時,即使用一張他人照片,MSC SDK 也是無法分辨的;同時,應用即使是使用攝像頭來拍攝實時照片,也有可能被用戶使用照片來欺騙。所以,在這樣的情況下,人為的管理則顯得尤其重要:如要求用戶驗證時,有管理員在場保證其不使用他人照片(在公司打卡、門禁的場景)等。
此外,模型更新,APPID 和 用戶 ID 要注意的問題,可參考聲紋密碼章節中的安全性問題說明,此處不再重復。
把人臉識別結合聲紋密碼,可以提供更高的安全性,參考融合驗證章節。
## 1:N人臉檢索
通過上傳一張圖片,鑒別是哪個用戶 ID 的 1:N 鑒別功能,參考聲紋識別中1:N檢索部分。