点击上方“小白学视觉”,选择加"星标"或“置顶

重磅干货,第一时间送达

虽然互联网上有很多关于 OpenCV 的 Haar Cascade 对象检测模块这方面的技术资料,但这篇文章的重点是通俗易懂地解释这些概念,希望这能帮助初学者以简单的方式理解 Python 的 OpenCV 库。

在本演示中,我们将拍摄一张图片并在其中搜索人脸,我们将使用预先训练好的分类器来执行此搜索,现在让我们开始使用预先训练的模型吧。

对于初学者来说,OpenCV 是一个 Python 库,主要用于各种计算机视觉问题。

在这里,我们使用“ haarcascade_frontalface_default.xml ”作为 opencv github 存储库的模型。小伙伴们可以下载此 xml 文件并将其放置在与 python 文件相同的路径中,并且这里还有许多其他模型(例如:眼睛检测、全身检测、猫脸检测等)。

在开始编写代码之前,让我们先看一下程序的高级流程。

下面描述的整个过程的图[输入、人脸检测过程&输出]

输入:

该算法需要两个输入:

  1. 输入图像矩阵(我们将读取图像并将其转换为数字矩阵/numpy 数组)

  2. 面部特征(在haarcascade_frontalface_default.xml文件中可用)

人脸检测流程:

OpenCV 的 Haar Cascade 分类器采用滑动窗口方法。在这种方法中,一个窗口(默认大小为 20 x 20 像素)在图像上滑动(逐行)以查找面部特征。每次迭代后,图像都会按特定因子(由参数“ scaleFactor ”确定)按比例缩小(调整大小)。存储每次迭代的输出,并在较小的、调整大小的图像上重复滑动操作。在初始迭代过程中可能会出现误报,本文稍后将对此进行更详细的讨论。这种缩小和窗口化过程一直持续到图像对于滑动窗口来说太小为止,scaleFactor 的值越小,精度越高。

输出:

我们的输出图像将在每个检测到的人脸周围包含一个矩形。

代码和解释:

让我们从 python 代码开始。本实验需要以下 Python 包:

pip install numpy
pip install opencv-python

让我们将 python 文件命名为“face_detector.py”,并将其放置在与从上面共享的 github 链接下载的 xml 文件相同的路径中。

# File Name: face_detector.py
# Import the OpenCV library
import cv2

现在让我们看看承诺的 10 行!

我们准备了 2 个输入 [input image&face features xml],如上一节的流程图所示。

我们使用下面这张美丽的照片作为我的输入图像 。

我们首先加载我们的 xml 分类器和输入图像文件。由于输入文件非常大,我们需要调整大小,尺寸与原始分辨率相似,以免它们出现拉伸。然后,我们将图像转换为灰度图像,因为灰度图像被认为可以提高算法的效率。

face_cascade = cv2.CascadeClassifier("haarcascade_frontalface_default.xml")
image = cv2.imread("kids.jpg")
image = cv2.resize(image, (800,533))
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

读取的图像存储为多维 numpy 数组,如下所示。

print(type(gray_image))
<class 'numpy.ndarray'>

在下一步中,我们将灰度图像作为输入传递给 detectMultiScale 方法,该方法将为我们执行检测。它采用以下参数:

scaleFactor :此参数指定图像缩小的因子,例如:如果此值为 1.05,则图像缩小 5%;如果此值为 1.10,则图像按比例缩小 10%。1.10 的 scaleFactor 比 1.05 的 scaleFactor 需要更少的计算。

minNeighbors :它是一个阈值,指定每个矩形应该有多少个相邻矩形才能将其标记为真阳性。换句话说,让我们假设每次迭代都标记某些矩形(即将图像的一部分分类为人脸)。现在,如果后续的迭代也将相同的区域标记为正,则该矩形区域成为真正的可能性就会增加。如果某个区域在一次迭代中被识别为人脸,但在任何其他迭代中都没有,则将它们标记为误报。换句话说,minNeighbors 是一个区域必须被确定为人脸的最小次数。

