Face Recognition人臉識別庫
這是世界上最簡單的人臉識別庫了。你可以通過Python引用或者命令行的形式使用它,來管理和識別人臉。
該軟件包使用dlib中最先進的人臉識別深度學習算法擒抛,使得識別準確率在《Labled Faces in the world》測試基準下達到了99.38%推汽。
它同時提供了一個叫face_recognition的命令行工具,以便你可以用命令行對一個文件夾中的圖片進行識別操作歧沪。
特征
在圖片中識別人臉
找到圖片中所有的人臉:
import face_recognition
image=face_recognition.load_image_file("your_file.jpg")
face_locations=face_recognition.face_locations(image)
找到并操作圖片中的臉部特征
獲得圖片中人類眼睛歹撒、鼻子、嘴诊胞、下巴的位置和輪廓:
import face_recognition
image = face_recognition.load_image_file("your_file.jpg")
face_landmarks_list = face_recognition.face_landmarks(image)
找到臉部特征有很多超級有用的應用場景暖夭,當然你也可以把它用在最顯而易見的功能上:美顏功能 就像美圖秀秀那樣:
鑒定圖片中的臉
識別圖片中的人是誰
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)
你甚至可以用這個軟件包做人臉的實時識別:
這里有一個實時識別的例子
安裝
環(huán)境要求:
- Python3.3+或者Python2.7
- MacOS或者Linux(Windows不做支持,但是你可以試試厢钧,也許也能運行)
安裝步驟
在Mac或Linux上安裝
首先鳞尔,確保你安裝了dlib,以及該軟件的Python綁定接口早直。如果沒有的話寥假,看這篇安裝說明:
然后,使用pip3
(Python 2的pip2
)從pypi安裝此模塊:
pip3 install face_recognition
如果你安裝遇到問題霞扬,可以試試這個安裝好了的虛擬機
在樹莓派2+上安裝
在Windows上安裝
雖然Windows不是官方支持的糕韧,但是有熱心網友寫出了一個Windows上的使用指南,請看這里:
使用已經配置好的虛擬機(支持VMWare和VirtualBox)
- 下載預配置的虛擬機映像(適用于VMware Player或VirtualBox)喻圃。
使用方法
命令行界面
如果你已經安裝了face_recognition萤彩,那么你的系統(tǒng)中已經有了一個名為face_recognition的命令,你可以使用它對圖片進行識別斧拍,或者對一個文件夾中的所有圖片進行識別雀扶。
首先你需要提供一個文件夾,里面是所有你希望系統(tǒng)認識的人的圖片肆汹。其中每個人一張圖片愚墓,圖片以人的名字命名:
接下來,你需要準備另一個文件夾昂勉,里面是你要識別的圖片:
然后你就可以運行face_recognition命令了浪册,把剛剛準備的兩個文件夾作為參數(shù)傳入,命令就會返回需要識別的圖片中都出現(xiàn)了誰:
$ 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
參數(shù)來做到這一點库菲。默認容差值為0.6,較低的數(shù)字使臉部比較更嚴格:
$ 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內核的電腦梧却,則可以并行完成臉部識別奇颠。例如,如果您的系統(tǒng)有4個CPU內核放航,您可以通過使用在相同的時間量內所有的CPU內核并行處理約4倍的圖像烈拒。
如果您使用的是Python 3.4或更新版本,請傳入參數(shù):--cpus <number_of_cpu_cores_to_use> parameter
:
$ face_recognition --cpus 4 ./pictures_of_people_i_know/ ./unknown_pictures/
您還可以傳入使用系統(tǒng)中的所有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代碼示例
所有的例子都在這里晓锻。
人臉檢測
面部特征
面部識別
- 根據(jù)已知人的照片歌焦,查找并識別照片中的未知臉部
- 通過數(shù)字表面距離比較面部,而不是僅True / False匹配
- 使用您的網絡攝像頭識別實況視頻中的人臉 - 簡單/較慢版本(需要安裝OpenCV)
- 使用您的網絡攝像頭識別實況視頻中的人臉 - 更快的版本(需要安裝OpenCV)
- 識別視頻文件中的面孔并寫出新的視頻文件(需要安裝OpenCV)
- 識別Raspberry Pi w /相機的面孔
- 運行Web服務通過HTTP識別面孔(需要安裝Flask)
人臉識別如何運作
如果你想了解臉部位置和識別如何工作砚哆,而不是取決于黑匣子庫独撇,請閱讀我的文章。
注意事項
- 面部識別模型是針對成年人進行培訓的躁锁,對兒童的工作效果不佳纷铣。它傾向于使用默認比較閾值0.6來混合孩子很容易。
部署到云端主機(Heroku战转,AWS等)
由于face_recognition
取決于使用dlib
C ++編寫的內容搜立,將其用于云端托管服務商,如Heroku或AWS 部署應用程序可能很棘手槐秧。
為了使事情更容易啄踊,這個repo中有一個Dockerfile示例忧设,顯示如何在Docker容器中運行一個構建的應用程序face_recognition
。因此颠通,您應該可以部署支持Docker圖像的任何服務址晕。
常見問題
問題:使用face_recognition或運行示例時出現(xiàn) Illegal instruction(coredumped)
解決方案:dlib
使用SSE4或AVX進行編譯,但您的CPU太舊顿锰,不支持谨垃。
您需要更改dlib
代碼后重新編譯這里概述代碼更改。
問題:運行攝像頭示例時出現(xiàn)RuntimeError: Unsupported image type, must be 8bit gray or RGB image.
解決方案:您的網絡攝像機可能未正確使用OpenCV設置硼控。在這里尋找更多幫助刘陶。
問題:運行pip2 install face_recognition
時出現(xiàn)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)創(chuàng)建dlib并提供訓練有素的面部特征檢測和此庫中使用的臉部編碼模型饵史。有關ResNet上有關面部編碼的更多信息,請查看他的博文胜榔。
- 感謝所有在Python數(shù)據(jù)科學圖書館工作的所有人胳喷,如data,scipy夭织,scikit-image吭露,pillow等,使得這種東西在Python中如此簡單而有趣尊惰。
- 感謝Cookiecutter和audreyr / cookiecutter-pypackage項目模板讲竿,使Python項目打包方式更有效率。