0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

使用深度学习和OpenCV 进行视频目标检测

马哥Linux运维 来源:未知 作者:李倩 2018-10-16 15:03 次阅读

使用OpenCV和Python上对实时视频流进行深度学习目标检测是非常简单的,我们只需要组合一些合适的代码,接入实时视频,随后加入原有的目标检测功能。

本文分两个部分。在第一部分中,我们将学习如何扩展原有的目标检测项目,使用深度学习和OpenCV将应用范围扩展到实时视频流和视频文件中。这个任务会通过VideoStream类来完成。

深度学习目标检测教程:http://www.pyimagesearch.com/2017/09/11/object-detection-with-deep-learning-and-opencv/

VideoStream类教程:http://www.pyimagesearch.com/2016/01/04/unifying-picamera-and-cv2-videocapture-into-a-single-class-with-opencv/

现在,我们将开始把深度学习+目标检测的代码应用于视频流中,同时测量FPS处理速度。

使用深度学习和OpenCV进行视频目标检测

为了构建基于OpenCV深度学习的实时目标检测器,我们需要有效地接入摄像头/视频流,并将目标检测应用到每一帧里。

首先,我们打开一个新文件,将其命名为real_time_object_detection.py,随后加入以下代码:

我们从第2-8行开始导入封包。在此之前,你需要imutils和OpenCV3.3。在系统设置上,你只需要以默认设置安装OpenCV即可(同时确保你遵循了所有Python虚拟环境命令)。

Note:请确保自己下载和安装的是OpenCV3.3(或更新版本)和OpenCV-contrib版本(适用于OpenCV3.3),以保证其中包含有深度神经网络模块。

下面,我们将解析这些命令行参数

与此前的目标检测项目相比,我们不需要图像参数,因为在这里我们处理的是视频流和视频——除了以下参数保持不变:

--prototxt:Caffeprototxt文件路径。

--model:预训练模型的路径。

--confidence:过滤弱检测的最小概率阈值,默认值为20%。

随后,我们初始化类列表和颜色集:

在第22-26行,我们初始化CLASS标签,和相应的随机COLORS。有关这些类的详细信息(以及网络的训练方式),请参考:http://www.pyimagesearch.com/2017/09/11/object-detection-with-deep-learning-and-opencv/

现在,我们加载自己的模型,并设置自己的视频流:

我们加载自己的序列化模型,提供对自己的prototxt和模型文件的引用(第30行),可以看到在OpenCV3.3中,这非常简单。

下一步,我们初始化视频流(来源可以是视频文件或摄像头)。首先,我们启动VideoStream(第35行),随后等待相机启动(第36行),最后开始每秒帧数计算(第37行)。VideoStream和FPS类是imutils包的一部分。

现在,让我们遍历每一帧(如果你对速度要求很高,也可以跳过一些帧):

首先,我们从视频流中读取一帧(第43行),随后调整它的大小(第44行)。由于我们随后会需要宽度和高度,所以我们在第47行上进行抓取。随后将frame转换为一个有dnn模块的blob(第48行)。

现在,我们设置blob为神经网络的输入(第52行),通过net传递输入(第53行),这给我们提供了detections。

这时,我们已经在输入帧中检测到了目标,现在是时候看看置信度的值,以判断我们能否在目标周围绘制边界框和标签了:

我们首先在detections内循环,记住一个图像中可以检测到多个目标。我们还需要检查每次检测的置信度(即概率)。如果置信度足够高(高于阈值),那么我们将在终端展示预测,并以文本和彩色边界框的形式对图像作出预测。让我们逐行来看一下:

在detections内循环,首先我们提取confidence值(第59行)。

如果confidence高于最低阈值(第63行),那么我们提取类标签索引(第67行),并计算检测到的目标的坐标(第68行)。

然后,我们提取边界框的(x,y)坐标(第69行),之后将用于绘制矩形和文本。

我们构建一个文本label,包含CLASS名称和confidence(第72、73行)。

