什么是面部标记?
人脸标记点检测是形状预测问题的一个子集。给定一个输入图像(通常是一个指定感兴趣对象的ROI),形状预测器尝试沿形状定位感兴趣的关键点。
在人脸标记的背景下,我们的目标是使用形状预测方法检测人脸上的重要人脸结构。
因此,检测面部标记是一个两步过程:
步骤1:在图像中定位人脸。
步骤2:检测人脸ROI上的关键面部结构。
实现过程:第一步安装dlib
- 安装cmake,命令:pip install cmake
安装VS,选择C++的桌面开发和Python的桌面开发
给cl.exe配置环境变量
安装dlib:
git clone https://github.com/davisking/dlib.git
cd dlib
mkdir build
cd build
cmake .. -DDLIB_USE_CUDA=1 -DUSE_AVX_INSTRUCTIONS=1
cmake --build .
cd ..
python setup.py install --set USE_AVX_INSTRUCTIONS=1 --set DLIB_USE_CUDA=1
dlib的面部标记检测器
dlib库中预先训练的面部标记检测器用于估计映射到面部结构的68(x,y)坐标的位置。
68个坐标的索引可在下图中显示:
这些注释是68点iBUG 300-W数据集的一部分,dlib面部标记预测器是在该数据集上训练的。
用rects检测面部标志并转为Numpy数组
用shape将数字坐标绘制在图像上
图像
打开一个新文件,将其命名为facial_landmarks.py,然后插入以下代码:
导入所需的Python包和dlib。
解析命令行参数:
--shape-predictor:这是通往dlib预先训练的面部标记检测器的路径。你可以在这里下载检测器模型,也可以使用本文的“下载”部分来获取代码+示例图像+预先训练过的检测器。
--frame:要检测面部标记的输入图像的路径。
导入和命令行参数已经处理完毕,然后初始化dlib的面部检测器和面部标记预测器:
先检测输入图像的面部:
最后使用dlib面部标记将其输出。
测试结果:
打开终端输入:python facial_landmarks.py --shape-predictor shape_predictor_68_face_landmarks.dat --image ff.jpg
演示视频:
人脸检测