原标题:Python超级教程,使用Python进行检测面部特征

今天,我们将学习如何使用图像来检测面部并提取诸如眼睛,鼻子,嘴巴等面部特征。作为捕捉面部的预处理步骤,我们可以做很多令人难以置信的事情,例如捕捉面部用于标记照片中的人物(手动或通过机器学习),创建效果以“增强”我们的图像(类似于Snapchat等应用中的图像),对面部进行情感分析等等。

在过去,我已经介绍了如何使用OpenCV检测图像中的形状,但是今天,我们将通过引入DLib并从图像中提取面部特征将其提升到一个新的水平。Dlib是一个高级的机器学习库,旨在解决复杂的实际问题。该库是使用C ++编程语言创建的,并且可与C / C ++,Python和Java一起使用。值得注意的是,本教程可能需要对OpenCV库有一些前提的了解,例如如何处理图像,打开相机,图像处理以及一些小技巧。

1、它是如何工作的

我们的脸部有几个可以识别的特征,例如我们的眼睛,嘴巴,鼻子等。当我们使用DLib算法检测这些特征时,实际上会得到围绕每个特征的点的地图。该地图由67个点(称为地标点)组成,可以标识以下特征:

颚点= 0–16

右眉点= 17–21

左眉点= 22–26

鼻点= 27–35

右眼点= 36–41

左眼点= 42–47

口角= 48–60

嘴唇分数= 61–67

现在,我们对计划如何提取特征有所了解,让我们开始编码。

2、安装要求

像往常一样,本文将提供带有代码的示例,我将逐步指导你实现面部特征识别的完整示例。但是在开始之前,你需要启动一个新的Python项目并安装3个不同的库:OpenCV的Python;dlib。如果你像我一样使用pipenv,则可以使用以下命令安装所有它们:

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

对于其他操作系统,请在线检查以获得特定支持。

步骤1:载入并显示图片

我们将从小处着手并以代码为基础,直到有一个可以正常工作的示例为止。通常,我喜欢使用绘图来渲染图像,但是由于我们在稍后的文章中准备了一些很酷的东西,因此我们将做一些不同的事情,并且我们将创建一个窗口来展示我们的工作结果。让我们跳入代码

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

步骤2:人脸识别

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

该get_frontal_face_detector()会返回一个detector就是我们可以用它来获取脸信息的功能。每个脸都是一个对象,其中包含可以找到图像的点。但是让我们更好地在代码上看到它:

上面的代码将从图像中检索所有面部,并在每个面部上渲染一个矩形,从而产生如下图像:

到目前为止,我们在发现人脸方面做得很好,但是我们仍然需要一些工作来提取所有特征(地标)。接下来让我们开始吧。

步骤3:识别人脸特征

到目前为止,DLib的工作方式一直非常神奇,仅用几行代码就可以实现很多目标,而现在我们有了一个全新的问题,它会继续变得如此容易吗?答案是肯定的!事实证明DLib提供了一个名为的功能shape_predictor(),它将为我们做所有的魔术,但需要注意的是,它需要一个预先训练的模型才能起作用。有几种可以使用的模型shape_predictor,可以在这里下载我正在使用的模型,但是也可以尝试其他模型。让我们看看新代码现在的样子

像以前一样,我们始终以相同的代码为基础,现在对每个人脸使用预测函数来查找界标。现在我仍然在做一些奇怪的事情,例如27号在做什么?

根据我们之前看到的图表,我们的预测函数将返回一个对象,其中包含与面部相符的所有68个点,如果你注意到它,则点27恰好在眼睛之间,因此,如果所有点都正确计算出,你应该像这样在眼睛之间看到一个绿色的点:

我们已经很接近了,现在让我们渲染所有的点,而不仅仅是一个点:

渲染结束:

如果你对所有脸面点都不感兴趣怎么办?你可以调整range时间间隔以获取上述词汇表中指定的任何功能,就像我在这里所做的那样:

步骤4:实时检测

下一步是连接我们的网络摄像头,并从你的视频流中进行实时地标识别。你可以通过使用相机遍历视频帧或使用视频文件来对面部进行实时面部标志检测。如果要使用自己的摄像机,请参考以下代码,但对于视频文件,请确保将数字0更改为视频路径。如果要结束窗口,请按键盘上的ESC键:

最终效果:

即使在光线不足的情况下,结果也相当准确,更好的照明效果则更完美。

结论

OpenCV和DLib是功能强大的库,可简化ML和计算机视觉的使用。今天,我们只是简单地介绍了基础知识,我还有很多东西要向他们学习。非常感谢您的阅读!返回搜狐,查看更多

责任编辑:

