opencv canny源码解析_行人检测 基于 OpenCV 的人体检测

opencv canny源码解析_行人检测 基于 OpenCV 的人体检测_第1张图片

原文链接

行人检测 基于 OpenCV 的人体检测 - 热分享​hotdog29.com
cd49954b143c4c525dfec5bda844b359.png

在 2019年8月1日 上张贴 由 hotdog发表回复

行人检测 基于 OpenCV 的人体检测

opencv canny源码解析_行人检测 基于 OpenCV 的人体检测_第2张图片


我们都知道,无论性别,种族或种族如何,我们的身体都具有相同的基本结构。在最结构层面,我们都有头部两个手臂,一个躯干两条腿
我们可以利用计算机视觉来利用这种 半刚性结构并提取特征来量化人体。这些功能可以传递给机器学习模型,这些模型在训练时可用于 检测跟踪 图像和视频流中的人。这对于行人检测 任务特别有用 ,这是我们今天在博客文章中讨论的主题。
请继续阅读,了解如何使用OpenCV和Python执行 行人检测。
寻找这篇文章的源代码?
跳到下载部分。
行人检测 OpenCV
您是否知道OpenCV具有 执行 行人检测 的内置方法
OpenCV附带预先训练的HOG +线性SVM模型,可用于在图像和视频流中执行行人检测。如果你不熟悉Oriented Gradients直方图和线性SVM方法,我建议你阅读这篇博文,我将讨论6步框架
如果您已经熟悉该过程(或者如果您只想查看有关如何使用OpenCV进行行人检测的代码),只需打开一个新文件,将其命名为 detect.py 输入一下代码

opencv canny源码解析_行人检测 基于 OpenCV 的人体检测_第3张图片

第2-8行首先导入我们必要的包。我们将导入 print_function 以确保我们的代码兼容Python 2.7和Python 3(此代码也适用于OpenCV 2.4.X和OpenCV 3).我们 将从我的imutils包中导入 non_max_suppression函数。
如果您没有安装 imutils ,请让 pip 为您安装$ pip install imutils
如果你 确实安装了 imutils ,你需要升级到最新版本(v0.3.1),其中包括non_max_suppression 函数的实现 ,以及一些其他的小更新$ pip install --upgrade imutils
在本文中再次讨论了实现更快的NMS算法。在任何一种情况下,非最大值抑制算法的要点是采用 多个重叠的边界框并将它们减少到只有一个边界框:

图1 左)图像中的人员错误地检测到多个边界框。(右)应用非最大值抑制允许我们抑制重叠边界框,使我们得到正确的最终检测。
这有助于减少最终物体探测器报告的误报数量。br/>第11-13行处理解析我们的命令行参数。我们这里只需要一个参数, - images ,这是包含我们将要执行行人检测的图像列表的目录的路径。
最后, 第16和17行初始化了我们的行人探测器。首先,我们调用 hog = cv2.HOGDescriptor() 初始化 Oriented Gradients 描述符的直方图。然后,我们调用 setSVMDetector 将支持向量机设置为预先训练的行人检测器,通过 cv2.HOGDescriptor_getDefaultPeopleDetector() 函数。
此时我们的OpenCV行人探测器已满载,我们只需将其应用于某些图像


第20行,我们开始循环遍历images - images 目录中的 图像。此博客文章中的示例(以及本文源代码下载中包含的其他图像)是流行的INRIA Person Dataset(特别是GRAZ-01子集)中的示例。
从那里, 第23-25行 处理从磁盘加载我们的图像并调整其大小以使最大宽度为400像素。我们尝试减少图像尺寸的原因有两个:

  1. 减少图像尺寸确保了少滑动窗口在图像金字塔需要进行评估(即,已经从提取的HOG特征,然后到线性SVM通过),从而减少检测时间(并提高总的检测吞吐量)。
  2. 调整图像大小也可以提高行人检测的整体准确性(即误报率较低)。

实际上 通过调用hog 描述符的 detectMultiScale 方法, 由行28和29处理图像中的行人 。该 detectMultiScale 方法构造的图像金字塔与 刻度= 1.05 和的滑动窗口步长大小 (4 ,4 ) 在两个像素Xÿ 方向。
滑动窗口的大小固定为64 x 128像素,正如开创性的Dalal和Triggs论文, 人体检测的方向梯度直方图所示。 所述 detectMultiScale 函数返回的2元组 rects ,或边界框 (X,Y)的每个人在图像中,并且坐标- 权重 ,由SVM对每个检测返回的置信值。
较大的 比例尺 将评估 图像金字塔中较少的层,这可以使算法更快地运行。然而,具有 太大的比例(即,图像金字塔中的较少层)可能导致未检测到行人。类似地,具有 太小的 比例 尺寸会显着 增加需要评估的图像金字塔层的数量。这不仅会造成计算上的浪费,还会大大增加行人检测器检测到的误报数量。那说, 规模 是执行行人检测时调整的最重要参数之一。我将 在以后的博客文章中对每个参数进行更全面的检查以检测 MultiScale。第32和33行使用我们的初始边界框并在我们的图像上绘制它们。
但是,对于某些图像,您会注意到 每个人都检测到多个重叠的边界框(如上 图1所示)。
在这种情况下,我们有两个选择。我们可以检测一个边界框是否完全包含在另一个边界框内 (作为一个OpenCV示例实现)。或者我们可以应用非最大值抑制 并 抑制 与重要阈值重叠的边界框 - 这正是 第38和39行所做的。注意:如果您有兴趣了解有关HOG框架和非最大值抑制的更多信息,我将首先阅读有关6步框架的这篇介绍性文章。从那里,查看这篇关于简单的非最大值抑制的帖子,然后是一个实现优化的Malisiewicz方法的更新帖子 。
在应用非最大值抑制之后,我们在第42和43行绘制最终的边界框, 在第46-48行显示有关图像和边界框数量的一些基本信息 ,最后在第51 - 53 显示我们的输出图像到我们的屏幕。
图像中行人检测的结果
要查看我们的行人检测脚本,请发出以下命令$ python detect.py --images images
下面我提供了检测脚本的结果示例:

