python行人检测_行人检测 基于 OpenCV 的人体检测
原文链接行人检测 基于 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 的人体检测相关推荐
- opencv canny源码解析_行人检测 基于 OpenCV 的人体检测
原文链接 行人检测 基于 OpenCV 的人体检测 - 热分享hotdog29.com 在 2019年8月1日 上张贴 由 hotdog发表回复 行人检测 基于 OpenCV 的人体检测 我们都知道 ...
- pythonopencv检测行人_行人检测 基于 OpenCV 的人体检测
原文链接行人检测 基于 OpenCV 的人体检测 - 热分享hotdog29.com 行人检测 基于 OpenCV 的人体检测 我们都知道,无论性别,种族或种族如何,我们的身体都具有相同的基本结构. ...
- flutter 人脸检测_【转载】opencv实现人脸检测
全文转载自CSDN的博客(不知道怎么将CSDN的博客转到博客园,应该没这功能吧,所以直接复制全文了),转载地址如下 http://blog.csdn.net/lsq2902101015/article ...
- 行人检测(人体检测)3:Android实现人体检测(含源码,可实时人体检测)
行人检测(人体检测)3:Android实现人体检测(含源码,可实时人体检测) 目录 行人检测(人体检测)3:Android实现人体检测(含源码,可实时人体检测) 1. 前言 2. 人体检测数据集说明 ...
- python运动目标检测与跟踪_基于OpenCV的运动目标检测与跟踪
尹俊超,刘直芳:基于 OpenCV 的运动目标检测与跟踪 2011, V ol.32, No.8 2817 0 引 言 运动目标检测跟踪技术在航空航天遥感. 生物医学. 工业 自动化生产. 军事公安目 ...
- Python基于OpenCV高空抛物检测系统[完整源码&部署教程]
1.视频演示: [项目分享]Python基于OpenCV高空抛物检测系统[完整源码&部署教程]_哔哩哔哩_bilibili 2.图片演示: 3.算法原理: 参考该博客提出的移动侦测法,即是根据 ...
- 基于opencv的人脸检测与识别(python)(1)
基于opencv的人脸检测与识别(python语言)(1) 人脸检测和识别技术就目前而言,已经相对成熟,各类算法层出不穷,这都归功于各位奋斗在一线的大佬的努力(站在巨人的肩膀上的感觉就是爽).本文是参 ...
- 基于opencv实现人脸检测
基于opencv实现人脸检测 opencv简述 opencv是一个开源的计算机视觉库,它有着C++,Python,Java等接口,支持Windows,Linux,Mac OS,IOS 和 Androi ...
- 【零基础跑项目】20代码教你基于opencv的人脸检测
20代码教你基于opencv的人脸检测
最新文章
- nginx+keepalived高可用及双主模式
- 大数据入门基础教程系列
- 如何实现Spark on Kubernetes?
- 201521123078 《Java程序设计》第6周学习总结
- MFC初步教程(二)
- Perl 简单读写XML 文件
- 华为OLT(MA5680T)修改系统时间
- Wifite批量破解WEP/WPA/WPS
- 抢火车票,出行必备程序(12306bypass)--可以抛掉同程什么的抢票软件了
- 机器学习之贝叶斯算法图像分类
- 云计算是什么?云计算基础概念讲解
- 麒麟子再放大招,据传幼麟棋牌全部版本将开源!
- PMS进化论:回顾过去才能更好地看向未来!
- conda安装包时提示当前用户没有权限
- 对话华为鸿蒙掌舵人王成录:真正的第一,是掌握在自己手里的第一
- 连发 4 款处理器!面对苹果 AMD 的围堵,英特尔要改革 X86 了
- Flutter 2.0 发布 | 针对 Web,移动端和桌面端构建的下一代 Flutter
- 面试官:策略模式和代理模式有什么区别?
- 生产物流系统建模与仿真-基于WITNESS建模视频教程
- html5 摇骰子游戏,html5摇骰子游戏