以往的人臉辨識主要是包含人臉影像擷取、人臉辨識預處理、身分確認、身分查找等技術和系統。現在人臉辨識已經慢慢延伸到了ADAS中的駕駛偵測、行人追蹤、甚至到了動態物體的追蹤。
由此可以看出,人臉辨識系統已經由簡單的影像處理發展到了視訊即時處理。而且演算法已經由先前的Adaboots、PCA等傳統的統計方法轉變為CNN、RCNN等深度學習及其變形的方法。現在也有相當一部分人開始研究3維人臉辨識識別,這種計畫目前也受到了學術界、工業界和國家的支持。
首先看看現在的研究現況。如上的發展趨勢可以知道,現在的主要研究方向是利用深度學習的方法來解決影片人臉辨識。
主要的研究人員:
如下:中科院計算所的山世光教授、中科院生物辨識研究所的李子青教授、清華大學的蘇光大教授、香港中文大學的湯曉鷗教授、Ross B. Girshick等等。
主要開源專案:
SeetaFace人臉辨識引擎。該引擎由中科院計算所山世光研究員帶領的人臉辨識研究小組研發。程式碼基於C 實現,且不依賴任何第三方的函式庫函數,開源協定為BSD-2,可供學術界和工業界免費使用。
主要軟體API/SDK:
- face 。 Face .com 是一個提供免費人臉偵測、臉部辨識、人臉屬性分析等服務的雲端服務平台。 Face 是北京曠視科技有限公司旗下的全新人臉技術雲端平台,在黑馬大賽中,Face 獲得年度總冠軍,已獲得聯想之星投資。
- skybiometry.。主要包含了face detection、face recognition、face grouping。
主要的人臉辨識圖像庫:##
#目前公開的比較好的人臉圖像庫有LFW(Labelled Faces in the Wild)和YFW(Youtube Faces in the Wild )。現在的實驗資料集基本上是來自LFW,目前的影像人臉辨識的精確度已經達到99%,基本上現有的影像資料庫已經被刷爆。以下是現有人臉影像資料庫的總結:- 漢王科技:漢王科技主要是做人臉辨識的身份驗證,主要用在門禁系統、考勤系統等等。
- 科大訊飛:科大訊飛在香港中文大學湯曉鷗教授團隊支持下,開發出了一個基於高斯過程的人臉識別技術–Gussian face, 該技術在LFW上的識別率為98.52% ,目前該公司的DEEPID2在LFW上的辨識率已經達到了99.4%。
- 川大智勝:目前該公司的研究亮點是三維人臉識別,並拓展到3維全臉照相機產業化等等。
- 商湯科技:主要是一家致力於引領人工智慧核心「深度學習」技術突破,建構人工智慧、大數據分析產業解決方案的公司,目前在人臉辨識、文字辨識、人體識別、車輛辨識、物體辨識、影像處理等方向有很強的競爭力。在人臉辨識中有106個人臉關鍵點的辨識。
人臉確認(face verification):
Face verification,人臉校驗是基於pair matching的方式,所以它得到的答案是「是」或「不是」。在具體操作的時候,給定一張測試圖片,然後挨個進行pair matching,matching上了則說明測試圖像與該張匹配上的人臉為同一個人的人臉。
一般在小型辦公室人臉刷臉打卡系統中採用的(應該)是這種方法,具體操作方法大致是這樣一個流程:離線逐個錄入員工的人臉照片(一個員工錄入的人臉一般不只一張),員工在刷臉打卡的時候相機捕捉到影像後,透過前面所講的先進行人臉偵測,然後進行人臉校正,再進行人臉校驗,一旦match結果為「是”,說明該名刷臉的人員是屬於本辦公室的,人臉校驗到這一步就完成了。
在離線錄入員工人臉的時候,我們可以將人臉與人名對應,這樣一旦在人臉校驗成功後,就可以知道這個人是誰了。
上面所說的這樣一種系統優點是開發費用低廉,適合小型辦公場所,缺點是在捕獲時不能有遮擋,而且還要求人臉姿態比較正(這種系統我們所有,不過沒體驗過)。下圖給了示意:
人臉辨識(face identification/recognition):
Face identification或Face recognition,人臉辨識正如下圖所示的,它要回答的是“我是誰?”,相比於人臉校驗採用的pair matching,它在識別階段更多的是採用分類的手段。它其實是對進行了前面兩步驟即人臉偵測、人臉校正後所做的影像(人臉)分類。
根據上面四個概念的介紹,我們可以了解到人臉辨識主要包含三個大的、獨立性強的模組:
我們將上面的步驟進行詳細的拆分,得到下面的流程圖:
人臉辨識分類
#現在隨著人臉辨識技術的發展,人臉辨識技術主要分為了三類:一是基於影像的辨識方法、二是基於影片的辨識方法、三是三維人臉辨識方法。
基於影像的辨識方法:
這個過程是一個靜態的影像辨識過程,主要利用影像處理。主要的演算法有PCA、EP、kernel method、 Bayesian Framwork、SVM 、HMM、Adaboot等等演算法。但在2014年,人臉辨識利用Deep learning 技術取得了重大突破,為代表的有deepface的97.25%、face 的97.27%,但是deep face的訓練集是400w集的,而同時香港中文大學湯曉鷗的Gussian face的訓練集為2w。
基於視訊的即時辨識方法:
這個過程可以看出人臉辨識的追蹤過程,不僅要求在影片中找到人臉的位置和大小,還需要確定幀間不同人臉的對應關係。
DeepFace
參考論文(資料):
1. DeepFace論文。 DeepFace:Closing the Gap to Human-level Performance in Face Verificaion
2. 卷積神經網路了解部落格。 http://blog.csdn.net/zouxy09/article/details/8781543
3. 卷積神經網路的推導部落格。 http://blog.csdn.net/zouxy09/article/details/9993371/
4. 註 on convolution Neural Network.
5. Neural Network for Recognition of Handwritten Digits
5. Neural Network for Recognition of Handwritten Digits
#6. DeepFace博文:http://blog.csdn.net/Hao_Zhang_Vision/article/details/52831399?locationNum=2&fps=1DeepFace是FaceBook提出來的,後續有DeepID和FaceNet出現。而且在DeepID和FaceNet中都能體現DeepFace的身影,所以DeepFace可以謂之CNN在人臉辨識的奠基之作,目前深度學習在人臉辨識中也取得了非常好的效果。所以這裡我們先從DeepFace開始學習。 在DeepFace的學習過程中,不僅將DeepFace所用的方法進行介紹,也會介紹當前該步驟的其它主要演算法,對現有的圖像人臉辨識技術做一個簡單、全面的敘述。 DeepFace的基本框架1. 人臉辨識的基本流程face detection -> face alignment -> face verification -> face identification# 2.人臉偵測(face detection)######2.1 現有技術:###haar分類器:
人臉偵測(detection)在opencv中早就有直接能拿來用的haar分類器,基於Viola-Jones演算法。
Adaboost演算法(級聯分類器):
1.參考論文:Robust Real-Time face detection 。
2. 參考中文部落格:http://blog.csdn.net/cyh_24/article/details/39755661
3. 部落格:http://blog.sina.com.cn /s/blog_7769660f01019ep0.html
2.2 文章中所用方法
本文中採用了基於偵測點的人臉偵測方法(fiducial Point Detector)。
- 先選出6個基準點,2隻眼睛中心、 1個鼻子點、3個嘴巴上的點。
- 透過LBP特徵用SVR來學習得到基準點。
效果如下:
3. 人臉校準(face alignment)
2D alignment:
- #對Detection後的圖片進行二維裁剪, scale, rotate and translate the image into six anchor locations。將人臉部分裁剪出來。
3D alignment:
- 找到一個3D 模型,用這個3D模型把二維人臉crop成3D人臉。 67個基點,然後Delaunay三角化,在輪廓處添加三角形來避免不連續。
- 將三角化後的人臉轉換成3D形狀
- 三角化後的人臉變為有深度的3D三角網
- 將三角網做偏轉,使人臉的正面朝前
- 最後放正的人臉
效果如下:
- 論文:Bayesian Face Revisited: A Joint Formulation
- 論文:Deep Learning Face Representation by Joint Identification-Verification
4.2 文章中的方法
論文中透過一個多類人臉辨識任務來訓練深度神經網路(DNN)。網路結構如上圖所示。- 結構參數:
- 經過3D對齊以後,形成的圖像都是152×152的圖像,輸入到上述網路結構中,該結構的參數如下:
- Conv:32個11×11×3的捲積核
- max-pooling: 3×3, stride=2
- Conv: 16個9×9的捲積核
- Local-Conv: 169×9的捲積核,Local的意思是卷積核的參數不共享
- Local-Conv: 16個7×7的捲積核,參數不共享
- Local-Conv: 16個5×5的捲積核,參數不共享
Fully-connected: 4096維
#Softmax: 4030維
- 提取低水平特徵:
- 過程如下所示:
- #預處理階段:輸入3通道的人臉,並進行3D校正,再歸一化到152*152像素大小-152*152*3.
- 透過卷積層C1:C1包含32個11*11*3的濾波器(即卷積核),得到32張特徵圖——32*142*142*3。
透過max-polling層M2:M2的滑窗大小為3*3,滑動步長為2,3個通道上分別獨立polling。
透過另一個卷積層C3:C3包含16個9*9*16的3維卷積核。
上述3層網路是為了提取到低水平的特徵,如簡單的邊緣特徵和紋理特徵。 Max-polling層使得卷積網路對局部的變換更加穩健。如果輸入是校正後的人臉,就能讓網路對小的標記誤差更加魯棒。 然而這樣的polling層會使網路在臉部的細節結構和微小紋理的精準位置上失去一些資訊。因此,文中只在第一個卷積層後面接了Max-polling層。這些前面的層稱之為前端自適應的預處理層級。然而對於許多計算來講,這是必要的,這些層的參數其實很少。它們只是把輸入影像擴充成一個簡單的局部特徵集。 後續層:######L4,L5,L6都是局部連接層,就像卷積層使用濾波器一樣,在特徵影像的每個位置都訓練學習一組不同的濾波器。由於校正後不同區域的有不同的統計特性,因此卷積網絡在空間上的穩定性的假設不能成立。 ######比如說,相較於鼻子和嘴巴之間的區域,眼睛和眉毛之間的區域展現出非常不同的表觀並且有很高的區分度。換句話說,透過利用輸入的校正後的影像,客製了DNN的結構。 ###使用局部連接層並沒有影響特徵提取時的運算負擔,但是影響了訓練的參數數量。只是由於有如此大的標記人臉庫,我們可以承受三個大型的局部連接層。局部連接層的輸出單元受到一個大型的輸入圖塊的影響,可以據此調整局部連接層的使用(參數)(不共享權重)
#比如說,L6層的輸出受到一個74* 74*3的輸入圖塊的影響,在校正後的人臉中,這種大的圖塊之間很難有任何統計上的參數共享。
頂層:
最後,網路頂端的兩層(F7,F8)是全連接的:每個輸出單元都連接到所有的輸入。這兩層可以捕捉到人臉影像中距離較遠的區域的特徵之間的關聯性。例如,眼睛的位置和形狀,與嘴巴的位置和形狀之間的關聯性(這部分也含有資訊)可以由這兩層得到。第一個全連接層F7的輸出就是我們原始的人臉特徵表達向量。
在特徵表達方面,這個特徵向量與傳統的基於LBP的特徵描述有很大區別。傳統方法通常使用局部的特徵描述(計算直方圖)並用作分類器的輸入。
最後一個全連接層F8的輸出進入了一個K-way的softmax(K是類別個數),即可產生類別標號的機率分佈。以Ok表示一個輸入影像經過網路後的第k個輸出,即可用下式表達輸出類別標號k的機率:
- 先每維度進行歸一化,即對於結果向量中的每一個維度,都要除以該維度在整個訓練集上的最大值。
- 每個向量進行L2歸一化。
- 所有值均為負
- 非常稀疏
- #特徵元素的值都在區間[0, 1]之間
- Social Face Classification Dataset(SFC): 4.4M張人臉/4030人
- LFW: 13323張人臉/5749人
- restricted: 只有是/不是的標記
- unrestricted:其他的訓練對也可以拿到
- unsupervised:不在LFW上訓練
- Youtube Face(YTF): 3425videos/1595人
result on LFW:
result on YTF:
DeepFace與之後的方法的最大的不同點在於,DeepFace在訓練神經網路前,使用了對齊方法。論文認為神經網路能夠work的原因在於一旦人臉經過對齊後,人臉區域的特徵就固定在某些像素上了,此時,可以用卷積神經網路來學習特徵。
本文的模型使用了C 工具箱dlib基於深度學習的最新人臉辨識方法,基於戶外臉部資料測試庫Labeled Faces in the Wild 的基準水準來說,達到了99.38%的準確率。
更多演算法
# http://www.gycc.com/trends/face recognition/overview/
dlib: http://dlib.net/資料測試庫Labeled Faces in the Wild:http://vis-www.cs.umass.edu/lfw/
模型提供了一個簡單的face_recognition 命令列工具讓使用者透過指令就能直接使用圖片資料夾進行人臉辨識操作。
在圖片中捕捉人臉特徵
在一張圖片中捕捉到所有的人臉
找到並處理圖片中人臉的特徵
#找出每個人眼睛、鼻子、嘴巴和下巴的位置和輪廓。
import face_recognition
image = face_recognition.load_image_file("your_file.jpg")
face_locations = face_recognition.face_locations(image)
安裝步驟
本方法支援Python3/python2,我們只在macOS和Linux中測試過,還不知道是否適用於Windows。
使用pypi的pip3 安裝此模組(或是Python 2的pip2)
重要提示:在編譯dlib時可能會出問題,你可以透過安裝來自來源(而不是pip)的dlib來修復錯誤,請見安裝手冊How to install dlib from source
https://gist.github.com/ageitgey/629d75c1baac34dfa5ca2a1928a7aeaf
首先,你需要提供一個包含一張照片的文件夾,並且你已經知道照片中的人是誰,每個人都要有一張照片文件,且文件名需要以該人的姓名命名;
然後你需要準備另一個資料夾,裡面裝有你想要辨識人臉照片;
接下來你只用執行face_recognition指令,程式能夠通過已知人臉的文件夾辨識出未知人臉照片中的人是誰;
針對每個人臉都要一行輸出,資料是檔案名稱加上辨識到的人名,以逗號分隔。 如果你只是想要知道每個照片中的人名而不要檔名,可以進行以下操作:###############Python模組##### #你可以透過引入face_recognition就能完成人臉辨識操作:###### API 文件: https://face-recognition.readthedocs.io.######在圖片中自動辨識所有人臉# ##### 請參考此案例this example: https://github.com/ageitgey/face_recognition/blob/master/examples/find_faces_in_picture.py###辨識圖片中的人臉並告知名字
請參考此案例this example: https://github.com/ageitgey/face_recognition/blob/master/examples/recognize_faces_in_pictures.py
#Python程式碼案例
所有範例都在此here.
https://github.com/ageitgey/face_recognition/tree/master/examples
#·找到照片中的人臉Find faces in a photograph
https://github.com/ageitgey/face_recognition/blob/master/examples/find_faces_in_picture.py · 识别照片中的面部特征Identify specific facial features in a photograph https://github.com/ageitgey/face_recognition/blob/master/examples/find_facial_features_in_picture.py · 使用数字美颜Apply (horribly ugly) digital make-up https://github.com/ageitgey/face_recognition/blob/master/examples/digital_makeup.py ·基于已知人名找到并识别出照片中的未知人脸Find and recognize unknown faces in a photograph based on photographs of known people https://github.com/ageitgey/face_recognition/blob/master/examples/recognize_faces_in_pictures.pypython人脸
好了,今天的分享就到這裡~
以上是離線辨識率高達 99% 的 Python 人臉辨識系統,開源~的詳細內容。更多資訊請關注PHP中文網其他相關文章!

