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


    导读】本文是专栏《计算机视觉40例简介》的第34个案例《勾勒五官轮廓》。该专栏简要介绍李立宗主编《计算机视觉40例——从入门到深度学习(OpenCV-Python)》一书的40个案例。

    目前,该书已经在电子工业出版社出版,大家可以在京东、淘宝、当当等平台购买。

    大家可以在公众号“计算机视觉之光”回复关键字【案例34】获取本文案例的源代码及使用的测试图片等资料。

    针对本书40个案例的每一个案例,分别录制了介绍视频。如果嫌看文字版麻烦,可以关注公众号“计算机视觉之光”直接观看视频介绍版。

    本文简要介绍了本案例的一些基础知识,更详细的理论介绍、代码实现等内容请参考《计算机视觉40例简介》第27章《dlib》以获取更详细信息。

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

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

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

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

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

    通过人脸的关键点,可以勾勒出人脸的五官如图1所示。这里,我们针对人脸分别使用连接线条和绘制凸包轮廓处理。

     

    1  运行结果

    1 绘制连接线条

    针对脸颊、眉毛、鼻子等五官,直接采用连接关键点方式,将关键点连接起来构成其大致轮廓。具体步骤如下:

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

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

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

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

    2 绘制凸包轮廓

    针对眼睛、嘴等封闭区域构造凸包,并绘制其对应的轮廓。基本步骤如下:

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

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

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

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

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

    当然,眼睛、嘴也可以用通过直线绘制。但是,使用凸包绘制轮廓,更方便进行颜色填充等设置。

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

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

     

  • 相关阅读:
    JVM | 命令行诊断与调优 jhsdb jmap jstat jps
    sql注入(7), python 实现盲注爆破数据库名, 表名, 列名
    Python算法——树的直径
    java学习第209天,第四部分学习第9天,Linux学习第9天,p91-106(0911)-8h
    微服务架构详解
    3D基础:Y-Up和Z-Up
    大数据编程实验一:HDFS常用操作和Spark读取文件系统数据
    SpringCloud -Gateway
    K8s: 部署 kubernetes dashboard
    信贷反欺诈场景中策略与模型的搭建|实操一大反欺诈模型
  • 原文地址:https://blog.csdn.net/superdont/article/details/126299870