[face_recognition中文文檔] 第1節 人臉識別

Face Recognition人臉識別庫

這是世界上最簡單的人臉識別庫了。你能夠經過Python引用或者命令行的形式使用它,來管理和識別人臉。 該軟件包使用dlib中最早進的人臉識別深度學習算法,使得識別準確率在《Labled Faces in the world》測試基準下達到了99.38%。 它同時提供了一個叫face_recognition的命令行工具,以便你能夠用命令行對一個文件夾中的圖片進行識別操做。html

特徵

在圖片中識別人臉

找到圖片中全部的人臉:python

示例圖1

import face_recognition
image=face_recognition.load_image_file("your_file.jpg")
face_locations=face_recognition.face_locations(image)

找到並操做圖片中的臉部特徵

得到圖片中人類眼睛、鼻子、嘴、下巴的位置和輪廓:git

示例圖2

import face_recognition
image = face_recognition.load_image_file("your_file.jpg")
face_landmarks_list = face_recognition.face_landmarks(image)

找到臉部特徵有不少超級有用的應用場景,固然你也能夠把它用在最顯而易見的功能上:美顏功能 就像美圖秀秀那樣github

示例圖3

鑑定圖片中的臉

識別圖片中的人是誰web

示例圖4

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)

你甚至能夠用這個軟件包作人臉的實時識別:算法

示例圖5

這裏有一個實時識別的例子docker

安裝

環境要求:

  • Python3.3+或者Python2.7
  • MacOS或者Linux(Windows不作支持,可是你能夠試試,也許也能運行)

安裝步驟

在Mac或Linux上安裝

首先,確保你安裝了dlib,以及該軟件的Python綁定接口。若是沒有的話,看這篇安裝說明:緩存

而後,使用pip3(Python 2的pip2)從pypi安裝此模塊:cookie

pip3 install face_recognition

若是你安裝遇到問題,能夠試試這個安裝好了的虛擬機網絡

在樹莓派2+上安裝

在Windows上安裝

雖然Windows不是官方支持的,可是有熱心網友寫出了一個Windows上的使用指南,請看這裏:

使用已經配置好的虛擬機(支持VMWare和VirtualBox)

使用方法

命令行界面

若是你已經安裝了face_recognition,那麼你的系統中已經有了一個名爲face_recognition的命令,你可使用它對圖片進行識別,或者對一個文件夾中的全部圖片進行識別。 首先你須要提供一個文件夾,裏面是全部你但願系統認識的人的圖片。其中每一個人一張圖片,圖片以人的名字命名:

示例圖6

接下來,你須要準備另外一個文件夾,裏面是你要識別的圖片:

示例圖7

而後你就能夠運行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

Python模塊

你能夠經過導入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!")

這裏是一個例子,試試看。

Python代碼示例

全部的例子都在這裏

人臉檢測

面部特徵

面部識別

人臉識別如何運做

若是你想了解臉部位置和識別如何工做,而不是取決於黑匣子庫,請閱讀個人文章

注意事項

  • 面部識別模型是針對成年人進行培訓的,對兒童的工做效果不佳。它傾向於使用默認比較閾值0.6來混合孩子很容易。

部署到雲端主機(Heroku,AWS等)

因爲face_recognition取決於使用dlibC ++編寫的內容,將其用於雲端託管服務商,如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

謝謝

  • 很是感謝戴維斯·金@nulhom)建立dlib並提供訓練有素的面部特徵檢測和此庫中使用的臉部編碼模型。有關ResNet上有關面部編碼的更多信息,請查看他的博文
  • 感謝全部在Python數據科學圖書館工做的全部人,如data,scipy,scikit-image,pillow等,使得這種東西在Python中如此簡單而有趣。
  • 感謝Cookiecutteraudreyr / cookiecutter-pypackage項目模板,使Python項目打包方式更有效率。
相關文章
相關標籤/搜索