• 【计算机视觉40例】案例35:人脸对齐


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

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

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

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

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

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

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

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

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

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

    人脸对齐的任务是识别数字图像中人脸的几何结构,并尝试通过平移、缩放和旋转获得人脸的规范对齐。本文,我们通过Dlib实现人脸对齐。在使用Dlib实现人脸对齐时,直接调用相关函数即可,具体流程如下:

    步骤1:初始化

    1. # 构造检测器
    2. detector = dlib.get_frontal_face_detector()
    3. # 检测人脸框
    4. faceBoxs = detector(img, 1)
    5. # 载入模型
    6. predictor  = dlib.shape_predictor('shape_predictor_68_face_landmarks.dat')

    步骤2:获取人脸框集合

    1. 将步骤1中所获取的人脸框集合faceBoxs中的每个人脸框,逐个放入容器faces中。
    2. faces = dlib.full_object_detections()   #构造容器
    3. for faceBox in faceBoxs:
    4.     faces.append(predictor(img, faceBox))  #把每个人的人脸框放入容器faces内

    步骤3:根据原始图像、人脸关键点获取人脸对齐结果

    调用函数get_face_chips完成对人脸图像的对齐(倾斜校正)。

    faces = dlib.get_face_chips(img, faces, size=120)

    步骤4:将获取的每一个人脸显示出来

    通过循环,将faces中的每一张人脸进行可视化展示。

    1. n = 0       # 用变量n给识别的人脸按顺序编号
    2. # 显示每一个人脸
    3. for face in faces:
    4.     n+=1
    5.     face = np.array(face).astype(np.uint8)
    6.     cv2.imshow('face%s'%(n), face)

    根据上述步骤编写程序,运行程序,运行结果如图1所示,左侧是原始图像,右侧是从中提取出来的8张人脸。

    图1 运行结果

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

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

     

  • 相关阅读:
    基于Spring Boot应用Java的Stream流API
    coco2017数据集COCO格式转YOLO格式
    Spring系列文章:Spring事务
    [附源码]JAVA毕业设计敬老院管理系统(系统+LW)
    MySQL学习笔记1
    index.vue?3ae6:112 Uncaught TypeError: this.$message is not a function
    十年开发老手,深度解析企业用人标准为何越来越高?!
    cookie详解
    STM32F4X UCOSIII软件定时器
    leetcode896:单调数列
  • 原文地址:https://blog.csdn.net/superdont/article/details/126300274