【计算机视觉40例】案例34:勾勒五官轮廓

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

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

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

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

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

通过人脸的关键点,我们可以勾勒出人脸的轮廓,如图1所示。在这里,我们分别使用连接线和绘制凸壳轮廓来表示人脸。

[En]

Through the key points of the face, we can outline the facial features of the face as shown in figure 1. Here, we use connecting lines and drawing convex hull contours for human faces respectively.

【计算机视觉40例】案例34:勾勒五官轮廓

图1 运行结果

1 绘制连接线条

针对脸颊、眉毛、鼻子等面部特征,直接采用关键点连接的方式连接关键点,形成其近似轮廓。具体步骤如下:

[En]

Aiming at the facial features such as cheek, eyebrow and nose, the way of connecting the key points is directly used to connect the key points to form its approximate outline. The specific steps are as follows:

步骤1 获取当前五官所对应的关键点集。即获取当前五官的关键点从哪个索引开始,到哪个索引结束。例如,脸颊的关键点索引从0开始到16结束。

步骤2 在关键点集合中索引相邻的两个关键点之间绘制直线,将相邻的关键点连接。例如,在构造脸颊轮廓时,分别将相邻的关键点使用直线连接,即可得到脸颊的轮廓。

根据上述思路,构造函数drawLine绘制五官对应的轮廓,具体如下:

def drawLine(start,end):    pts = shape[start:end]    # 获取点集    # 遍历点集,将各个点用直线连接起来    for l in range(1, len(pts)):        ptA = tuple(pts[l - 1])        ptB = tuple(pts[l])        cv2.line(image, ptA, ptB, (0, 255, 0), 2)

2 绘制凸包轮廓

对眼睛、嘴巴等闭合区域构造凸壳,并绘制相应的轮廓。基本步骤如下:

[En]

The convex hull is constructed for the closed areas such as eyes and mouth, and the corresponding contours are drawn. The basic steps are as follows:

步骤 1 获取某个特定五官所对应的关键点索引集。例如,左眼所对应的关键点集是索引从42到47的各个关键点所构成的。

步骤 2 根据关键点集,获取当前五官的凸包。

步骤 3 根据凸包,绘制当前五官的轮廓。

根据上述思路,构造函数drawConvexHull,具体如下:

def drawConvexHull(start,end):    # 获取某个特定五官的点集    Facial = shape[start:end]    # 针对该五官构造凸包    mouthHull = cv2.convexHull(Facial)    # 把凸包轮廓绘制出来    cv2.drawContours(image, [mouthHull], -1, (0, 255, 0), 2)

当然,眼睛和嘴巴也可以通过直线画出来。但是,对于颜色填充等设置,使用凸面外壳绘制轮廓更为方便。

[En]

Of course, eyes and mouth can also be drawn through straight lines. However, it is more convenient for settings such as color filling to draw contours with convex hulls.

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

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

【计算机视觉40例】案例34:勾勒五官轮廓

Original: https://blog.51cto.com/u_6263569/5576623
Author: superdont
Title: 【计算机视觉40例】案例34:勾勒五官轮廓

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/508313/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球