# 01、Python Dlib框架及人脸识别模型库
## 1、Dlib框架
Dlib是基于C++的一个跨平台通用的框架。Dlib内容涵盖机器学习、图像处理、数值算法、数据压缩等。Dlib提供了Python的接口,在Python中安装Dlib时要先安装cmake模块和scikit-image模块,由于在安装dlib模块过程中需要对C++代码进行编译,所以安装dlib模块前要先安装好Visual Studio 2015以后版本。
使用pip模块管理工具下载dlib框架的相关模块。
1)下载cmake模块
pip install cmake
2)下载scikit-image模块
pip install scikit-image
3)下载dlib模块
pip install dlib
## 2、人脸识别模型库
在本案例中,使用下面两个已经训练好的人脸识别模型进行项目设计。
1)人脸关键点检测模型
shape_predictor_68_face_landmarks.dat是通过机器学习已经训练好的人脸关键点检测器,使用这个模型,可以很方便地检测人的脸部,并计算出人脸的特征关键点。
2)人脸识别模型
dlib_face_recognition_resnet_model_v1.dat是已经训练好的ResNet(Residual Neural Network)人脸识别模型。ResNet是一种经机器学习训练出152层的神经网络,称为残差网络,它可以加速神经网络的训练,模型的准确率也很高。
人脸检测模型和人脸识别模型的下载地址为 http://dlib.net/files/。
# 02、人脸检测
## 1、人脸脸部检测
下面介绍应用人脸检测模型进行人脸检测的程序设计方法。
【例1】 找出图像中的正向人脸,并用方框标识出来。
应用已经训练好的人脸检测模型,进行人脸检测,构建人脸外部矩形框,其核心语句为:
js detector = dlib.get_frontal_face_detector() shape = predictor(img, 1)
程序设计步骤如图1所示。
■ 图1 人脸检测主要步骤
程序代码如下:
js import dlib from skimage import io # 使用 Dlib 的正面人脸检测器 frontal_face_detector detector = dlib.get_frontal_face_detector() # Dlib 的人脸检测模型 predictor = dlib.shape_predictor("shape_predictor_68_face_landmarks.dat") # 图片所在路径 img = io.imread("x3.jpg") # 生成 Dlib 的图像窗口 win = dlib.image_window() win.set_image(img) # 使用 detector 检测器来检测图像中的人脸 faces = detector(img, 1) print("人脸数:", len(faces)) for i, d in enumerate(faces): print("第", i+1, "个人脸的矩形框坐标:", "left:", d.left(), "right:", d.right(), "top:", d.top(), "bottom:", d.bottom()) # 绘制人脸脸部矩形框 win.add_overlay(faces) # 保持图像 dlib.hit_enter_to_continue()
运行程序,可以输出每个人脸的脸部轮廓矩形框的坐标值,并在图片上绘制方框图形。检测单人及多人正面脸部的结果如图2所示。
■ 图2 检测正面脸部
shape_predictor_68_face_landmarks.dat是一个检测人脸68个关键点的检测器,应用这个模型,可以很方便地计算出人脸的特征关键点,并绘制出脸部轮廓。
提取脸部轮廓的核心语句为:
shape = predictor(img, faces[i]) # 计算脸部轮廓关键点的位置
win.add_overlay(shape) # 绘制脸部轮廓线