Python在自動化、腳本編寫和任務管理中表現出色。 1)自動化:通過標準庫如os、shutil實現文件備份。 2)腳本編寫:使用psutil庫監控系統資源。 3)任務管理:利用schedule庫調度任務。 Python的易用性和豐富庫支持使其在這些領域中成為首選工具。

要在有限的時間內最大化學習Python的效率,可以使用Python的datetime、time和schedule模塊。 1.datetime模塊用於記錄和規劃學習時間。 2.time模塊幫助設置學習和休息時間。 3.schedule模塊自動化安排每週學習任務。

Python在遊戲和GUI開發中表現出色。 1)遊戲開發使用Pygame,提供繪圖、音頻等功能,適合創建2D遊戲。 2)GUI開發可選擇Tkinter或PyQt,Tkinter簡單易用,PyQt功能豐富,適合專業開發。

Python适合数据科学、Web开发和自动化任务,而C 适用于系统编程、游戏开发和嵌入式系统。Python以简洁和强大的生态系统著称,C 则以高性能和底层控制能力闻名。

2小時內可以學會Python的基本編程概念和技能。 1.學習變量和數據類型,2.掌握控制流(條件語句和循環),3.理解函數的定義和使用,4.通過簡單示例和代碼片段快速上手Python編程。

Python在web開發、數據科學、機器學習、自動化和腳本編寫等領域有廣泛應用。 1)在web開發中,Django和Flask框架簡化了開發過程。 2)數據科學和機器學習領域,NumPy、Pandas、Scikit-learn和TensorFlow庫提供了強大支持。 3)自動化和腳本編寫方面,Python適用於自動化測試和系統管理等任務。

兩小時內可以學到Python的基礎知識。 1.學習變量和數據類型,2.掌握控制結構如if語句和循環,3.了解函數的定義和使用。這些將幫助你開始編寫簡單的Python程序。

如何在10小時內教計算機小白編程基礎?如果你只有10個小時來教計算機小白一些編程知識,你會選擇教些什麼�...


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

SAP NetWeaver Server Adapter for Eclipse
將Eclipse與SAP NetWeaver應用伺服器整合。

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

Dreamweaver Mac版
視覺化網頁開發工具

ZendStudio 13.5.1 Mac
強大的PHP整合開發環境

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。