让我们进行一个实验来更好地理解它。我们将使用不同的 minNeighbors 参数值运行我们的代码。

对于minNeighbors = 0,所有的矩形都被检测为人脸。对于某些矩形,有很多重叠的矩形,这表明在多次迭代中这些矩形已被检测为正。我们设置阈值以提高算法的准确性。

minNeighbors = 0

当 minNeighbors = 2 时,大部分重叠矩形不再存在。但是,我们仍然有一些误报。

minNeighbors = 2

如果我们将此阈值增加到 4 或 5,我们可以看到不再有误报,让我们将此值设置为 5 并继续进行。

faces=face_cascade.detectMultiScale(gray_image,scaleFactor=1.10,minNeighbors=5)

detectMultiScale方法返回一个numpy数组,其中包含面所在矩形的尺寸和位置。

x , y — 矩形左上角的位置 ;w , h — 矩形的宽度和高度

我们现在用绿色 ( 0 , 255 , 0 )( BGR 颜色代码)绘制这些尺寸的矩形,边框厚度为 1。

窗口等待 2 秒(2000 毫秒)并自动关闭。

for x,y,w,h in faces:image=cv2.rectangle(image, (x,y), (x+w, y+h), (0, 255, 0),1)cv2.imshow("Face Detector", image)k=cv2.waitKey(2000)
cv2.destroyAllWindows()

或者,我们也可以通过添加下面的行来保存图像。

cv2.imwrite("kids_face_detected.jpeg", image)

我们的输出图像现在包含每个检测到的人脸周围的绿色矩形。

minNeighbors = 5

希望这篇文章能让我们对如何在 Python 中使用 OpenCV 进行人脸检测有一个基本的了解,我们也可以扩展此代码以跟踪视频中的人脸。

Github代码连接:

https://github.com/arindomjit/Face_Detector

下载1:OpenCV-Contrib扩展模块中文版教程

在「小白学视觉」公众号后台回复:扩展模块中文教程即可下载全网第一份OpenCV扩展模块教程中文版,涵盖扩展模块安装、SFM算法、立体视觉、目标跟踪、生物视觉、超分辨率处理等二十多章内容。

下载2:Python+OpenCV视觉实战项目52讲

在「小白学视觉」公众号后台回复:Python视觉实战项目即可下载包括图像分割、口罩检测、车道线检测、车辆计数、添加眼线、车牌识别、字符识别、情绪检测、文本内容提取、面部识别等31个视觉实战项目,助力快速学校计算机视觉。

下载3:Pytorch常用函数手册

在「小白学视觉」公众号后台回复:pytorch常用函数手册即可下载含有200余个Pytorch常用函数的使用方式,帮助快速入门深度学习。

交流群

欢迎加入公众号读者群一起和同行交流,目前有SLAM、三维视觉、传感器、自动驾驶、计算摄影、检测、分割、识别、医学影像、GAN、算法竞赛等微信群(以后会逐渐细分),请扫描下面微信号加群,备注:”昵称+学校/公司+研究方向“,例如:”张三 + 上海交大 + 视觉SLAM“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~

