关于face_recognition
face_recognition被称为世界上最简洁的人脸识别库,借助face_recognition库,我们可以使用Python和命令行提取、识别、操作人脸。
face_recognition的人脸识别是基于业内领先的C++开源库 dlib中的深度学习模型,用Labeled Faces in the Wild人脸数据集进行测试,有高达99.38%的准确率。但对小孩和亚洲人脸的识别准确率尚待提升。
PyPI地址:face-recognition · PyPI
github仓库地址:
ageitgey/face_recognition: The world's simplest facial recognition api for Python and the command line (github.com)
相关包安装
(1)包安装前置需求
- 用于编译dlib的VC++编译器,参考资料2推荐Microsoft Visual Studio 2015及以上版本的VC编译器。
- Python3开发环境。
- Windows版CMake,并将路径添加到环境变量。
- 1.63或更新版本的Boost库(用于旧版本的dlib,新版本的不需要),按照参考1,可以使用MSVC的预编译版本,但不推荐这样做。
(2)简易安装
pip install dlib
pip install face_recognition
(3)纯手动安装
按照参考资料1,可以按一下步骤手工安装:
1)下载并安装scipy和numpy+mkl(必须是mkl版本)包。
2)下载适配当前电脑MSVC版本的boost库源代码和二进制文件(下载链接)。
3)如果下载的是boost库的二进制文件,请直接跳到步骤4)。否则:
首先,解压Boost的源代码文件到本地目录,例如C:\local\boost_1_XX_X(X表示下载的Boost版本);
然后,创建如下参数的环境变量(以VC14为例):
变量名:VS140COMNTOOLS
变量值:C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\Tools\(或者是本地MSVC的路径)
最后,打开Visual Studio命令行窗口并进入Boost的解压目录,尝试使用如下命令编译Boost:
bootstrap
b2 -a --with-python address-model=64 toolset=msvc runtime-link=static
4)如果已编译Boost,请跳过这一步,否则,把下载到的Boost二进制文件解压至本地特定目录,如C:\local\boost_1_XX_X。
5)从仓库中获取并解压最新版的dlib。
6)进入dlib目录,打开命令行终端按如下步骤生成dlib(XX表示dlib版本号,实际操作时替换为具体的版本号):
set BOOST_ROOT=C:\local\boost_X_XX_X
set BOOST_LIBRARYDIR=C:\local\boost_X_XX_X\stage\lib
python setup.py install --yes USE_AVX_INSTRUCTIONS or python setup.py install --yes USE_AVX_INSTRUCTIONS --yes DLIB_USE_CUDA
7)到此,已经可以在Python脚本中导入dlib了:import dlib。
8)我们可以通过pip show dlib命令检查安装到Python环境里的dlib版本。
9)安装face_recognition:
pip install face_recognition
10)完成,可以用来开发了。
应用示例
(1)主要API
方法 | 说明 | 返回值 |
| 批量定位人脸位置 | 返回包含人脸位置的元组列表,人脸位置按css(上、右、下、左)顺序排列。 |
| 将特定的人脸编码和一个已知人脸编码列表进行对比 | 返回一个True/False值列表,用以表示哪些已知的人脸和特定的人脸匹配。 |
| 人脸距离(欧几里得距离) | numpy ndarray,包含要对比的人脸和人脸数组中每个元素的距离。 |
| 人脸编码 | 128维度人脸编码列表。 |
| 给出一张照片中每个人脸的特征部位(包括眼、鼻等) | 人脸特征位置字典列表。 |
| 查找人脸位置,返回图片中人脸的边界框数组 | 包含边界框信息的元组列表 |
| 加载图片到 (.jpg, .png等)numpy数组 | numpy array |
参考文档:
face_recognition package — Face Recognition 1.4.0 documentation (face-recognition.readthedocs.io)
(2)应用举例
import face_recognition
# 加载并编码个人照片
picture_of_the_man = face_recognition.load_image_file('obama.jpg')
the_man_face_encoding = face_recognition.face_encodings(picture_of_the_man)[0]
# 判断这个人是否在集体照中
picture_of_many_people = face_recognition.load_image_file('barack_obama_family.jpg')
people_encoding_list = face_recognition.face_encodings(picture_of_many_people)
# 人脸比对
result = face_recognition.compare_faces(people_encoding_list, the_man_face_encoding)
contains_this_man = False
for item in result:
contains_this_man = item
if contains_this_man == True:
break
if contains_this_man:
print('照片里有这个人')
else:
print('照片里没有这个人')
以上程序能在奥巴马一家合照中认出奥巴马。
注:程序识别过程有点慢,按照参考资料1的说法,face_recognition库在Windows上的性能仅有Ubuntu上的1/4,这一点有待验证。
参考资料
- Windows Installation Guide · Issue #175 · ageitgey/face_recognition (github.com)