项目介绍
人脸识别
从Python或命令行中识别和操作面部
世界上最简单的人脸识别库。
使用dlib的最新人脸识别功能构建
建立在深度学习之上。该模型的精度为99.38%。
Wild 基准中的标记面孔。
这也提供了一个简单的face_recognition命令行工具,
您可以通过命令行在图像文件夹上进行人脸识别!
特征
在图片中查找面孔
查找出现在图片中的所有面孔:
import face_recognition
image = face_recognition.load_image_file(“your_file.jpg”)
face_locations = face_recognition.face_locations(image)
查找和操纵图片中的面部特征
获取每个人的眼睛,鼻子,嘴巴和下巴的位置和轮廓。
图4
import face_recognition
image = face_recognition.load_image_file(“your_file.jpg”)
face_landmarks_list = face_recognition.face_landmarks(image)
查找面部特征对于许多重要的东西超级有用。但是您也可以使用真正愚蠢的东西
像使用数码彩妆 (想想“美图”):
图片5
识别图片中的面孔
识别出现在每张照片中的人。
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)
您甚至可以将此库与其他Python库一起使用以进行实时人脸识别:
image7
有关 https://github.com/ageitgey/face_recognition/blob/master/examples/facerec_from_webcam_faster.py代码,请参见此示例。
安装
要求
Python 3.3+或Python 2.7
macOS或Linux(Windows不受官方支持,但可能可以使用)
在Mac或Linux上安装
首先,确保已经安装了带有Python绑定的dlib:
如何在macOS或Ubuntu上从源代码安装dlib
https://gist.github.com/ageitgey/629d75c1baac34dfa5ca2a1928a7aeaf
然后,使用安装一封来自PyPI此模块PIP3(或PIP2用于Python 2):
pip3安装face_recognition
如果您在安装时遇到问题,也可以尝试
https://medium.com/@ageitgey/try-deep-learning-in-python-now-with-a-fully-pre-configured-vm-1d97d4c3e9b
预先配置的VM。
在Raspberry Pi 2+上安装
https://gist.github.com/ageitgey/1ac8dbe8572f3f533df6269dab35df65
Raspberry Pi 2+安装说明
在Windows上安装
虽然不正式支持Windows,但有帮助的用户已经发布了有关如何安装此库的说明:
@masoudr的Windows 10安装指南(dlib + face_recognition)
安装预配置的虚拟机映像
https://github.com/ageitgey/face_recognition/issues/175#issue-257710508
下载预配置的VM映像 (用于VMware Player或VirtualBox)。
https://medium.com/@ageitgey/try-deep-learning-in-python-now-with-a-fully-pre-configured-vm-1d97d4c3e9b
用法
命令行界面
安装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-公差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-distance true:
$ 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,无
更多例子
如果您只是想知道每张照片中的人物姓名,但不知道
关心文件名,您可以这样做:
$ face_recognition ./pictures_of_people_i_know/ ./unknown_pictures/ | 切-d ‘,’- f2
巴拉克奥巴马
不明身份的人
加快人脸识别
如果您的计算机具有以下功能,则可以并行完成人脸识别
多个CPU内核。例如,如果您的系统具有4个CPU内核,则可以
通过使用,可以在相同的时间内处理大约4倍的图像
您所有的CPU内核都是并行的。
如果您使用的是Python 3.4或更高版本,请传递 --cpus
$ face_recognition --cpus 4 ./pictures_of_people_i_know/ ./unknown_pictures/
您也可以传入–cpus -1以使用系统中的所有CPU内核。
Python模块
您可以导入face_recognition模块,然后轻松进行操作
只需几行代码即可完成。超级容易!
API文档:https : //face-recognition.readthedocs.io。
自动查找图像中的所有面孔
导入 face_recognition
图片 = face_recognition.load_image_file (“my_picture.jpg” )
face_locations = face_recognition.face_locations (图片)
#face_locations现在是一个数组,列出了每个面孔的坐标!
看这个例子https://github.com/ageitgey/face_recognition/blob/master/examples/find_faces_in_picture.py
试试看。
您还可以选择使用更为精确的基于深度学习的面部检测模型。
注意:GPU加速(通过nvidia的CUDA库)是必需的
该模型的性能。您还需要启用CUDA支持
编译dlib时。
导入 face_recognition
image = face_recognition.load_image_file (“my_picture.jpg” )
face_locations = face_recognition 。face_locations (image , model = “ cnn” )
#face_locations现在是一个数组,列出了每个面孔的坐标!
看这个例子
https://github.com/ageitgey/face_recognition/blob/master/examples/find_faces_in_picture_cnn.py
试试看。
如果您有很多图像和GPU,也可以
分批查找人脸。https://github.com/ageitgey/face_recognition/blob/master/examples/find_faces_in_batches.py
自动在图像中定位人的面部特征
import face_recognition
image = face_recognition.load_image_file(“my_picture.jpg”)
face_landmarks_list = face_recognition.face_landmarks(image)
看这个例子
https://github.com/ageitgey/face_recognition/blob/master/examples/find_facial_features_in_picture.py
试试看。
识别图像中的人脸并确定他们是谁
import face_recognition
picture_of_me = face_recognition.load_image_file(“me.jpg”)
my_face_encoding = face_recognition.face_encodings(picture_of_me)[0]
unknown_picture = face_recognition.load_image_file(“unknown.jpg”)
unknown_face_encoding = face_recognition.face_encodings(unknown_picture)[0]
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!”)
看这个例子
https://github.com/ageitgey/face_recognition/blob/master/examples/recognize_faces_in_pictures.py
试试看。
Python代码示例
所有示例均 在此处提供。https://github.com/ageitgey/face_recognition/tree/master/examples
人脸检测
在照片中查找面孔
https://github.com/ageitgey/face_recognition/blob/master/examples/find_faces_in_picture.py
在照片中查找面孔(使用深度学习)
https://github.com/ageitgey/face_recognition/blob/master/examples/find_faces_in_picture_cnn.py
使用GPU批量查找人脸图像(使用深度学习)
https://github.com/ageitgey/face_recognition/blob/master/examples/find_faces_in_batches.py
面部特征
识别照片中的特定面部特征
https://github.com/ageitgey/face_recognition/blob/master/examples/find_facial_features_in_picture.py
涂抹(极其丑陋)数码化妆
https://github.com/ageitgey/face_recognition/blob/master/examples/digital_makeup.py
面部识别
根据已知人物的照片查找和识别照片中的未知面孔
https://github.com/ageitgey/face_recognition/blob/master/examples/recognize_faces_in_pictures.py
通过数字面部距离比较面部,而不是仅通过True / False匹配
https://github.com/ageitgey/face_recognition/blob/master/examples/face_distance.py
使用网络摄像头识别实时视频中的人脸-简单/较慢的版本(需要安装OpenCV)
https://github.com/ageitgey/face_recognition/blob/master/examples/facerec_from_webcam.py
使用网络摄像头识别实时视频中的人脸-更快的版本(需要安装OpenCV)
https://github.com/ageitgey/face_recognition/blob/master/examples/facerec_from_webcam_faster.py
识别视频文件中的面孔并写出新的视频文件(需要安装OpenCV)
https://github.com/ageitgey/face_recognition/blob/master/examples/facerec_from_video_file.py
在带有相机的Raspberry Pi上识别脸部
https://github.com/ageitgey/face_recognition/blob/master/examples/facerec_on_raspberry_pi.py
运行Web服务以通过HTTP识别人脸(需要安装Flask)
https://github.com/ageitgey/face_recognition/blob/master/examples/web_service_example.py
使用K近邻分类器识别人脸
https://github.com/ageitgey/face_recognition/blob/master/examples/face_recognition_knn.py
人脸识别的工作原理
如果您想了解人脸定位和识别的工作原理而不是
取决于黑匣子库,请阅读我的文章。https://medium.com/@ageitgey/machine-learning-is-fun-part-4-modern-face-recognition-with-deep-learning-c3cffc121d78
注意事项
人脸识别模型是针对成人训练的,对儿童而言效果不佳。使用默认比较阈值0.6时,往往会很容易混淆孩子。
部署到云主机(Heroku,AWS等)
由于face_recognition依赖于用C ++编写的dlib,因此部署应用程序可能很棘手
使用它到诸如Heroku或AWS的云托管提供商。
为了使事情变得更简单,此仓库中有一个示例Dockerfile(https://www.docker.com/),该示例显示了如何运行使用
face_recognition在泊坞 容器。这样,您应该可以部署
到支持Docker映像的任何服务。
常见问题
问题:使用face_recognition或运行示例时,指令无效(内核已转储)。
解决方案:dlib是使用SSE4或AVX支持编译的,但是您的CPU太旧并且不支持它。
在完成此处概述的代码更改之后,您将需要重新编译dlib。https://github.com/ageitgey/face_recognition/issues/11#issuecomment-287398611
问题: RuntimeError:不支持的图像类型,必须为8位灰度或RGB图像。 在运行网络摄像头示例时。
解决方案:您的网络摄像头可能未使用OpenCV正确设置。在这里查看更多。https://github.com/ageitgey/face_recognition/issues/21#issuecomment-287779524
问题:运行pip2 install face_recognition时出现MemoryError
解决方案:face_recognition_models文件太大,无法使用可用的点缓存。代替,
尝试使用pip2 --no-cache-dir安装face_recognition可以避免此问题。
问题: AttributeError:‘模块’对象没有属性’face_recognition_model_v1’
解决方案:您安装的dlib版本太旧。您需要版本19.7或更高版本。升级dlib。
问题: 属性错误:“模块”对象没有属性“ cnn_face_detection_model_v1”
解决方案:您安装的dlib版本太旧。您需要版本19.7或更高版本。升级dlib。
问题:TypeError:imread()获得了意外的关键字参数’mode’
解决方案:您安装的scipy版本太旧。您需要版本0.17或更高版本。升级秘诀。