原文链接行人检测 基于 OpenCV 的人体检测 - 热分享​hotdog29.com

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

我们都知道,无论性别,种族或种族如何,我们的身体都具有相同的基本结构。在最结构层面,我们都有头部,两个手臂,一个躯干和两条腿。

我们可以利用计算机视觉来利用这种 半刚性结构并提取特征来量化人体。这些功能可以传递给机器学习模型,这些模型在训练时可用于 检测 和 跟踪 图像和视频流中的人。这对于行人检测 任务特别有用 ,这是我们今天在博客文章中讨论的主题。

请继续阅读,了解如何使用OpenCV和Python执行 行人检测。

寻找这篇文章的源代码?

跳到下载部分。

行人检测 OpenCV

您是否知道OpenCV具有 执行 行人检测 的内置方法?

OpenCV附带预先训练的HOG +线性SVM模型,可用于在图像和视频流中执行行人检测。如果你不熟悉Oriented Gradients直方图和线性SVM方法,我建议你阅读

第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像素。我们尝试减少图像尺寸的原因有两个:减少图像尺寸确保了少滑动窗口在图像金字塔需要进行评估(即,已经从提取的HOG特征,然后到线性SVM通过),从而减少检测时间(并提高总的检测吞吐量)。

调整图像大小也可以提高行人检测的整体准确性(即误报率较低)。

实际上, 通过调用hog 描述符的 detectMultiScale 方法, 由行28和29处理图像中的行人 。该 detectMultiScale 方法构造的图像金字塔与 刻度= 1.05 和的滑动窗口步长大小 (4 ,4 ) 在两个像素X 和 ÿ 方向。

滑动窗口的大小固定为64 x 128像素,正如开创性的Dalal和Triggs论文, (X,Y)的每个人在图像中,并且坐标- 权重 ,由SVM对每个检测返回的置信值。

较大的 比例尺 将评估 图像金字塔中较少的层,这可以使算法更快地运行。然而,具有 太大的比例(即,图像金字塔中的较少层)可能导致未检测到行人。类似地,具有 太小的 比例 尺寸会显着 增加需要评估的图像金字塔层的数量。这不仅会造成计算上的浪费,还会大大增加行人检测器检测到的误报数量。那说, 规模 是执行行人检测时调整的最重要参数之一。我将 在以后的博客文章中对每个参数进行更全面的检查以检测 MultiScale。

第32和33行使用我们的初始边界框并在我们的图像上绘制它们。

但是,对于某些图像,您会注意到 每个人都检测到多个重叠的边界框(如上 图1所示)。

在这种情况下,我们有两个选择。我们可以检测一个边界框是否完全包含在另一个边界框内 (作为一个OpenCV示例实现)。或者我们可以应用非最大值抑制 并 抑制 与重要阈值重叠的边界框 - 这正是 第38和39行所做的。

注意:如果您有兴趣了解有关HOG框架和非最大值抑制的更多信息,我将首先阅读有关6步框架的这篇介绍性文章。从那里,查看这篇关于简单的非最大值抑制的帖子,然后是一个实现优化的Malisiewicz方法的更新帖子 。

在应用非最大值抑制之后,我们在第42和43行绘制最终的边界框, 在第46-48行显示有关图像和边界框数量的一些基本信息 ,最后在第51 - 53 行显示我们的输出图像到我们的屏幕。

图像中行人检测的结果

要查看我们的行人检测脚本,请发出以下命令

$ python detect.py --images images

下面我提供了检测脚本的结果示例:

图2:我们的行人检测脚本的第一个结果。

在这里,我们发现一个人站在一辆警车旁边。

图3:检测前景中的单个人和后台中的另一个人。

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

图4:应用非最大值抑制的重要原因示例。

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

图5:演示非最大值抑制作用的第二个例子。

同样,我们看到检测到多个错误边界框,但通过应用NMS,我们可以删除它们,让我们在图像中进行真正的检测。

图6:检测购物中心的行人。

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

图7:在模糊图像中检测人物。

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

图8:在户外探测行人,沿着街道行走。

这是多个重叠边界框的另一个例子,但是由于更大的 overlapThresh 它们没有被抑制,留给我们正确的人物检测。

图9:检测一个家庭的四个成员。

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

图10:检测行人描绘。

我最后一次包含这张图片只是因为我发现它很有趣。我们正在清楚地看到一个路标,可能用于指示人行横道。但是,我们的HOG + SVM探测器将此图像中的两个人标记为正面分类!

摘要

在这篇博客文章中,我们学习了如何使用OpenCV库和Python编程语言执行行人检测。

OpenCV库实际上附带了 基于Dalal和Triggs方法的 预训练HOG +线性SVM检测器,可 自动检测图像中的行人。

虽然HOG方法往往比其Haar对应部分更准确,但它仍然需要 正确设置detectMultiScale的参数 。在以后的博客文章中,我将回顾每个参数以检测MultiScale ,详细说明如何调整每个参数 ,并描述准确性和性能之间的权衡。

