七個(gè)上熱搜的GitHub開源人臉識(shí)別項(xiàng)目
大家好,我是Echa。
人臉識(shí)別,是基于人的臉部特征信息進(jìn)行身份識(shí)別的一種生物識(shí)別技術(shù) (Biometric Recognition or Biometrics)。用攝像機(jī)或攝像頭采集含有人臉的圖像或視頻流,并自動(dòng)在圖像中檢測(cè)和跟蹤人臉,進(jìn)而對(duì)檢測(cè)到的人臉進(jìn)行臉部識(shí)別的一系列相關(guān)技術(shù),通常也叫做人像識(shí)別、面部識(shí)別。
人臉識(shí)別流程圖
生物識(shí)別包括人臉識(shí)別、語(yǔ)音識(shí)別、指紋識(shí)別、視網(wǎng)膜或虹膜識(shí)別。其中人臉識(shí)別是目前在身份認(rèn)證或者身份查找應(yīng)用中使用最廣的生物識(shí)別技術(shù)。
常用的生物特征識(shí)別技術(shù)
人臉識(shí)別特指利用分析比較人臉視覺特征信息進(jìn)行身份鑒別的計(jì)算機(jī)技術(shù)。廣義的人臉識(shí)別實(shí)際包括構(gòu)建人臉識(shí)別系統(tǒng)的一系列相關(guān)技術(shù),包括人臉圖像采集、人臉定位、人臉識(shí)別預(yù)處理、身份確認(rèn)以及身份查找等;而狹義的人臉識(shí)別特指通過(guò)人臉進(jìn)行身份確認(rèn)或者身份查找的技術(shù)或系統(tǒng)。
傳統(tǒng)的人臉識(shí)別技術(shù)主要是基于可見光圖像的人臉識(shí)別,人們也比較熟悉這樣的識(shí)別方式。不過(guò),這種方式的缺點(diǎn)其實(shí)非常明顯,光線的限制性非常大。隨著技術(shù)發(fā)展,也出現(xiàn)了一些新的解決方案,例如:三維圖像人臉識(shí)別、熱成像人臉識(shí)別等。
借此機(jī)會(huì),小編今天給大家好物分享7個(gè)上熱搜的GitHub開源人臉識(shí)別項(xiàng)目,希望對(duì)大家有所幫助。人臉識(shí)別是機(jī)器學(xué)習(xí)熱門領(lǐng)域之一,在 Github上有很多項(xiàng)目實(shí)現(xiàn)了各種人臉識(shí)別功能。接下來(lái)小編給大家一一介紹。
全文大綱
PaddleDetection - 是一個(gè)基于PaddlePaddle的目標(biāo)檢測(cè)端到端開發(fā)套件。
InsightFace - 是一個(gè)基于PyTorch和MXNet的開源2D 3D深度人臉識(shí)別分析工具。
OpenFace -是一個(gè)用于計(jì)算機(jī)視覺和機(jī)器學(xué)習(xí)的工具,能夠進(jìn)行各種面部識(shí)別檢測(cè)。
face_recognition - 是一個(gè)強(qiáng)大、簡(jiǎn)單、易上手的人臉識(shí)別開源項(xiàng)目。
deepface - 是python的輕量級(jí)面部識(shí)別和面部屬性分析(年齡,性別,情感和種族)框架。
facenet - 是谷歌公司與 2015 年提出了基于深度學(xué)習(xí)的人臉識(shí)別系統(tǒng)。
CompreFace - 是領(lǐng)先的免費(fèi)開源人臉識(shí)別系統(tǒng)。
PaddleDetection - 是一個(gè)基于PaddlePaddle的目標(biāo)檢測(cè)端到端開發(fā)套件。
Github:https://github.com/PaddlePaddle/PaddleDetection
PaddleDetection 官網(wǎng)
PaddleDetection為基于飛槳 PaddlePaddle 的端到端目標(biāo)檢測(cè)套件,內(nèi)置30+模型算法及250+預(yù)訓(xùn)練模型,覆蓋目標(biāo)檢測(cè)、實(shí)例分割、跟蹤、關(guān)鍵點(diǎn)檢測(cè)等方向,其中包括服務(wù)器端和移動(dòng)端高精度、輕量級(jí)產(chǎn)業(yè)級(jí)SOTA模型、冠軍方案和學(xué)術(shù)前沿算法,并提供配置化的網(wǎng)絡(luò)模塊組件、十余種數(shù)據(jù)增強(qiáng)策略和損失函數(shù)等高階優(yōu)化支持和多種部署方案,在打通數(shù)據(jù)處理、模型開發(fā)、訓(xùn)練、壓縮、部署全流程的基礎(chǔ)上,提供豐富的案例及教程,加速算法產(chǎn)業(yè)落地應(yīng)用。
PaddleDetection 模型截圖:
PaddleDetection 人臉檢測(cè)
PaddleDetection 小目標(biāo)檢測(cè)
PaddleDetection 2D關(guān)鍵點(diǎn)檢測(cè)
PaddleDetection 多目標(biāo)追蹤
InsightFace - 是一個(gè)基于PyTorch和MXNet的開源2D 3D深度人臉識(shí)別分析工具。
Github :https://github.com/deepinsight/insightface
InsightFace 官網(wǎng)
InsightFace是一個(gè)基于PyTorch和MXNet的開源2D 3D深度人臉識(shí)別分析工具,與MXNet相比,基于OneFlow的實(shí)現(xiàn)方案在性能方面更優(yōu)秀,OneFlow在數(shù)據(jù)并行時(shí)速度是其2.82倍;模型并行時(shí)速度是其2.45倍;混合并行+Partial fc時(shí)速度是其1.38倍。
基于OneFlow實(shí)現(xiàn)的代碼已合并至 insightface的項(xiàng)目倉(cāng)庫(kù),其中包含了數(shù)據(jù)集制作教程、訓(xùn)練和驗(yàn)證腳本、預(yù)訓(xùn)練模型以及和MXNet模型的轉(zhuǎn)換工具。InsightFace高效地實(shí)現(xiàn)了豐富的 最先進(jìn)的人臉識(shí)別、人臉檢測(cè)和人臉對(duì)齊算法,這些算法針對(duì)訓(xùn)練和部署進(jìn)行了優(yōu)化,該解決方案的準(zhǔn)確性非常高——在LFW數(shù)據(jù)集上為99.86%。
ArcFace、SubCenter-ArcFace、RetinaFace等都是InsightFace支持的項(xiàng)目。
InsightFace 模型截圖
InsightFace 模型
OpenFace -是一個(gè)用于計(jì)算機(jī)視覺和機(jī)器學(xué)習(xí)的工具,能夠進(jìn)行各種面部識(shí)別檢測(cè)。
Github:https://github.com/TadasBaltrusaitis/OpenFace
OpenFace 官網(wǎng)
OpenFace是一個(gè)用于計(jì)算機(jī)視覺和機(jī)器學(xué)習(xí)的工具,能夠進(jìn)行各種面部識(shí)別檢測(cè),包括:特征點(diǎn)檢測(cè)、頭部姿態(tài)識(shí)別、面部動(dòng)作識(shí)別和眼睛注視識(shí)別。
OpenFace 一個(gè)旨在為計(jì)算機(jī)視覺和機(jī)器學(xué)習(xí)研究人員、情感計(jì)算社區(qū)和有興趣構(gòu)建基于面部行為分析的交互式應(yīng)用程序的人使用的工具。OpenFace是第一個(gè)能夠進(jìn)行面部地標(biāo)檢測(cè)、頭部姿態(tài)估計(jì)、面部動(dòng)作單元識(shí)別和眼睛-注視估計(jì)的工具包,它具有可用的源代碼,可用于運(yùn)行和訓(xùn)練模型。代表 OpenFace 核心的計(jì)算機(jī)視覺算法在上述所有任務(wù)中都展示了最先進(jìn)的結(jié)果。此外,我們的工具能夠?qū)崟r(shí)性能,并能夠運(yùn)行在非專業(yè)的硬件上, 例如一個(gè)簡(jiǎn)單的網(wǎng)絡(luò)攝像頭。
OpenFace 是基于 Python 和Torch 的神經(jīng)網(wǎng)絡(luò)算法實(shí)現(xiàn),它的理論來(lái)自facenet。
它的功能包括:
(1)面部標(biāo)志檢測(cè)
OpenFace 面部標(biāo)志檢測(cè)
(2)面部標(biāo)志和頭部姿勢(shì)跟蹤
OpenFace 面部標(biāo)志和頭部姿勢(shì)跟蹤
(3)面部動(dòng)作單元識(shí)別
OpenFace 面部動(dòng)作單元識(shí)別
(4)凝視跟蹤
OpenFace 凝視跟蹤
(5)面部特征提取
OpenFace 面部特征提取
face_recognition - 是一個(gè)強(qiáng)大、簡(jiǎn)單、易上手的人臉識(shí)別開源項(xiàng)目。
GitHub: https://github.com/ageitgey/face_recognition
face_recognition 官網(wǎng)
face_recognition 是一個(gè)強(qiáng)大、簡(jiǎn)單、易上手的人臉識(shí)別開源項(xiàng)目,并且配備了完整的開發(fā)文檔和應(yīng)用案例,并且兼容樹莓派系統(tǒng)。本項(xiàng)目是一個(gè)非常簡(jiǎn)潔的人臉識(shí)別庫(kù),可以使用 Python 和命令行工具提取、識(shí)別、操作人臉。本項(xiàng)目的人臉識(shí)別是基于業(yè)內(nèi)領(lǐng)先的 C++ 開源庫(kù) dlib 中的深度學(xué)習(xí)模型,用 Labeled Faces in the Wild 人臉數(shù)據(jù)集進(jìn)行測(cè)試,有高達(dá) 99.38% 的準(zhǔn)確率。但對(duì)小孩和亞洲人臉的識(shí)別準(zhǔn)確率尚待提升。
其中,Labeled Faces in the Wild是美國(guó)麻省大學(xué)安姆斯特分校(University of Massachusetts Amherst)制作的人臉數(shù)據(jù)集,該數(shù)據(jù)集包含了從網(wǎng)絡(luò)收集的13,000多張面部圖像。
本項(xiàng)目還提供了簡(jiǎn)易的face_recognition命令行工具,可以用它處理整個(gè)文件夾里的圖片。
它的主要功能包括:
(1)定位圖片中的所有人臉
import face_recognition
image = face_recognition.load_image_file("your_file.jpg")
face_locations = face_recognition.face_locations(image)
face_recognition 定位圖片中的所有人臉
(2)識(shí)別人臉關(guān)鍵點(diǎn),包括眼睛、鼻子、嘴和下巴。
import face_recognition
image = face_recognition.load_image_file("your_file.jpg")
face_landmarks_list = face_recognition.face_landmarks(image)
face_recognition 識(shí)別人臉關(guān)鍵點(diǎn),包括眼睛、鼻子、嘴和下巴
識(shí)別人臉關(guān)鍵點(diǎn)在很多領(lǐng)域都很有用,比如本項(xiàng)目的自動(dòng)化妝案例( digital make-up):
https://github.com/ageitgey/face_recognition/blob/master/examples/digital_makeup.py。
(3)識(shí)別圖片中的人是誰(shuí)
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 識(shí)別圖片中的人是誰(shuí)
(4)實(shí)時(shí)人臉檢測(cè)
deepface - 是python的輕量級(jí)面部識(shí)別和面部屬性分析(年齡,性別,情感和種族)框架。
Github:https://github.com/serengil/deepface
deepface 官網(wǎng)
deepface是python的輕量級(jí)面部識(shí)別和面部屬性分析(年齡,性別,情感和種族)框架。您只需幾行代碼就可以應(yīng)用面部分析。它彌合了軟件工程和機(jī)器學(xué)習(xí)研究之間的鴻溝,非常適合想開車但不會(huì)造車的你。
Deepface是一個(gè)混合人臉識(shí)別軟件包。它目前包裝了許多最先進(jìn)的人臉識(shí)別模型:VGG-Face、Google FaceNet、OpenFace、Facebook DeepFace、DeepID、ArcFace、Dlib和SFace。默認(rèn)配置使用VGG-Face模型。
實(shí)驗(yàn)表明,人類在面部識(shí)別任務(wù)上的準(zhǔn)確率為97.53%,而這些模型已經(jīng)達(dá)到并通過(guò)了這個(gè)準(zhǔn)確率水平。
根據(jù)實(shí)驗(yàn)測(cè)試,性能較好的有:FaceNet、VGG-Face、ArcFace和Dlib。可以在其創(chuàng)建者聲明的Labeled Faces in the Wild和YouTube Faces in the Wild數(shù)據(jù)集中找到這些模型的得分。
deepface主要提供以下人臉識(shí)別算法,具體對(duì)應(yīng)功能為:
(1)人臉驗(yàn)證
deepface 人臉驗(yàn)證
(2)人臉識(shí)別
dfs = DeepFace.find(img_path = "img1.jpg", db_path = "C:/workspace/my_db")
人臉識(shí)別
(3)人臉屬性分析
DeepFace.stream(db_path = "C:/User/Sefik/Desktop/database")
deepface 人臉屬性分析
(4)人臉檢測(cè)
deepface 人臉檢測(cè)
(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)人臉實(shí)時(shí)分析
objs = DeepFace.analyze(img_path = "img4.jpg",
actions = ['age', 'gender', 'race', 'emotion']
)
deepface 人臉實(shí)時(shí)分析
facenet - 是谷歌公司與 2015 年提出了基于深度學(xué)習(xí)的人臉識(shí)別系統(tǒng)。
Github:https://github.com/davidsandberg/facenet
facenet 官網(wǎng)
FaceNet是谷歌公司與 2015 年提出了基于深度學(xué)習(xí)的人臉識(shí)別系統(tǒng)。FaceNet是一個(gè)多用途的識(shí)別系統(tǒng),可以同時(shí)用于人臉驗(yàn)證(是否是同一人)、識(shí)別(這個(gè)人是誰(shuí))和聚類(尋找類似的人)。
在使用標(biāo)準(zhǔn)“人面數(shù)據(jù)庫(kù)”進(jìn)行測(cè)試時(shí),F(xiàn)aceNet 的識(shí)別精度可以達(dá)到近乎百分之百,在面對(duì) 2.5 億張人臉的龐大數(shù)據(jù)庫(kù)時(shí),仍能保持 86% 的識(shí)別正確率。目前提供的兩個(gè)預(yù)訓(xùn)練模型,在LFW的成績(jī)分別是99.05%和99.65%。
FaceNet 的基本原理是通過(guò)直接訓(xùn)練一個(gè)深度卷積神經(jīng)網(wǎng)絡(luò),將人臉圖像映射到 128 維的歐幾里得空間,不同人臉圖像在歐幾里得空間中的距離與圖像相似度相關(guān):那么兩幅人臉圖像特征向量間的“歐式距離”越小,表示兩幅圖像是同一個(gè)人的可能性越大。
使用FaceNet推理的過(guò)程大致為以下幾個(gè)步驟:
- 數(shù)據(jù)預(yù)處理:常規(guī)人臉識(shí)別數(shù)據(jù)集中的圖像往往包含整個(gè)人體頭部及部分環(huán)境背景,并且人臉時(shí)常有傾斜(歪頭、側(cè)臉),在將此類圖像輸入至模型以前,需要對(duì)圖像“真人臉”部分進(jìn)行切圖,去除無(wú)關(guān)的背景信息,并對(duì)切出的人臉圖像進(jìn)行對(duì)齊,而后才可用于訓(xùn)練。
- 按照特定規(guī)則加載數(shù)據(jù)集:FaceNet 系統(tǒng)使用了一種新型的數(shù)據(jù)導(dǎo)入方式:以兩張匹配的圖片(同一個(gè)人的兩張圖片)以及一張不匹配的圖片(另一個(gè)人的一張圖片)為一個(gè)三元組,并以組為單位載入數(shù)據(jù)集。
- 使用大型骨干網(wǎng)絡(luò)提取人臉特征信息:選擇合適的深度卷積神經(jīng)網(wǎng)絡(luò),對(duì)輸出層進(jìn)行修改后,即可進(jìn)行人臉特征提取。常用的深度卷積神經(jīng)網(wǎng)絡(luò)包括 resnet 系列、Inception 系列等。
- 對(duì)人臉特征信息進(jìn)行 L2 范數(shù)歸一化:深度卷積神經(jīng)網(wǎng)絡(luò)輸出的結(jié)果是 128 維超空間中的特征向量,需使用 L2 正則化將 128 維超空間中的點(diǎn)規(guī)范化到 128 維超球面上。篩選出有效特征。
- 損失計(jì)算與更新梯度:計(jì)算三元損失函數(shù)(Triplets Loss),使模型快速超目標(biāo)方向優(yōu)化。
CompreFace - 是領(lǐng)先的免費(fèi)開源人臉識(shí)別系統(tǒng)。
Github :https://github.com/exadel-inc/CompreFace
CompreFace 官網(wǎng)
Exadel CompreFace是領(lǐng)先的免費(fèi)開源人臉識(shí)別系統(tǒng)。該人臉識(shí)別算法可以被輕松集成到任何系統(tǒng)中,而無(wú)需事先掌握機(jī)器學(xué)習(xí)技能。
系統(tǒng)提供用于人臉識(shí)別、人臉驗(yàn)證、人臉檢測(cè)、地標(biāo)檢測(cè)、面罩檢測(cè)、頭部姿勢(shì)檢測(cè)、年齡和性別識(shí)別的REST API;支持在CPU和GPU上運(yùn)行模型; 該項(xiàng)目還包含角色管理系統(tǒng),可以控制誰(shuí)有權(quán)訪問(wèn)面部識(shí)別服務(wù)。
另外,CompreFace提供了docker-compose配置,方便以Docker的模式快速部署人臉?lè)?wù)。
CompreFace支持多種人臉識(shí)別服務(wù),包括:
(1)人臉檢測(cè)
人臉檢測(cè)的使用場(chǎng)景很多,例如:收集商店在不同性別中受歡迎程度的統(tǒng)計(jì)數(shù)據(jù);收集有關(guān)您的活動(dòng)在哪些年齡段受歡迎的統(tǒng)計(jì)數(shù)據(jù);獲取地標(biāo)信息,了解客戶的視線;收集商店里有多少顧客的統(tǒng)計(jì)數(shù)據(jù);確認(rèn)所有顧客是否正確佩戴口罩。