六個(gè)優(yōu)秀的開(kāi)源人臉識(shí)別項(xiàng)目
生物識(shí)別包括人臉識(shí)別、語(yǔ)音識(shí)別、指紋識(shí)別、視網(wǎng)膜或虹膜識(shí)別。其中人臉識(shí)別是目前在身份認(rèn)證或者身份查找應(yīng)用中使用最廣的生物識(shí)別技術(shù)。
人臉識(shí)別特指利用分析比較人臉視覺(jué)特征信息進(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ù)主要是基于可見(jiàn)光圖像的人臉識(shí)別,人們也比較熟悉這樣的識(shí)別方式。不過(guò),這種方式的缺點(diǎn)其實(shí)非常明顯,光線的限制性非常大。隨著技術(shù)發(fā)展,也出現(xiàn)了一些新的解決方案,例如:三維圖像人臉識(shí)別、熱成像人臉識(shí)別等。
在開(kāi)源領(lǐng)域這些年也出現(xiàn)了一些非常優(yōu)秀的人臉識(shí)別項(xiàng)目,這些項(xiàng)目開(kāi)源且免費(fèi),并且也能達(dá)到某些應(yīng)用場(chǎng)景的使用要求。本文重點(diǎn)介紹這些開(kāi)源項(xiàng)目。
1.OpenFace
Github:https://github.com/TadasBaltrusaitis/OpenFace
OpenFace是一個(gè)用于計(jì)算機(jī)視覺(jué)和機(jī)器學(xué)習(xí)的工具,能夠進(jìn)行各種面部識(shí)別檢測(cè),包括:特征點(diǎn)檢測(cè)、頭部姿態(tài)識(shí)別、面部動(dòng)作識(shí)別和眼睛注視識(shí)別。此外,它還能夠從網(wǎng)絡(luò)攝像頭無(wú)需任何專業(yè)硬件實(shí)現(xiàn)人臉實(shí)時(shí)識(shí)別功能。
OpenFace 是基于 Python 和Torch 的神經(jīng)網(wǎng)絡(luò)算法實(shí)現(xiàn),它的理論來(lái)自facenet。
它的功能包括:
(1)面部標(biāo)志檢測(cè)
(2)面部標(biāo)志和頭部姿勢(shì)跟蹤
(3)面部動(dòng)作單元識(shí)別
(4)凝視跟蹤
(5)面部特征提取
2.face_recognition
GitHub: https://github.com/ageitgey/face_recognition
face_recognition 是一個(gè)強(qiáng)大、簡(jiǎn)單、易上手的人臉識(shí)別開(kāi)源項(xiàng)目,并且配備了完整的開(kāi)發(fā)文檔和應(yīng)用案例,并且兼容樹(shù)莓派系統(tǒng)。本項(xiàng)目是一個(gè)非常簡(jiǎn)潔的人臉識(shí)別庫(kù),可以使用 Python 和命令行工具提取、識(shí)別、操作人臉。本項(xiàng)目的人臉識(shí)別是基于業(yè)內(nèi)領(lǐng)先的 C++ 開(kāi)源庫(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)
(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)
識(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)
(4)實(shí)時(shí)人臉檢測(cè)
它可以配合其它的Python庫(kù)(比如opencv)實(shí)現(xiàn)實(shí)時(shí)人臉檢測(cè):
3.InsightFace
GitHub: https://github.com/deepinsight/insightface
InsightFace是一個(gè)基于PyTorch和MXNet的開(kāi)源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)目。
4.facenet
Github:https://github.com/davidsandberg/facenet
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)化。
5.deepface
Github:https://github.com/serengil/deepface
deepface是python的輕量級(jí)面部識(shí)別和面部屬性分析(年齡,性別,情感和種族)框架。您只需幾行代碼就可以應(yīng)用面部分析。它彌合了軟件工程和機(jī)器學(xué)習(xí)研究之間的鴻溝,非常適合想開(kāi)車但不會(huì)造車的你。
Deepface是一個(gè)混合人臉識(shí)別軟件包。它目前包裝了許多最先進(jìn)的人臉識(shí)別模型:VGG-Face、Google FaceNet、OpenFace、Facebook DeepFace、DeepID、ArcFace、Dlib和SFace。默認(rèn)配置使用VGG-Face模型。
根據(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)證
(2)人臉識(shí)別
dfs = DeepFace.find(img_path = "img1.jpg", db_path = "C:/workspace/my_db")
(3)人臉屬性分析
DeepFace.stream(db_path = "C:/User/Sefik/Desktop/database")
(4)人臉檢測(cè)
(5)人臉特征提取
(6)人臉實(shí)時(shí)分析
6.CompreFace
Github:https://github.com/exadel-inc/CompreFace
Exadel CompreFace是領(lǐng)先的免費(fèi)開(kā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)所有顧客是否正確佩戴口罩。
(2)人臉識(shí)別
(3)面部驗(yàn)證
(4)特征檢測(cè)
(5)年齡識(shí)別
(6)性別識(shí)別
(7)口罩檢測(cè)
(8)頭部姿勢(shì)檢測(cè)
(9)用戶、角色和訪問(wèn)管理