當前開源的人臉檢測模型,識別不少,不少小夥伴也踩過很多坑。相信很多使用過dlib和facenet人臉識別的小夥伴都有這樣的疑惑,爲何論文裏高達99.8以上的準確率,本身實際使用下來的準確率卻並很差,甚至用來落實到百人之內的人臉識別,都常常出現誤識別現象,形成這樣的現象最主要的緣由來自於訓練人臉識別模型的樣本和國內人臉有差距。所以,這些看似準確率很高的模型,直接拿來作項目使用是不行的,測試兩種模型在使用幾百人的考勤圖片上的表現,準確率上dlib和facenet 都很不理想。python
綜合比較,發現使用虹軟的人臉識別接口是目前開源,在國內人臉識別準確度上最好的選擇。git
遺憾的是當前虹軟暫時沒有提供python 接口代碼,目前網上也有部分使用python調用虹軟接口的案例,可是相似文章千篇一概,基本都是同一個代碼,反覆轉載,也並無能一個完整調用虹軟所有功能的python接口,函數名稱也隨意定義並很差記,使用pycharm 開發也沒有類函數成員代碼編寫提示,代碼部分不合理的地方也重複出現… 實在是不能忍受當前已發佈 的python api 接口良莠不齊的現象,爲此,特地用了幾天時間將虹軟當前版本的所有功能寫出一個完整好用的python api接口。github
本質上python接口是使用 ctypes 調用 虹軟的動態連接庫,須要去虹軟官網 去選擇 C/C++ 版本SDK 來下載依賴文件。爲了在代碼使用上 和 虹軟 提供的 C/C++ 版本演示代碼基本一致,此 python 接口 的函數名和虹軟的函數名是同樣的,而且demo.py的結構 基本就是 C/C++ 版本演示代碼的 python 翻譯版。api
代碼地址:ArcFace-python
若是代碼對你有幫助,給個star 吧!函數
frame_byte=bytes(frame.data)
測試
frame_byte_p=cast(framebyte,c_ubyte_p)
優化
可是以上能夠改成: frame.ctypes.data_as(POINTER(c_ubyte))
翻譯
這樣能夠減小 numpy 圖像轉換爲字節流這一步的消耗code
1.當前接口須要下載虹軟最新的(2.2)C/C++版本 SDK。視頻
2.虹軟的C/C++接口支持不少圖像格式傳入,可是 python 使用opencv 作圖像處理時基本都是 ASVL_PAF_RGB24_B8G8R8 這種格式(就是cv2.imread() 獲得的numpy圖像),而且默認使用該接口時 都是使用 這種圖片格式。所以此接口 依賴 opencv,若是沒有能夠直接pip安裝。
3.虹軟的配個函數都會返回一盒狀態碼,要作好狀態碼的判斷工做,確保使用正確,若是狀態碼 返回值不是 MOK(值爲0),說明函數執行出錯,能夠對照 doc文檔中的錯誤碼解釋對照。
4.第一次運行代碼須要聯網,由於會作激活操做,首次運行激活成功後會獲得一個ArcFace64.dat文件,當有此文件之後,能夠不用執行激活代碼。
5.涉及到傳入圖片的函數操做,要確保送入的圖片寬度爲 4 的整數倍,若是不是則要提早作好裁剪,或者作resize操做。
6.當前默認爲圖片檢測模式,人臉屬性值中的faceID始終爲空,當須要運行視頻人臉檢測的話能夠將 初始化引擎 函數中 ASF_DETECT_MODE_IMAGE改成ASF_DETECT_MODE_VIDEO即表明追蹤模式,這樣能夠減小人臉檢測的消耗,而且此時返回的人臉信息中的faceID 將會有值,這在視頻人臉識別中頗有用,能夠減小人臉重複提取識別。
7.特徵值和人臉屬性檢測可能會失敗。虹軟在作特徵提取和屬性提取這些功能時會對人臉區域有一個判斷操做,若是人臉模糊,或者提供的人臉座標位置不對有誤差,會返回81925(人臉特徵檢測結果置信度低)錯誤碼。因此必定要對返回狀態碼引發重視。
8.虹軟有兩個描述人臉檢測位置和角度信息的對象ASF_SingleFaceInfo
(單人臉信息)ASF_MultiFaceInfo
(多人臉信息),人臉識別流程是先檢測到人臉,再對人臉提取特徵值信息,再用特徵值信息比較類似度。虹軟人臉檢測時返回ASF_MultiFaceInfo
對象(哪怕只檢測到了一我的),用於提取人臉特徵信息的函數須要 輸入 ASF_SingleFaceInfo
的對象,所以在提取特徵信息時,須要根據 ASF_MultiFaceInfo
中的信息 構建ASF_SingleFaceInfo
對象來提取特徵值,除了 提取特徵值函數外,虹軟的其餘人臉屬性 提取,好比:年齡/性別識別,活體檢測,人臉3D角度 等功能都是要送入ASF_MultiFaceInfo
對象,可是其中活體檢測又要求單張大圖片中只能檢測一個活體,超出返回未知,而3D角度檢測單張大圖時最多返回4個 人臉的3D角度值,這些地方可能不太好控制,須要注意。