我们还要使用类颜色和之前提取的(x,y)坐标在物体周围绘制彩色矩形(第74、75行)。

通常,我们希望标签出现在矩形上方,但是如果没有空间,我们将在矩形顶部稍下的位置展示标签(第76行)。

最后,我们使用刚才计算出的y值将彩色文本置于帧上(第77、78行)。

帧捕捉循环剩余的步骤还包括:(1)展示帧;(2)检查quit键;(3)更新fps计数器:

上述代码块简单明了,首先我们展示帧(第81行),然后找到特定按键(第82行),同时检查「q」键(代表「quit」)是否按下。如果已经按下,则我们退出帧捕捉循环(第85、86行)。最后更新fps计数器(第89行)。

如果我们退出了循环(「q」键或视频流结束),我们还要处理这些:

当我们跳出(exit)循环,fps计数器停止(第92行),每秒帧数的信息向终端输出(第93、94行)。

我们关闭窗口(第97行),然后停止视频流(第98行)。

如果你到了这一步,那就可以做好准备用自己的网络摄像头试试看它是如何工作的了。我们来看下一部分。

实时深度学习目标检测的结果

为了实时深度学习目标检测器正常运行,确保你使用本指南「Downloads」部分中的示例代码和预训练的卷积神经网络。(请打开原文链接,进入「Downloads」部分,输入自己的邮箱地址,获取所需代码和其他资料。)

打开终端,执行下列命令:

如果OpenCV能够访问你的摄像头,你可以看到带有检测到的目标的输出视频帧。我对样本视频使用了深度学习目标检测,结果如下:

图1:使用深度学习和OpenCV+Python进行实时目标检测的短片。

注意深度学习目标检测器不仅能够检测到人,还能检测到人坐着的沙发和旁边的椅子——所有都是实时检测到的!

总结

今天的博客中,我们学习了如何使用深度学习+OpenCV+视频流来执行实时目标检测。我们通过下列两个教程完成了这一目标:

