離線辨識率高達 99% 的 Python 人臉辨識系統,開源~
以往的人臉辨識主要是包含人臉影像擷取、人臉辨識預處理、身分確認、身分查找等技術和系統。現在人臉辨識已經慢慢延伸到了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中文網其他相關文章!

熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

熱門話題

MySQL 有免費的社區版和收費的企業版。社區版可免費使用和修改,但支持有限,適合穩定性要求不高、技術能力強的應用。企業版提供全面商業支持,適合需要穩定可靠、高性能數據庫且願意為支持買單的應用。選擇版本時考慮的因素包括應用關鍵性、預算和技術技能。沒有完美的選項,只有最合適的方案,需根據具體情況謹慎選擇。

HadiDB:輕量級、高水平可擴展的Python數據庫HadiDB(hadidb)是一個用Python編寫的輕量級數據庫,具備高度水平的可擴展性。安裝HadiDB使用pip安裝:pipinstallhadidb用戶管理創建用戶:createuser()方法創建一個新用戶。 authentication()方法驗證用戶身份。 fromhadidb.operationimportuseruser_obj=user("admin","admin")user_obj.

MySQL Workbench 可以連接 MariaDB,前提是配置正確。首先選擇 "MariaDB" 作為連接器類型。在連接配置中,正確設置 HOST、PORT、USER、PASSWORD 和 DATABASE。測試連接時,檢查 MariaDB 服務是否啟動,用戶名和密碼是否正確,端口號是否正確,防火牆是否允許連接,以及數據庫是否存在。高級用法中,使用連接池技術優化性能。常見錯誤包括權限不足、網絡連接問題等,調試錯誤時仔細分析錯誤信息和使用調試工具。優化網絡配置可以提升性能

直接通過 Navicat 查看 MongoDB 密碼是不可能的,因為它以哈希值形式存儲。取回丟失密碼的方法:1. 重置密碼;2. 檢查配置文件(可能包含哈希值);3. 檢查代碼(可能硬編碼密碼)。

無法連接 MySQL 可能是由於以下原因:MySQL 服務未啟動、防火牆攔截連接、端口號錯誤、用戶名或密碼錯誤、my.cnf 中的監聽地址配置不當等。排查步驟包括:1. 檢查 MySQL 服務是否正在運行;2. 調整防火牆設置以允許 MySQL 監聽 3306 端口;3. 確認端口號與實際端口號一致;4. 檢查用戶名和密碼是否正確;5. 確保 my.cnf 中的 bind-address 設置正確。

MySQL 可在無需網絡連接的情況下運行,進行基本的數據存儲和管理。但是,對於與其他系統交互、遠程訪問或使用高級功能(如復制和集群)的情況,則需要網絡連接。此外,安全措施(如防火牆)、性能優化(選擇合適的網絡連接)和數據備份對於連接到互聯網的 MySQL 數據庫至關重要。

MySQL數據庫性能優化指南在資源密集型應用中,MySQL數據庫扮演著至關重要的角色,負責管理海量事務。然而,隨著應用規模的擴大,數據庫性能瓶頸往往成為製約因素。本文將探討一系列行之有效的MySQL性能優化策略,確保您的應用在高負載下依然保持高效響應。我們將結合實際案例,深入講解索引、查詢優化、數據庫設計以及緩存等關鍵技術。 1.數據庫架構設計優化合理的數據庫架構是MySQL性能優化的基石。以下是一些核心原則:選擇合適的數據類型選擇最小的、符合需求的數據類型,既能節省存儲空間,又能提升數據處理速度

作為數據專業人員,您需要處理來自各種來源的大量數據。這可能會給數據管理和分析帶來挑戰。幸運的是,兩項 AWS 服務可以提供幫助:AWS Glue 和 Amazon Athena。