我希望你喜欢今天的帖子

代码下载

源代码下载

原文链接行人检测 基于 OpenCV 的人体检测​hotdog29.com

python行人检测_行人检测 基于 OpenCV 的人体检测相关推荐

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

    原文链接 行人检测 基于 OpenCV 的人体检测 - 热分享​hotdog29.com 在 2019年8月1日 上张贴 由 hotdog发表回复 行人检测 基于 OpenCV 的人体检测 我们都知道 ...

  2. pythonopencv检测行人_行人检测 基于 OpenCV 的人体检测

    原文链接行人检测 基于 OpenCV 的人体检测 - 热分享​hotdog29.com 行人检测 基于 OpenCV 的人体检测 我们都知道,无论性别,种族或种族如何,我们的身体都具有相同的基本结构. ...

  3. flutter 人脸检测_【转载】opencv实现人脸检测

    全文转载自CSDN的博客(不知道怎么将CSDN的博客转到博客园,应该没这功能吧,所以直接复制全文了),转载地址如下 http://blog.csdn.net/lsq2902101015/article ...

  4. 行人检测(人体检测)3:Android实现人体检测(含源码,可实时人体检测)

    行人检测(人体检测)3:Android实现人体检测(含源码,可实时人体检测) 目录 行人检测(人体检测)3:Android实现人体检测(含源码,可实时人体检测) 1. 前言 2. 人体检测数据集说明 ...

  5. python运动目标检测与跟踪_基于OpenCV的运动目标检测与跟踪

    尹俊超,刘直芳:基于 OpenCV 的运动目标检测与跟踪 2011, V ol.32, No.8 2817 0 引 言 运动目标检测跟踪技术在航空航天遥感. 生物医学. 工业 自动化生产. 军事公安目 ...

  6. Python基于OpenCV高空抛物检测系统[完整源码&部署教程]

    1.视频演示: [项目分享]Python基于OpenCV高空抛物检测系统[完整源码&部署教程]_哔哩哔哩_bilibili 2.图片演示: 3.算法原理: 参考该博客提出的移动侦测法,即是根据 ...

  7. 基于opencv的人脸检测与识别(python)(1)

    基于opencv的人脸检测与识别(python语言)(1) 人脸检测和识别技术就目前而言,已经相对成熟,各类算法层出不穷,这都归功于各位奋斗在一线的大佬的努力(站在巨人的肩膀上的感觉就是爽).本文是参 ...

  8. 基于opencv实现人脸检测

    基于opencv实现人脸检测 opencv简述 opencv是一个开源的计算机视觉库,它有着C++,Python,Java等接口,支持Windows,Linux,Mac OS,IOS 和 Androi ...

  9. 【零基础跑项目】20代码教你基于opencv的人脸检测

    20代码教你基于opencv的人脸检测

最新文章

  1. nginx+keepalived高可用及双主模式
  2. 大数据入门基础教程系列
  3. 如何实现Spark on Kubernetes?
  4. 201521123078 《Java程序设计》第6周学习总结
  5. MFC初步教程(二)
  6. Perl 简单读写XML 文件
  7. 华为OLT(MA5680T)修改系统时间
  8. Wifite批量破解WEP/WPA/WPS
  9. 抢火车票,出行必备程序(12306bypass)--可以抛掉同程什么的抢票软件了
  10. 机器学习之贝叶斯算法图像分类
  11. 云计算是什么?云计算基础概念讲解
  12. 麒麟子再放大招,据传幼麟棋牌全部版本将开源!
  13. PMS进化论:回顾过去才能更好地看向未来!
  14. conda安装包时提示当前用户没有权限
  15. 对话华为鸿蒙掌舵人王成录:真正的第一,是掌握在自己手里的第一
  16. 连发 4 款处理器!面对苹果 AMD 的围堵,英特尔要改革 X86 了
  17. Flutter 2.0 发布 | 针对 Web,移动端和桌面端构建的下一代 Flutter
  18. 面试官:策略模式和代理模式有什么区别?
  19. 生产物流系统建模与仿真-基于WITNESS建模视频教程
  20. html5 摇骰子游戏,html5摇骰子游戏

热门文章

  1. c语言输出成绩表格制作教程,c语言输出表格用C语言怎么样输出表格
  2. Scala编程语言学习总结
  3. vue-rx的初步使用
  4. MATLAB中smoothdata函数使用
  5. PowerPoint 设置横坐标日期的起止值
  6. vscode 官网无法下载 解决方法
  7. linux匿名用户有写入权限,Linux vsftpd匿名用户开放上传,写入,创建,删除权限
  8. 毁掉孩子专注力的4件事,90%的家长都在做!
  9. 网游如何防外挂篡改数据——客户端内存加密
  10. python中的换行符是哪个键_对Python字符串中的换行符和制表符介绍