Windows系统安装dlib及face_recognition搭建人脸识别环境

关于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)包安装前置需求

  1. 用于编译dlib的VC++编译器,参考资料2推荐Microsoft Visual Studio 2015及以上版本的VC编译器。
  2. Python3开发环境。
  3. Windows版CMake,并将路径添加到环境变量。
  4. 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

方法

说明

返回值

face_recognition.api.batch_face_locations(images, number_of_times_to_upsample=1, batch_size=128)

批量定位人脸位置

返回包含人脸位置的元组列表,人脸位置按css(上、右、下、左)顺序排列。

face_recognition.api.compare_faces(known_face_encodings, face_encoding_to_check, tolerance=0.6)

将特定的人脸编码和一个已知人脸编码列表进行对比

返回一个True/False值列表,用以表示哪些已知的人脸和特定的人脸匹配。

face_recognition.api.face_distance(face_encodings, face_to_compare)

人脸距离(欧几里得距离)

numpy ndarray,包含要对比的人脸和人脸数组中每个元素的距离。

face_recognition.api.face_encodings(face_image, known_face_locations=None, num_jitters=1, model='small')

人脸编码

128维度人脸编码列表。

face_recognition.api.face_landmarks(face_image, face_locations=None, model='large')

给出一张照片中每个人脸的特征部位(包括眼、鼻等)

人脸特征位置字典列表。

face_recognition.api.face_locations(img, number_of_times_to_upsample=1, model='hog')

查找人脸位置,返回图片中人脸的边界框数组

包含边界框信息的元组列表

face_recognition.api.load_image_file(file, mode='RGB')

加载图片到 .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,这一点有待验证。

参考资料

  1. Windows Installation Guide · Issue #175 · ageitgey/face_recognition (github.com)
  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Humbunklung

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值