就是这么霸道,使用OpenCV10行代码实现人脸检测相关推荐

  1. 人脸检测算法代码python_Python有多强大!20行代码实现人脸检测与识别

    题记:大二的时候发现人生苦短,所以信了拍神,开始学Python.学了大半年之后成功转行做前端了.来写个教程帮助大家入门Python. Python优点 Python是一种简单易学.功能强大的编程语言, ...

  2. 【python】15行代码实现人脸检测(opencv)

    文章目录 1. 项目简介 2. 项目地址 3. 依赖模块 4. 完整代码 5. 必要组件 5.1. haar级联特征分类器(精度高) 5.2. lbp级联特征分类器(速度快) 6. 成果展示 6.1. ...

  3. python 人脸检测 大胡子_Python | 50行代码实现人脸检测

    信息安全公益宣传,信息安全知识启蒙. 加微信群回复公众号:微信群:QQ群:16004488 加微信群或QQ群可免费索取:学习教程 教程列表见微信公众号底部菜单 现在的人脸识别技术已经得到了非常广泛的应 ...

  4. 100个Python实战项目(六)15 行代码进行人脸检测(使用Python 和 OpenCV)

  5. 手把手教你用1行代码实现人脸识别 -- Python Face_recognition

    2019独角兽企业重金招聘Python工程师标准>>> 环境要求: Ubuntu17.10 Python 2.7.14 环境搭建: 1. 安装 Ubuntu17.10 > 安装 ...

  6. 如何用 200 行 JavaScript 代码实现人脸检测?

    在超市.地铁.车站等很多场景中,人脸识别已经被广泛应用,但是这个功能究竟是怎么实现的? 在本文中,将以 pico.js 库为例,分享实现轻量级人脸识别功能的具体开发过程 . 作者 | tehnokv ...

  7. 40行代码的人脸识别实践【转】

    转自:http://blog.csdn.net/xingchenbingbuyu/article/details/68482838?ref=myrecommend 版权声明:本文为博主原创文章,转载请 ...

  8. 想了解直播系统开发美颜的原理,先来学习如何用1行代码实现人脸识别

    想了解直播系统开发美颜的原理,先来学习如何用1行代码实现人脸识别 环境搭建: 1. 安装 Ubuntu17.10 > 安装步骤在这里 2. 安装 Python2.7.14 (Ubuntu17.1 ...

  9. python实现人脸识别代码_手把手教你用1行代码实现人脸识别——Python Face_recogni...

    摘要: 1行代码实现人脸识别,1. 首先你需要提供一个文件夹,里面是所有你希望系统认识的人的图片.其中每个人一张图片,图片以人的名字命名.2. 接下来,你需要准备另一个文件夹,里面是你要识别的图片.3 ...

最新文章

  1. Android4.3 屏蔽HOME按键返回桌面详解(源码环境下)
  2. 对MVC、MVP、MVVM的理解
  3. 主导精准脱贫-农业大健康·万祥军:恩施谋定硒功能性产业链
  4. 金士顿u盘分区工具_使用U盘工具给电脑硬盘快速分区教程
  5. 深度解析大数据可视化管理平台的监控功能
  6. 【word2vec】篇二:基于Hierarchical Softmax的 CBOW 模型和 Skip-gram 模型
  7. promise的链式调用
  8. php7数组写法,数组运算符 - PHP 7 中文文档
  9. 传统算法与神经网络算法,神经网络是谁提出的
  10. ResNet网络结构详解与模型的搭建
  11. codesys 简单案例_CoDeSys编程手册范本
  12. oracle arm版本,Oracle版本区别
  13. webservice 测试地址 汇总
  14. 每个客户看待期货开户公司的角度不一样
  15. android xcl charts,我写的Android图表库XCL-Charts,整理好现在开源了!!!
  16. python ndimage.gaussian_filter_Python ndimage.maximum_filter方法代碼示例
  17. 三星平板显示无法连接网络连接服务器,三星p600平板电脑无法连接无线网络该怎么办?...
  18. python求二项式系数的几种方法及性能对比
  19. 自然语言处理(二)基于CNN的新闻文本分类
  20. PCB板ICT/FCT夹具应力如何测试?

热门文章

  1. MediaPipe:Google Research 开源的跨平台多媒体机器学习模型应用框架
  2. 专访博世王红星:大数据和AI将是中国制造业升级新动力
  3. “剁手”的第十年,AI加持下的快递速度你还满意吗?
  4. 程序员入错行怎么办?
  5. Java 日志体系详解
  6. 常用 Linux 发行版操作系统大盘点!
  7. 用Java实现天天酷跑(附源码),这个真的有点强了!
  8. 关于 MyBatis 我总结了 10 种通用的写法
  9. Kafka为什么这么快?
  10. 我去,你写的 switch 语句也太老土了吧