opencv canny源码解析_行人检测 基于 OpenCV 的人体检测_第4张图片

图2:我们的行人检测脚本的第一个结果。
在这里,我们发现一个人站在一辆警车旁边。

opencv canny源码解析_行人检测 基于 OpenCV 的人体检测_第5张图片

图3:检测前景中的单个人和后台中的另一个人。
在上面的例子中,我们可以看到在图像的前景中检测到一个人,而在后台检测到推婴儿车的女人。

opencv canny源码解析_行人检测 基于 OpenCV 的人体检测_第6张图片

图4:应用非最大值抑制的重要原因示例。
上面的图像提供了为什么应用非最大值抑制很重要的示例。该 detectMultiScale 功能错误检测两个边框(与正确的边框),两者重叠的真实的人的形象。通过应用非最大值抑制,我们能够抑制无关的边界框,让我们得到真正的检测

图5:演示非最大值抑制作用的第二个例子。
同样,我们看到检测到多个错误边界框,但通过应用NMS,我们可以删除它们,让我们在图像中进行真正的检测。

opencv canny源码解析_行人检测 基于 OpenCV 的人体检测_第7张图片

图6:检测购物中心的行人。
在这里,我们正在检测购物中心的行人。请注意,有两个人正在 离开相机,而另一个人正走向相机。在任何一种情况下,我们的HOG方法都能够检测到人。较大 overlapThresh 在non_maxima_suppression 函数确保了包围盒没有被抑制,尽管它们做部分地重叠。

图7:在模糊图像中检测人物。
我对上面图片的结果特别感到惊讶。通常情况下,HOG描述符在存在运动模糊时表现不佳,但我们仍然能够检测到该图像中的行人。

opencv canny源码解析_行人检测 基于 OpenCV 的人体检测_第8张图片

图8:在户外探测行人,沿着街道行走。
这是多个重叠边界框的另一个例子,但是由于更大的 overlapThresh 它们没有被抑制,留给我们正确的人物检测。

opencv canny源码解析_行人检测 基于 OpenCV 的人体检测_第9张图片

图9:检测一个家庭的四个成员。
上图显示了我们的HOG + SVM行人探测器的多功能性。我们不仅能够发现成年男性,还能够发现三个小孩。(请注意,探测器无法找到隐藏在他[假定为]父亲身后的另一个孩子)。

图10:检测行人描绘。
我最后一次包含这张图片只是因为我发现它很有趣。我们正在清楚地看到一个路标,可能用于指示人行横道。但是,我们的HOG + SVM探测器将此图像中的两个人标记为正面分类!
摘要
在这篇博客文章中,我们学习了如何使用OpenCV库和Python编程语言执行行人检测。
OpenCV库实际上附带了 基于Dalal和Triggs方法的 预训练 HOG +线性SVM检测器,可 自动检测图像中的行人。
虽然HOG方法往往比其Haar对应部分更准确,但它仍然需要 正确设置detectMultiScale的参数 。在以后的博客文章中,我将回顾每个参数以检测MultiScale ,详细说明如何调整每个参数 ,并描述准确性和性能之间的权衡。
我希望你喜欢今天的帖子
代码下载
源代码下载

原文链接

行人检测 基于 OpenCV 的人体检测​hotdog29.com
cd49954b143c4c525dfec5bda844b359.png


文章转自 Adrian Rosebrock ,OpenCV Face Recognition,PyImageSearch, https://www.pyimagesearch.com/2015/11/09/pedestrian-detection-opencv/ /,2009年7月31日访问
相关文章

  • 距离测量 使用 OpenCV 测量 图像中 对象 之间的 距离
  • 大小检测 使用 OpenCV 测量图像中对象的大小
  • Mask R-CNN Keras 对象检测 对象分割 像素掩码
  • YOLO 对象检测 OpenCV 源代码
  • 银行卡号识别 基于 OpenCV 光学字符识别(OCR)

张贴在技术博客、opencv标签:opencv、对象检测、行人检测、人体检测编辑

你可能感兴趣的:(opencv,canny源码解析,opencv两个图像相减,python行人检测,检测多边形是否重叠)