【计算机视觉40例】案例33:绘制人脸关键点

网友投稿 301 2022-08-22

【计算机视觉40例】案例33:绘制人脸关键点

Dlib是一个现代工具包,包含机器学习算法和工具,用于在程序中构造软件来解决复杂的现实世界问题。它被工业界和学术界广泛应用于机器人、嵌入式设备、移动电话和大型高性能计算环境等领域。Dlib的开源许可允许用户在任何应用程序中免费使用它。

Dlib官网提供了非常翔实的资料,对它的函数有非常具体的使用说明。除此以外,Dlib官网还提供了大量的案例帮助我们快速掌握该工具的使用。

本章中,我们使用Dlib实现几个跟人脸识别相关的具有代表性的案例,具体如下:

定位人脸绘制关键点勾勒五官轮廓人脸对齐调用CNN实现人脸检测

本章中所使用的模型均可在Dlib官网下载。

在Dlib中,提供了dlib.shape_predictor对特定对象的关键点进行标注。例如,它能识别出重要人脸标志(如嘴角、眼角、鼻尖等)的关键点所在位置。它的输入是原始图像、及对象所在位置标记,输出是一组关键点信息。

使用Dlib获取人脸关键点的基本步骤如图1所示。

图1 获取关键点流程

分步骤说明如下:

Step 1:构造人脸检测器

detector = dlib.get_frontal_face_detector()

Step 2:检测人脸框(使用人脸检测器返回检测到的人脸框)

使用step 1中所构造的人脸检测器detector,检测指定图像内的人脸。其语法格式为:

faces=detector(image,n)

此时得到的faces是图像内所有的人脸所对应的方框。

Step 3:载入模型(加载预测器)

其语法结构为:

predictor = dlib.shape_predictor(模型文件)

在Dlib中存在着两个关键点模型,其中一个是具有5个关键点的模型,另外一个是具有68个关键点的模型。其中,5个关键点的模型,仅仅检测5个关键点,分别是每只眼睛的两个眼角(共4个关键点),以及两鼻孔中间的一个点。而68个关键点的模型可以检测到68个关键点,如图2所示。

图2 人脸关键点

通常,我们使用dlib内的68个关键点模型文件,其默认名称为“shape_predictor_68_face_landmarks.dat”。因此,载入模型的语句通常为:

predictor = dlib.shape_predictor("shape_predictor_68_face_landmarks.dat")

Step 4:获取每一张脸的关键点(实现检测)

针对一幅图像img,使用step 3中所构造的predictor对step 2中得到的人脸框集合中的每一张人脸进行关键点的检测。具体为:

shape = predictor(img, face)

式中,

返回值shape:返回68个关键点。参数img:要检测的可能含有人脸的灰度图像。参数face:单个人脸框(来源于step 2的结果faces中)。

Step 5:绘制每一张脸的关键点(绘制shape中的每个点)

该步骤中,需要将step 4中获得的关键点类型转换为(x,y)的坐标形式,再通过循环使用绘制圆形函数cv2.circle实现每一个关键点绘制。

该步骤对应代码如下:

landmarks = np.matrix([[p.x, p.y] for p in shape.parts()])

# 遍历每一个关键点

for idx, point in enumerate(landmarks):

pos = (point[0, 0], point[0, 1])  # 当前关键的坐标

# 针对当前关键点,绘制一个实心圆

cv2.circle(img, pos, 2, color=(0, 255, 0),thickness=-1)

font = cv2.FONT_HERSHEY_SIMPLEX      # 字体

# 利用cv2.putText输出1-68,索引序号加1,显示时从1开始。

cv2.putText(img, str(idx + 1), pos, font, 0.4,

(255, 255, 255), 1, cv2.LINE_AA)

按照上述步骤编写程序,运行结果如图3所示,它显示了人脸关键点及对应的序号。

图3 运行结果

在《计算机视觉40例——从入门到深度学习(OpenCV-Python)》第27章《dlib库》中详细介绍了定位人脸、绘制关键点、勾勒五官轮廓、人脸对齐、调用CNN实现人脸检测等案例。

《计算机视觉40例——从入门到深度学习(OpenCV-Python)》在介绍Python基础、OpenCV基础、计算机视觉理论基础、深度学习理论的基础上,介绍了计算机视觉领域内具有代表性的40个典型案例。这些案例中,既有传统的案例(数字识别、答题卡识别、物体计数、缺陷检测、手势识别、隐身术、以图搜图、车牌识别、图像加密、指纹识别等),也有深度学习案例(图像分类、风格迁移、姿势识别、实例分割等),还有人脸识别方面的案例(表情识别、驾驶员疲劳监测、识别性别与年龄等)。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Python定义函数的三种形式(Python中定义函数)
下一篇:人大金仓(KingBase)导出表结构
相关文章

 发表评论

暂时没有评论,来抢沙发吧~