這是世界上最簡單的人臉識別庫了。你能夠經過Python引用或者命令行的形式使用它,來管理和識別人臉。 該軟件包使用dlib中最早進的人臉識別深度學習算法,使得識別準確率在《Labled Faces in the world》測試基準下達到了99.38%。 它同時提供了一個叫face_recognition的命令行工具,以便你能夠用命令行對一個文件夾中的圖片進行識別操做。html
找到圖片中全部的人臉:python
import face_recognition image=face_recognition.load_image_file("your_file.jpg") face_locations=face_recognition.face_locations(image)
得到圖片中人類眼睛、鼻子、嘴、下巴的位置和輪廓:git
import face_recognition image = face_recognition.load_image_file("your_file.jpg") face_landmarks_list = face_recognition.face_landmarks(image)
找到臉部特徵有不少超級有用的應用場景,固然你也能夠把它用在最顯而易見的功能上:美顏功能 就像美圖秀秀那樣:github
識別圖片中的人是誰web
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)
你甚至能夠用這個軟件包作人臉的實時識別:算法
這裏有一個實時識別的例子docker
首先,確保你安裝了dlib,以及該軟件的Python綁定接口。若是沒有的話,看這篇安裝說明:緩存
而後,使用pip3
(Python 2的pip2
)從pypi安裝此模塊:cookie
pip3 install face_recognition
若是你安裝遇到問題,能夠試試這個安裝好了的虛擬機網絡
雖然Windows不是官方支持的,可是有熱心網友寫出了一個Windows上的使用指南,請看這裏:
若是你已經安裝了face_recognition,那麼你的系統中已經有了一個名爲face_recognition的命令,你可使用它對圖片進行識別,或者對一個文件夾中的全部圖片進行識別。 首先你須要提供一個文件夾,裏面是全部你但願系統認識的人的圖片。其中每一個人一張圖片,圖片以人的名字命名:
接下來,你須要準備另外一個文件夾,裏面是你要識別的圖片:
而後你就能夠運行face_recognition命令了,把剛剛準備的兩個文件夾做爲參數傳入,命令就會返回須要識別的圖片中都出現了誰:
$ face_recognition ./pictures_of_people_i_know/ ./unknown_pictures/ /unknown_pictures/unknown.jpg,Barack Obama /face_recognition_test/unknown_pictures/unknown.jpg,unknown_person
輸出中,識別到的每張臉都單獨佔一行,輸出格式爲<圖片名稱>,<人名>。 unknown_person 是一個與你的文件夾的已知人圖像不匹配的人物。
若是你正在爲同一我的得到多個比較,那可能就是這樣您的照片中的人看起來很是類似,容差值較低須要使臉部比較更嚴格。 你能夠用--tolerance
參數來作到這一點。默認容差值爲0.6,較低的數字使臉部比較更嚴格:
$ face_recognition --tolerance 0.54 ./pictures_of_people_i_know/ ./unknown_pictures/ /unknown_pictures/unknown.jpg,Barack Obama /face_recognition_test/unknown_pictures/unknown.jpg,unknown_person
若是要按順序查看每次計算出的面距要調整公差設置,可使用:--show-distancetrue
$ face_recognition --show-distance true ./pictures_of_people_i_know/ ./unknown_pictures/ /unknown_pictures/unknown.jpg,Barack Obama,0.378542298956785 /face_recognition_test/unknown_pictures/unknown.jpg,unknown_person,None
若是你只想知道每張照片中的人的名字,但不要關心文件名,你能夠這樣作:
$ face_recognition ./pictures_of_people_i_know/ ./unknown_pictures/ | cut -d ',' -f2 Barack Obama unknown_person
若是您有多個CPU內核的電腦,則能夠並行完成臉部識別。例如,若是您的系統有4個CPU內核,您能夠經過使用在相同的時間量內全部的CPU內核並行處理約4倍的圖像。 若是您使用的是Python 3.4或更新版本,請傳入參數:--cpus <number_of_cpu_cores_to_use> parameter
:
$ face_recognition --cpus 4 ./pictures_of_people_i_know/ ./unknown_pictures/
您還能夠傳入使用系統中的全部CPU內核。--cpus-1
你能夠經過導入face_recognition模塊來使用它,使用方式超級簡單,文檔在這裏API文件:
import face_recognition image = face_recognition.load_image_file("my_picture.jpg") face_locations = face_recognition.face_locations(image) # face_locations is now an array listing the co-ordinates of each face!
看看這個例子本身實踐一下,試試看。
你還能夠自定義替換人類識別的深度學習模型。
注意:想得到比較好的性能的話,你可能須要GPU加速(使用英偉達的CUDA庫)。因此編譯的時候你也須要開啓dlib的GPU加速選項。
import face_recognition image = face_recognition.load_image_file("my_picture.jpg") face_locations = face_recognition.face_locations(image, model="cnn") # face_locations is now an array listing the co-ordinates of each face!
你也能夠經過這個例子實踐一下,試試看。
若是你有不少圖片和GPU,你也能夠並行快速識別,看這篇文章。
import face_recognition image = face_recognition.load_image_file("my_picture.jpg") face_landmarks_list = face_recognition.face_landmarks(image) # face_landmarks_list is now an array with the locations of each facial feature in each face. # face_landmarks_list[0]['left_eye'] would be the location and outline of the first person's left eye.
試試這個例子,試試看。
import face_recognition picture_of_me = face_recognition.load_image_file("me.jpg") my_face_encoding = face_recognition.face_encodings(picture_of_me)[0] # my_face_encoding now contains a universal 'encoding' of my facial features that can be compared to any other picture of a face! unknown_picture = face_recognition.load_image_file("unknown.jpg") unknown_face_encoding = face_recognition.face_encodings(unknown_picture)[0] # Now we can see the two face encodings are of the same person with `compare_faces`! results = face_recognition.compare_faces([my_face_encoding], unknown_face_encoding) if results[0] == True: print("It's a picture of me!") else: print("It's not a picture of me!")
這裏是一個例子,試試看。
全部的例子都在這裏。
若是你想了解臉部位置和識別如何工做,而不是取決於黑匣子庫,請閱讀個人文章。
因爲face_recognition
取決於使用dlib
C ++編寫的內容,將其用於雲端託管服務商,如Heroku或AWS 部署應用程序可能很棘手。 爲了使事情更容易,這個repo中有一個Dockerfile示例,顯示如何在Docker容器中運行一個構建的應用程序face_recognition
。所以,您應該能夠部署支持Docker圖像的任何服務。
問題:使用face_recognition或運行示例時出現 Illegal instruction(coredumped)
解決方案:dlib
使用SSE4或AVX進行編譯,但您的CPU太舊,不支持。 您須要更改dlib
代碼後從新編譯這裏概述代碼更改。
問題:運行攝像頭示例時出現RuntimeError: Unsupported image type, must be 8bit gray or RGB image.
解決方案:您的網絡攝像機可能未正確使用OpenCV設置。在這裏尋找更多幫助。 問題:運行pip2 install face_recognition
時出現MemoryError
解決方案:face_recognition_models文件對於可用的緩存內存來講太大了。嘗試使用如下方法pip2 --no-cache-dir install face_recognition
來儘可能避免這個問題。
問題:AttributeError: 'module' object has no attribute 'face_recognition_model_v1'
解決方案:dlib
您安裝的版本太舊了。您須要19.7或更新版本。升級dlib
。
問題:AttributeError: 'Module' object has no attribute 'cnn_face_detection_model_v1'
解決方案:dlib
您安裝的版本太舊了。您須要19.7或更新版本。升級dlib
。
問題:TypeError: imread() got an unexpected keyword argument 'mode'
解決方案:scipy
您安裝的版本太舊了。您須要版本0.17或更新版本。升級scipy
。