1.使用深度学习和OpenCV进行目标检测(http://www.pyimagesearch.com/2017/09/11/object-detection-with-deep-learning-and-opencv/)

2.在OpenCV上进行高效、线程化的视频流(http://www.pyimagesearch.com/2016/01/04/unifying-picamera-and-cv2-videocapture-into-a-single-class-with-opencv/)

最终结果是基于深度学习的目标检测器可以处理6-8个FPS的视频(当然,这也取决于你的系统速度)。

你还可以通过以下途径进一步提升速度:

1.跳过帧。

2.使用MobileNet的不同变体(速度更快,但是准确率下降)。

3.使用SqueezeNet的量子化变体(我还未对此进行测试,但是我想应该会更快,因为它的网络足迹更小)。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • OpenCV
    +关注

    关注

    30

    文章

    629

    浏览量

    41295
  • 深度学习
    +关注

    关注

    73

    文章

    5495

    浏览量

    121044

原文标题:深度学习 + OpenCV,Python实现实时目标检测

文章出处:【微信号:magedu-Linux,微信公众号:马哥Linux运维】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    如何在OpenCV中使用基于深度学习的边缘检测

    在这篇文章中,我们将学习如何在OpenCV中使用基于深度学习的边缘检测,它比目前流行的canny边缘检测
    的头像 发表于 05-19 09:52 2055次阅读
    如何在<b class='flag-5'>OpenCV</b>中使用基于<b class='flag-5'>深度</b><b class='flag-5'>学习</b>的边缘<b class='flag-5'>检测</b>?

    如何用OpenCV的相机捕捉视频进行人脸检测--基于米尔NXP i.MX93开发板

    的是Haar特征人脸检测,此外OpenCV中还集成了深度学习方法来实现人脸检测。 【参考资料】 使用O
    发表于 11-15 17:58

    【HarmonyOS HiSpark AI Camera】基于深度学习目标检测系统设计

    、并行处理、从目标检测算法嵌入式平台的实现的设计要求出发,基于深度学习目标检测算法特点,采用软
    发表于 09-25 10:11

    用光流法进行运动目标检测_OpenCV3编程入门-源码例程

    OpenCV3编程入门-源码例程全集-用光流法进行运动目标检测,感兴趣的小伙伴们可以瞧一瞧。
    发表于 09-18 17:02 17次下载

    如何使用OpenCV、Python和深度学习在图像和视频中实现面部识别?

    Face ID 的兴起带动了一波面部识别技术热潮。本文将介绍如何使用 OpenCV、Python 和深度学习在图像和视频中实现面部识别,以基于深度
    的头像 发表于 07-17 16:20 8031次阅读

    基于深度学习模型的点云目标检测及ROS实现

    近年来,随着深度学习在图像视觉领域的发展,一类基于单纯的深度学习模型的点云目标检测方法被提出和应
    的头像 发表于 11-05 16:47 1.8w次阅读

    如何使用深度学习进行视频行人目标检测

    近年来,随着深度学习在计算机视觉领域的广泛应用,基于深度学习视频运动目标
    发表于 11-19 16:01 22次下载
    如何使用<b class='flag-5'>深度</b><b class='flag-5'>学习</b><b class='flag-5'>进行</b><b class='flag-5'>视频</b>行人<b class='flag-5'>目标</b><b class='flag-5'>检测</b>

    探究深度学习目标视觉检测中的应用与展望

    目标视觉检测是计算机视觉领域的一个重要问题,在视频监控、自主驾驶、人机交互等方面具有重要的研究意义和应用价值.近年来,深度学习在图像分类研究
    的头像 发表于 01-13 10:59 5757次阅读

    OpenCV使用深度学习做边缘检测的流程

    导读 分析了Canny的优劣,并给出了OpenCV使用深度学习做边缘检测的流程。 在这篇文章中,我们将学习如何在
    的头像 发表于 05-08 11:05 2247次阅读
    <b class='flag-5'>OpenCV</b>使用<b class='flag-5'>深度</b><b class='flag-5'>学习</b>做边缘<b class='flag-5'>检测</b>的流程

    基于深度学习目标检测研究综述

    基于深度学习目标检测研究综述 来源:《电子学报》 ,作者罗会兰等 摘 要: 目标检测是计算机视
    发表于 01-06 09:14 2142次阅读
    基于<b class='flag-5'>深度</b><b class='flag-5'>学习</b>的<b class='flag-5'>目标</b><b class='flag-5'>检测</b>研究综述

    深度学习目标检测中的应用

    R-CNN 算法在 2014 年提出,可以说是历史性的算法,将深度学习应用于目标检测领域,相较于之前的目标
    的头像 发表于 10-31 10:08 1742次阅读

    简述深度学习的基准目标检测及其衍生算法

    基于深度学习目标检测方法根据有无区域提案阶段划分为区域提案检测模型和单阶段检测模型
    的头像 发表于 02-27 15:31 1289次阅读
    简述<b class='flag-5'>深度</b><b class='flag-5'>学习</b>的基准<b class='flag-5'>目标</b><b class='flag-5'>检测</b>及其衍生算法

    OpenCV库在图像处理和深度学习中的应用

    本文深入浅出地探讨了OpenCV库在图像处理和深度学习中的应用。从基本概念和操作,到复杂的图像变换和深度学习模型的使用,文章以详尽的代码和解
    的头像 发表于 08-18 11:33 854次阅读

    深度学习检测目标常用方法

    深度学习的效果在某种意义上是靠大量数据喂出来的,小目标检测的性能同样也可以通过增加训练集中小目标样本的种类和数量来提升。
    发表于 03-18 09:57 683次阅读
    <b class='flag-5'>深度</b><b class='flag-5'>学习</b><b class='flag-5'>检测</b>小<b class='flag-5'>目标</b>常用方法

    基于深度学习的小目标检测

    在计算机视觉领域,目标检测一直是研究的热点和难点之一。特别是在小目标检测方面,由于小目标在图像中所占比例小、特征不明显,使得
    的头像 发表于 07-04 17:25 796次阅读