三微授渔|Python超级教程,使用Python进行检测面部特征



三微授渔|Python超级教程,使用Python进行检测面部特征
本文插图

今天 , 我们将学习如何使用图像来检测面部并提取诸如眼睛 , 鼻子 , 嘴巴等面部特征 。 作为捕捉面部的预处理步骤 , 我们可以做很多令人难以置信的事情 , 例如捕捉面部用于标记照片中的人物(手动或通过机器学习) , 创建效果以“增强”我们的图像(类似于Snapchat等应用中的图像) , 对面部进行情感分析等等 。
在过去 , 我已经介绍了如何使用OpenCV检测图像中的形状 , 但是今天 , 我们将通过引入DLib并从图像中提取面部特征将其提升到一个新的水平 。 Dlib是一个高级的机器学习库 , 旨在解决复杂的实际问题 。 该库是使用C ++编程语言创建的 , 并且可与C / C ++ , Python和Java一起使用 。 值得注意的是 , 本教程可能需要对OpenCV库有一些前提的了解 , 例如如何处理图像 , 打开相机 , 图像处理以及一些小技巧 。
1、它是如何工作的
【三微授渔|Python超级教程,使用Python进行检测面部特征】我们的脸部有几个可以识别的特征 , 例如我们的眼睛 , 嘴巴 , 鼻子等 。 当我们使用DLib算法检测这些特征时 , 实际上会得到围绕每个特征的点的地图 。 该地图由67个点(称为地标点)组成 , 可以标识以下特征:
三微授渔|Python超级教程,使用Python进行检测面部特征
本文插图

颚点= 0–16
右眉点= 17–21
左眉点= 22–26
鼻点= 27–35
右眼点= 36–41
左眼点= 42–47
口角= 48–60
嘴唇分数= 61–67
现在 , 我们对计划如何提取特征有所了解 , 让我们开始编码 。
2、安装要求
像往常一样 , 本文将提供带有代码的示例 , 我将逐步指导你实现面部特征识别的完整示例 。 但是在开始之前 , 你需要启动一个新的Python项目并安装3个不同的库:OpenCV的Python;dlib 。 如果你像我一样使用pipenv , 则可以使用以下命令安装所有它们:

三微授渔|Python超级教程,使用Python进行检测面部特征
本文插图

如果你使用的是Mac和某些版本的Linux , 则在安装dlib时可能会遇到一些问题 , 如果在安装过程中遇到编译错误 , 请确保检查使用的CMake库版本 。 在Mac中 , 确保你有可用的CMake , 并且可以使用正确的版本运行:

三微授渔|Python超级教程,使用Python进行检测面部特征
本文插图

对于其他操作系统 , 请在线检查以获得特定支持 。
步骤1:载入并显示图片
我们将从小处着手并以代码为基础 , 直到有一个可以正常工作的示例为止 。 通常 , 我喜欢使用绘图来渲染图像 , 但是由于我们在稍后的文章中准备了一些很酷的东西 , 因此我们将做一些不同的事情 , 并且我们将创建一个窗口来展示我们的工作结果 。 让我们跳入代码

三微授渔|Python超级教程,使用Python进行检测面部特征
本文插图

很简单 , 对吧?我们只是加载了具有未读图像 , 然后告诉OpenCV以Winname显示图像 , 这将打开窗口并为其命名 。 之后 , 我们需要暂停执行 , 因为脚本停止时窗口将被破坏 , 因此我们使用cv2.waitKey保持窗口直到按下某个键 , 然后销毁窗口并退出脚本 。 如果你使用该代码并将一个名为face.jpg的图像添加到代码目录中 , 则应获得如下内容:

三微授渔|Python超级教程,使用Python进行检测面部特征
本文插图

步骤2:人脸识别
到目前为止 , 除了将图像呈现到窗口中之外 , 我们还没有做其他任何事情 , 这很无聊 , 但是现在我们将开始对好东西进行编码 , 并且我们将从识别图像中有脸的位置开始 。 为此 , 我们将使用Dlib函数get_frontal_face_detector() , 非常直观 。 需要注意的是 , 此功能仅适用于灰度图像 , 因此我们必须首先使用OpenCV进行此操作 。


推荐阅读