python检测屏幕图像_Python超级教程,使用Python进行检测面部特征相关推荐

  1. python复制列表元素_Python学习教程:Python列表赋值,复制,深拷贝及5种浅拷贝详解...

    Python学习教程:Python列表赋值,复制,深拷贝及5种浅拷贝详解 概述 在列表复制这个问题,看似简单的复制却有着许多的学问,尤其是对新手来说,理所当然的事情却并不如意,比如列表的赋值.复制.浅 ...

  2. 9.2.2 Python图像处理之图像数学形态学-二值形态学应用-目标检测

    9.2.2 Python图像处理之图像数学形态学-二值形态学应用-目标检测(击中与击不中) 文章目录 9.2.2 Python图像处理之图像数学形态学-二值形态学应用-目标检测(击中与击不中) 1 算 ...

  3. python中文编程教学_Python入门教程完整版400集(懂中文就能学会)快来带走

    2020最新Python零基础到精通资料教材,干货分享,新基础Python教材,看这里,这里有你想要的所有资源哦,最强笔记,教你怎么入门提升!让你对自己更加有信心,重点是资料都是免费的,免费!!! 如 ...

  4. python字符串函数运算_Python入门教程2. 字符串基本操作【运算、格式化输出、常用函数】 原创...

    前面简单介绍了python基本运算,这里再来简单讲述一下Python字符串相关操作 1. 字符串表示方法 >>> "www.jb51.net" #字符串使用单引号 ...

  5. python 正则表达式提取数据_Python爬虫教程-19-数据提取-正则表达式(re)

    本篇主页内容:match的基本使用,search的基本使用,findall,finditer的基本使用,匹配中文,贪婪与非贪婪模式 Python爬虫教程-19-数据提取-正则表达式(re) 正则表达式 ...

  6. python学生名片系统_Python入门教程完整版400集(懂中文就能学会)快来带走

    如何入门Python?权威Python大型400集视频,学了Python可以做什么? 小编今天给大家分享一套高老师的python400集视频教程,里面包含入门进阶,源码,实战项目等等,,不管你是正在学 ...

  7. python sorted下标_Python学习教程(Python学习路线):第七天-字符串和常用数据结构

    Python学习教程(Python学习路线):字符串和常用数据结构 使用字符串 第二次世界大战促使了现代电子计算机的诞生,当初的想法很简单,就是用计算机来计算导弹的弹道,因此在计算机刚刚诞生的那个年代 ...

  8. python编程思维代码_Python编程快速上手——强口令检测算法案例分析

    本文实例讲述了Python强口令检测算法.分享给大家供大家参考,具体如下: 强口令检测 题目如下: 写一个函数,它使用正则表达式,确保传入的口令字符串是强口令.强口令定义:长度不少于8个字符,同时包含 ...

  9. python文件目录管理 项目_Python入门教程完整版(懂中文就能学会)

    今天给大家带来了干货,Python入门教程完整版,完整版啊!完整版! 言归正传,小编该给大家介绍一下这套教程了,希望每个小伙伴都沉迷学习,无法自拔 本套教程学习时间15天 1-3天内容:为Linux基 ...

最新文章

  1. MVC3学习 四 EF删除操作
  2. 一次关于DNS服务器的故障排错记录——RNDC故障
  3. kubernetes离线一键安装教程
  4. python的Web框架,Django框架中的请求与响应
  5. Java并发编程中的若干核心技术,向高手进阶
  6. devc++调试下一步没反应_某化工厂污水处理站SBR工艺调试方案
  7. 机器学习:朴素贝叶斯分类器,决策函数向量化处理,mask使用技巧
  8. 关于静态库与动态库【Linux 】【C】
  9. 前端学习(2146):vue中TypeError: this.getResolve is not a function
  10. bakaxl启动器怎么导入整合包_bakaxl启动器加皮肤光影mod
  11. Vue之动态组件(二)
  12. 个性化联邦学习算法框架发布,赋能AI药物研发
  13. -3dB下的正确率是100%!!!
  14. selenium自动化案例(一)B站专栏爬虫
  15. java 定义全局变量_都说变量有七八种,到底谁是 Java 的亲儿子
  16. JavaScript 执行覆盖测试分析
  17. 分享关于如何检测视频流码率
  18. Windows系统安装失败日志分析
  19. 百元降噪耳机推荐有哪些品牌?适合学生党使用的降噪蓝牙耳机分享
  20. node.js对接支付宝沙箱,看这篇足够

热门文章

  1. 2019 年开源数据库报告发布:MySQL 仍卫冕!
  2. 拿什么重建你,巴黎圣母院?
  3. 漫画 | 为什么 MySQL 数据库要用 B+ 树存储索引?
  4. 马云宣布退休计划后,阿里巴巴组织架构再次全面升级
  5. 人工智能迎来寒冬,自动驾驶汽车发展受阻
  6. 史上最大漏洞危机再生新变种,大量芯片受感染
  7. Windows 怎么了?微软又停止一大版本更新
  8. 引入神经网络 API 1.1、支持全面屏,Android 9.0 来了!
  9. javaweb实训第三天下午——Web基础-Servlet交互JSP原理及运用
  10. 帮你快速拿Offer!java面向对象程序设计实验报告