七個上熱搜的GitHub開源人臉識別項目
大家好,我是Echa。
人臉識別,是基于人的臉部特征信息進行身份識別的一種生物識別技術 (Biometric Recognition or Biometrics)。用攝像機或攝像頭采集含有人臉的圖像或視頻流,并自動在圖像中檢測和跟蹤人臉,進而對檢測到的人臉進行臉部識別的一系列相關技術,通常也叫做人像識別、面部識別。
人臉識別流程圖
生物識別包括人臉識別、語音識別、指紋識別、視網膜或虹膜識別。其中人臉識別是目前在身份認證或者身份查找應用中使用最廣的生物識別技術。
常用的生物特征識別技術
人臉識別特指利用分析比較人臉視覺特征信息進行身份鑒別的計算機技術。廣義的人臉識別實際包括構建人臉識別系統的一系列相關技術,包括人臉圖像采集、人臉定位、人臉識別預處理、身份確認以及身份查找等;而狹義的人臉識別特指通過人臉進行身份確認或者身份查找的技術或系統。
傳統的人臉識別技術主要是基于可見光圖像的人臉識別,人們也比較熟悉這樣的識別方式。不過,這種方式的缺點其實非常明顯,光線的限制性非常大。隨著技術發展,也出現了一些新的解決方案,例如:三維圖像人臉識別、熱成像人臉識別等。
借此機會,小編今天給大家好物分享7個上熱搜的GitHub開源人臉識別項目,希望對大家有所幫助。人臉識別是機器學習熱門領域之一,在 Github上有很多項目實現了各種人臉識別功能。接下來小編給大家一一介紹。
全文大綱
PaddleDetection - 是一個基于PaddlePaddle的目標檢測端到端開發套件。
InsightFace - 是一個基于PyTorch和MXNet的開源2D 3D深度人臉識別分析工具。
OpenFace -是一個用于計算機視覺和機器學習的工具,能夠進行各種面部識別檢測。
face_recognition - 是一個強大、簡單、易上手的人臉識別開源項目。
deepface - 是python的輕量級面部識別和面部屬性分析(年齡,性別,情感和種族)框架。
facenet - 是谷歌公司與 2015 年提出了基于深度學習的人臉識別系統。
CompreFace - 是領先的免費開源人臉識別系統。
PaddleDetection - 是一個基于PaddlePaddle的目標檢測端到端開發套件。
Github:https://github.com/PaddlePaddle/PaddleDetection
PaddleDetection 官網
PaddleDetection為基于飛槳 PaddlePaddle 的端到端目標檢測套件,內置30+模型算法及250+預訓練模型,覆蓋目標檢測、實例分割、跟蹤、關鍵點檢測等方向,其中包括服務器端和移動端高精度、輕量級產業級SOTA模型、冠軍方案和學術前沿算法,并提供配置化的網絡模塊組件、十余種數據增強策略和損失函數等高階優化支持和多種部署方案,在打通數據處理、模型開發、訓練、壓縮、部署全流程的基礎上,提供豐富的案例及教程,加速算法產業落地應用。
PaddleDetection 模型截圖:
PaddleDetection 人臉檢測
PaddleDetection 小目標檢測
PaddleDetection 2D關鍵點檢測
PaddleDetection 多目標追蹤
InsightFace - 是一個基于PyTorch和MXNet的開源2D 3D深度人臉識別分析工具。
Github :https://github.com/deepinsight/insightface
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支持的項目。
InsightFace 模型截圖
InsightFace 模型
OpenFace -是一個用于計算機視覺和機器學習的工具,能夠進行各種面部識別檢測。
Github:https://github.com/TadasBaltrusaitis/OpenFace
OpenFace 官網
OpenFace是一個用于計算機視覺和機器學習的工具,能夠進行各種面部識別檢測,包括:特征點檢測、頭部姿態識別、面部動作識別和眼睛注視識別。
OpenFace 一個旨在為計算機視覺和機器學習研究人員、情感計算社區和有興趣構建基于面部行為分析的交互式應用程序的人使用的工具。OpenFace是第一個能夠進行面部地標檢測、頭部姿態估計、面部動作單元識別和眼睛-注視估計的工具包,它具有可用的源代碼,可用于運行和訓練模型。代表 OpenFace 核心的計算機視覺算法在上述所有任務中都展示了最先進的結果。此外,我們的工具能夠實時性能,并能夠運行在非專業的硬件上, 例如一個簡單的網絡攝像頭。
OpenFace 是基于 Python 和Torch 的神經網絡算法實現,它的理論來自facenet。
它的功能包括:
(1)面部標志檢測
OpenFace 面部標志檢測
(2)面部標志和頭部姿勢跟蹤
OpenFace 面部標志和頭部姿勢跟蹤
(3)面部動作單元識別
OpenFace 面部動作單元識別
(4)凝視跟蹤
OpenFace 凝視跟蹤
(5)面部特征提取
OpenFace 面部特征提取
face_recognition - 是一個強大、簡單、易上手的人臉識別開源項目。
GitHub: https://github.com/ageitgey/face_recognition
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)
face_recognition 定位圖片中的所有人臉
(2)識別人臉關鍵點,包括眼睛、鼻子、嘴和下巴。
import face_recognition
image = face_recognition.load_image_file("your_file.jpg")
face_landmarks_list = face_recognition.face_landmarks(image)
face_recognition 識別人臉關鍵點,包括眼睛、鼻子、嘴和下巴
識別人臉關鍵點在很多領域都很有用,比如本項目的自動化妝案例( 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)
face_recognition 識別圖片中的人是誰
(4)實時人臉檢測
deepface - 是python的輕量級面部識別和面部屬性分析(年齡,性別,情感和種族)框架。
Github:https://github.com/serengil/deepface
deepface 官網
deepface是python的輕量級面部識別和面部屬性分析(年齡,性別,情感和種族)框架。您只需幾行代碼就可以應用面部分析。它彌合了軟件工程和機器學習研究之間的鴻溝,非常適合想開車但不會造車的你。
Deepface是一個混合人臉識別軟件包。它目前包裝了許多最先進的人臉識別模型:VGG-Face、Google FaceNet、OpenFace、Facebook DeepFace、DeepID、ArcFace、Dlib和SFace。默認配置使用VGG-Face模型。
實驗表明,人類在面部識別任務上的準確率為97.53%,而這些模型已經達到并通過了這個準確率水平。
根據實驗測試,性能較好的有:FaceNet、VGG-Face、ArcFace和Dlib。可以在其創建者聲明的Labeled Faces in the Wild和YouTube Faces in the Wild數據集中找到這些模型的得分。
deepface主要提供以下人臉識別算法,具體對應功能為:
(1)人臉驗證
deepface 人臉驗證
(2)人臉識別
dfs = DeepFace.find(img_path = "img1.jpg", db_path = "C:/workspace/my_db")
人臉識別
(3)人臉屬性分析
DeepFace.stream(db_path = "C:/User/Sefik/Desktop/database")
deepface 人臉屬性分析
(4)人臉檢測
deepface 人臉檢測
(5)人臉特征提取
backends = [
'opencv',
'ssd',
'dlib',
'mtcnn',
'retinaface',
'mediapipe',
'yolov8',
'yunet',
]
#face verification
obj = DeepFace.verify(img1_path = "img1.jpg",
img2_path = "img2.jpg",
detector_backend = backends[0]
)
#face recognition
dfs = DeepFace.find(img_path = "img.jpg",
db_path = "my_db",
detector_backend = backends[1]
)
#embeddings
embedding_objs = DeepFace.represent(img_path = "img.jpg",
detector_backend = backends[2]
)
#facial analysis
demographies = DeepFace.analyze(img_path = "img4.jpg",
detector_backend = backends[3]
)
#face detection and alignment
face_objs = DeepFace.extract_faces(img_path = "img.jpg",
target_size = (224, 224),
detector_backend = backends[4]
)
deepface 人臉特征提取
(6)人臉實時分析
objs = DeepFace.analyze(img_path = "img4.jpg",
actions = ['age', 'gender', 'race', 'emotion']
)
deepface 人臉實時分析
facenet - 是谷歌公司與 2015 年提出了基于深度學習的人臉識別系統。
Github:https://github.com/davidsandberg/facenet
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),使模型快速超目標方向優化。
CompreFace - 是領先的免費開源人臉識別系統。
Github :https://github.com/exadel-inc/CompreFace
CompreFace 官網
Exadel CompreFace是領先的免費開源人臉識別系統。該人臉識別算法可以被輕松集成到任何系統中,而無需事先掌握機器學習技能。
系統提供用于人臉識別、人臉驗證、人臉檢測、地標檢測、面罩檢測、頭部姿勢檢測、年齡和性別識別的REST API;支持在CPU和GPU上運行模型; 該項目還包含角色管理系統,可以控制誰有權訪問面部識別服務。
另外,CompreFace提供了docker-compose配置,方便以Docker的模式快速部署人臉服務。
CompreFace支持多種人臉識別服務,包括:
(1)人臉檢測
人臉檢測的使用場景很多,例如:收集商店在不同性別中受歡迎程度的統計數據;收集有關您的活動在哪些年齡段受歡迎的統計數據;獲取地標信息,了解客戶的視線;收集商店里有多少顧客的統計數據;確認所有顧客是否正確佩戴口罩。