六個優秀的開源人臉識別項目
生物識別包括人臉識別、語音識別、指紋識別、視網膜或虹膜識別。其中人臉識別是目前在身份認證或者身份查找應用中使用最廣的生物識別技術。
人臉識別特指利用分析比較人臉視覺特征信息進行身份鑒別的計算機技術。廣義的人臉識別實際包括構建人臉識別系統的一系列相關技術,包括人臉圖像采集、人臉定位、人臉識別預處理、身份確認以及身份查找等;而狹義的人臉識別特指通過人臉進行身份確認或者身份查找的技術或系統。
傳統的人臉識別技術主要是基于可見光圖像的人臉識別,人們也比較熟悉這樣的識別方式。不過,這種方式的缺點其實非常明顯,光線的限制性非常大。隨著技術發展,也出現了一些新的解決方案,例如:三維圖像人臉識別、熱成像人臉識別等。
在開源領域這些年也出現了一些非常優秀的人臉識別項目,這些項目開源且免費,并且也能達到某些應用場景的使用要求。本文重點介紹這些開源項目。
1.OpenFace
Github:https://github.com/TadasBaltrusaitis/OpenFace
OpenFace是一個用于計算機視覺和機器學習的工具,能夠進行各種面部識別檢測,包括:特征點檢測、頭部姿態識別、面部動作識別和眼睛注視識別。此外,它還能夠從網絡攝像頭無需任何專業硬件實現人臉實時識別功能。
OpenFace 是基于 Python 和Torch 的神經網絡算法實現,它的理論來自facenet。
它的功能包括:
(1)面部標志檢測
(2)面部標志和頭部姿勢跟蹤
(3)面部動作單元識別
(4)凝視跟蹤
(5)面部特征提取
2.face_recognition
GitHub: https://github.com/ageitgey/face_recognition
face_recognition 是一個強大、簡單、易上手的人臉識別開源項目,并且配備了完整的開發文檔和應用案例,并且兼容樹莓派系統。本項目是一個非常簡潔的人臉識別庫,可以使用 Python 和命令行工具提取、識別、操作人臉。本項目的人臉識別是基于業內領先的 C++ 開源庫 dlib 中的深度學習模型,用 Labeled Faces in the Wild 人臉數據集進行測試,有高達 99.38% 的準確率。但對小孩和亞洲人臉的識別準確率尚待提升。
其中,Labeled Faces in the Wild是美國麻省大學安姆斯特分校(University of Massachusetts Amherst)制作的人臉數據集,該數據集包含了從網絡收集的13,000多張面部圖像。
本項目還提供了簡易的face_recognition命令行工具,可以用它處理整個文件夾里的圖片。
它的主要功能包括:
(1)定位圖片中的所有人臉
import face_recognition
image = face_recognition.load_image_file("your_file.jpg")
face_locations = face_recognition.face_locations(image)
(2)識別人臉關鍵點,包括眼睛、鼻子、嘴和下巴。
import face_recognition
image = face_recognition.load_image_file("your_file.jpg")
face_landmarks_list = face_recognition.face_landmarks(image)
識別人臉關鍵點在很多領域都很有用,比如本項目的自動化妝案例( digital make-up):https://github.com/ageitgey/face_recognition/blob/master/examples/digital_makeup.py。
(3)識別圖片中的人是誰
import face_recognition
known_image = face_recognition.load_image_file("biden.jpg")
unknown_image = face_recognition.load_image_file("unknown.jpg")
biden_encoding = face_recognition.face_encodings(known_image)[0]
unknown_encoding = face_recognition.face_encodings(unknown_image)[0]
results = face_recognition.compare_faces([biden_encoding], unknown_encoding)
(4)實時人臉檢測
它可以配合其它的Python庫(比如opencv)實現實時人臉檢測:
3.InsightFace
GitHub: https://github.com/deepinsight/insightface
InsightFace是一個基于PyTorch和MXNet的開源2D 3D深度人臉識別分析工具,與MXNet相比,基于OneFlow的實現方案在性能方面更優秀,OneFlow在數據并行時速度是其2.82倍;模型并行時速度是其2.45倍;混合并行+Partial fc時速度是其1.38倍。基于OneFlow實現的代碼已合并至 insightface的項目倉庫,其中包含了數據集制作教程、訓練和驗證腳本、預訓練模型以及和MXNet模型的轉換工具。InsightFace高效地實現了豐富的 最先進的人臉識別、人臉檢測和人臉對齊算法,這些算法針對訓練和部署進行了優化,該解決方案的準確性非常高——在LFW數據集上為99.86%。
ArcFace、SubCenter-ArcFace、RetinaFace等都是InsightFace支持的項目。
4.facenet
Github:https://github.com/davidsandberg/facenet
FaceNet是谷歌公司于 2015 年提出了基于深度學習的人臉識別系統。FaceNet是一個多用途的識別系統,可以同時用于人臉驗證(是否是同一人)、識別(這個人是誰)和聚類(尋找類似的人)。在使用標準“人面數據庫”進行測試時,FaceNet 的識別精度可以達到近乎百分之百,在面對 2.5 億張人臉的龐大數據庫時,仍能保持 86% 的識別正確率。目前提供的兩個預訓練模型,在LFW的成績分別是99.05%和99.65%。
FaceNet 的基本原理是通過直接訓練一個深度卷積神經網絡,將人臉圖像映射到 128 維的歐幾里得空間,不同人臉圖像在歐幾里得空間中的距離與圖像相似度相關:那么兩幅人臉圖像特征向量間的“歐式距離”越小,表示兩幅圖像是同一個人的可能性越大。
使用FaceNet推理的過程大致為以下幾個步驟:
- 數據預處理:常規人臉識別數據集中的圖像往往包含整個人體頭部及部分環境背景,并且人臉時常有傾斜(歪頭、側臉),在將此類圖像輸入至模型以前,需要對圖像“真人臉”部分進行切圖,去除無關的背景信息,并對切出的人臉圖像進行對齊,而后才可用于訓練。
- 按照特定規則加載數據集:FaceNet 系統使用了一種新型的數據導入方式:以兩張匹配的圖片(同一個人的兩張圖片)以及一張不匹配的圖片(另一個人的一張圖片)為一個三元組,并以組為單位載入數據集。
- 使用大型骨干網絡提取人臉特征信息:選擇合適的深度卷積神經網絡,對輸出層進行修改后,即可進行人臉特征提取。常用的深度卷積神經網絡包括 resnet 系列、Inception 系列等。
- 對人臉特征信息進行 L2 范數歸一化:深度卷積神經網絡輸出的結果是 128 維超空間中的特征向量,需使用 L2 正則化將 128 維超空間中的點規范化到 128 維超球面上。篩選出有效特征。
- 損失計算與更新梯度:計算三元損失函數(Triplets Loss),使模型快速超目標方向優化。
5.deepface
Github:https://github.com/serengil/deepface
deepface是python的輕量級面部識別和面部屬性分析(年齡,性別,情感和種族)框架。您只需幾行代碼就可以應用面部分析。它彌合了軟件工程和機器學習研究之間的鴻溝,非常適合想開車但不會造車的你。
Deepface是一個混合人臉識別軟件包。它目前包裝了許多最先進的人臉識別模型:VGG-Face、Google FaceNet、OpenFace、Facebook DeepFace、DeepID、ArcFace、Dlib和SFace。默認配置使用VGG-Face模型。
根據實驗測試,性能較好的有:FaceNet、VGG-Face、ArcFace和Dlib。可以在其創建者聲明的Labeled Faces in the Wild和YouTube Faces in the Wild數據集中找到這些模型的得分。
deepface主要提供以下人臉識別算法,具體對應功能為:
(1)人臉驗證
(2)人臉識別
dfs = DeepFace.find(img_path = "img1.jpg", db_path = "C:/workspace/my_db")
(3)人臉屬性分析
DeepFace.stream(db_path = "C:/User/Sefik/Desktop/database")
(4)人臉檢測
(5)人臉特征提取
(6)人臉實時分析
6.CompreFace
Github:https://github.com/exadel-inc/CompreFace
Exadel CompreFace是領先的免費開源人臉識別系統。該人臉識別算法可以被輕松集成到任何系統中,而無需事先掌握機器學習技能。
系統提供用于人臉識別、人臉驗證、人臉檢測、地標檢測、面罩檢測、頭部姿勢檢測、年齡和性別識別的REST API;支持在CPU和GPU上運行模型; 該項目還包含角色管理系統,可以控制誰有權訪問面部識別服務。另外,CompreFace提供了docker-compose配置,方便以Docker的模式快速部署人臉服務。
CompreFace支持多種人臉識別服務,包括:
(1)人臉檢測
人臉檢測的使用場景很多,例如:收集商店在不同性別中受歡迎程度的統計數據;收集有關您的活動在哪些年齡段受歡迎的統計數據;獲取地標信息,了解客戶的視線;收集商店里有多少顧客的統計數據;確認所有顧客是否正確佩戴口罩。
(2)人臉識別
(3)面部驗證
(4)特征檢測
(5)年齡識別
(6)性別識別
(7)口罩檢測
(8)頭部姿勢檢測
(9)用戶、角色和訪問管理