wangyaqi 2019-11-27
前期文章我们分享了如何使用python与dlib来进行人脸识别,本期我们就来更细的来了解一下人脸识别的内容
如下图,dlib人脸数据把人脸分成了68个数据点,从图片可以看出,人脸识别主要是识别:人眉,人眼,人鼻,人嘴以及人脸下颚边框,每个人脸的部位都有不同的数据标签从1-68
当我们识别出人脸的这68个点,可以通过访问不同的数据点来检测到人脸的部分数据
通过访问不同的数据点,来进行人脸上的部位检测
我们可以建立一个数组来访问不同的人脸部分
FACIAL_LANDMARKS_IDXS = OrderedDict([
("mouth", (48, 68)),
("right_eyebrow", (17, 22)),
("left_eyebrow", (22, 27)),
("right_eye", (36, 42)),
("left_eye", (42, 48)),
("nose", (27, 35)),
("jaw", (0, 17))
])
第三方库from imutils import face_utils中的face_utils已经集成了人脸部分的数据以及格式化代码,我们可以直接来使用它来进行人脸部分的检测
· 导入我们所需的Python包(第1-5行)
· 实例化dlib 面部检测器并加载面部界标预测器(第8行和第10行)。
· 加载和预处理我们的输入图像(第13-17行)。
·
· 在输入图像中检测人脸(第20行)
· 循环检测到的人脸,格式化人脸数据(第22-26行)
· 循环人脸部分,把人脸部分的标签显示在图片上(29-34行)
·
单独显示人脸部分的数据点(37-38行)
提取人脸部分的图片来进行显示(41-43行)
最后显示图片
通过以上的代码循环,可以来检测人脸部分,首先检查到的是人嘴,如下图
然后是左右眉毛
然后是左右人眼
然后是人鼻子
最后是人脸的边框
人脸检测完成后使用mask来进行人脸的显示
使用mask来进行人脸部分的显示(51-53行)
通过以上步骤,我们便可以分别检测到人脸的部分地方,当然也可以检测到人眼,在人脸识别中,有一个比较困难的地方便是如何区分这个人脸是一个人正常的或者说不是一个照片,以免别人拿到照片也可对人脸进行检测,我们使用支付宝或者微信时,进行人脸识别时,有时候要求进行眨眼睛,通过此方法便可以有效的识别不是人脸照片,如何进行人脸的眨眼睛,我们后期分享