opencv 轮廓放大_使用OpenCV和Python构建自己的车辆检测模型

总览

  • 对智慧城市的想法感到兴奋吗? 您会喜欢本教程,内容是构建自己的车辆检测系统。
  • 首先,我们将了解如何在视频中检测运动物体,然后再进入实践部分。

介绍

我喜欢智慧城市的想法。关于自动化智能能源系统,电网,一键式访问端口的想法–这是一个令人着迷的概念!老实说,对于数据科学家来说,这是一个梦想,我很高兴世界各地的许多城市都在朝着变得更加智能化的方向迈进。

智慧城市的核心组件之一是自动交通管理。 这让我开始思考是否可以使用数据科学知识来构建可以在智能交通管理中发挥作用的车辆检测模型?

考虑一下–如果您可以将车辆检测系统集成到交通信号灯摄像头中,则可以轻松地同时跟踪许多有用的东西:

  • 白天在交通路口有多少辆车?
  • 交通事故发生时间?
  • 什么样的车辆在交叉路口行驶(重型车辆,小汽车等)?
  • 有没有一种方法可以优化交通量并通过其他街道进行分流

等等。 应用无止境!

我们人类可以轻松地从复杂场景中瞬间检测和识别物体。 但是,将思维过程转化为机器,需要我们学习使用计算机视觉算法进行对象检测的技术。

因此在本文中,我们将构建一个自动车辆检测器和计数器模型。下面是实际效果图

058470771a0c57054250f2e972190c58.png
实时车辆检测https://www.zhihu.com/video/1239875427575193600

激动吗?那就让我们开始吧!

注意:如果你是深度学习和计算机视觉新手? 以下是两门热门课程,可以启动您的深度学习之旅:

机器学习和数据科学课程-Analytics Vidhya​courses.analyticsvidhya.com
e45fd111c838d646891da7d046ce5487.png
Certified Computer Vision with Deep Learning Course​courses.analyticsvidhya.com
e45fd111c838d646891da7d046ce5487.png

目录

  • 视频检测运动对象背后的理论
  • 在视频中检测对象的真实世界用例
  • 您应该了解的有关视频对象检测的基本概念
    • 帧差异
    • 图像阈值
    • 轮廓查找
    • 图像膨胀
  • 使用OpenCV构建车辆检测系统

检测视频中的运动对象的想法

目标检测是计算机视觉中一个引人入胜的领域。当我们处理视频数据时,它达到了一个全新的水平。复杂性提高了一个等级,但是带来的成就奖励也是如此!

我们可以使用目标检测算法执行超有用的高价值任务,例如监视,交通管理,打击犯罪等。 这是一个展示想法的GIF:

我们可以在目标检测中执行许多子任务,例如计算目标数目,找到目标的相对大小或找到目标之间的相对距离。 所有这些子任务都很重要,因为它们有助于解决一些最棘手的现实问题。

如果您想从头开始学习目标检测算法,建议您参考以下教程:

A Step-by-Step Introduction to the Basic Object Detection Algorithms (Part 1)​www.analyticsvidhya.com
6b9d3e96ceb81638d973bd6bc3f271b7.png
A Friendly Introduction to Real-Time Object Detection using the Powerful SlimYOLOv3 Framework​www.analyticsvidhya.com
e8dfd877fc1d0c7f2ed89cf2de68dff0.png
object detection Archives - Analytics Vidhya​www.analyticsvidhya.com

让我们看一下一些令人兴奋的现实世界中的目标检测实例吧。

视频中对象检测的实际用例

如今,视频目标检测已广泛应用于各个行业。使用范围从视频监视到体育广播再到机器人导航。

这是个好消息-涉及视频目标检测和跟踪的未来用例时,可能性无穷无尽。 在这里,我列出了一些有趣的应用程序:

  • 人群计数
  • 车辆牌照检测和识别
  • 运动比赛中的球跟踪
  • 机器人
  • 交通管理(我们将在本文中看到的一个例子)

您应该了解的有关视频目标检测的基本概念

在开始构建视频检测系统之前,您应该了解一些关键概念。一旦熟悉了这些基本概念,就可以针对您选择的任何用例构建自己的检测系统。

那么,您该如何检测视频中的运动物体?

我们的目标是捕获运动对象的坐标并在视频中突出显示该对象。 考虑以下视频中的这一帧:

2b6c9779b966e8e20f9b2130cfeba800.png

我们希望模型能够检测视频中的运动对象,如上图所示。 检测到正在行驶的汽车,并在汽车周围创建一个边界框。

有多种技术可以解决此问题。 您可以训练用于目标检测的深度学习模型,也可以选择一个预先训练的模型并在数据上进行微调。但是,这些是有监督的学习方法,它们需要标记的数据来训练目标检测模型。

在本文中,我们将重点介绍视频中对象检测的无监督方式,即不使用任何标记数据的目标检测。我们将使用帧差分技术。 让我们了解它的工作原理!

帧差分

视频是一组按正确顺序堆叠在一起的帧。 因此,当我们看到一个对象在视频中移动时,这意味着该对象在每个连续帧中都位于不同的位置。

如果我们假设除了那个物体,没有其他物体在一对连续的帧中移动,那么第一帧与第二帧的像素差异将突出显示移动物体的像素。 现在,我们将获得运动对象的像素和坐标。 大致来说,这就是帧差分方法的工作方式。

让我们举个例子。 考虑视频中的以下两帧:

a38badaaf489476e020063fae92c4c74.png

您能发现两帧之间的差异吗?

是的–握笔的手的位置从第1帧更改为第2帧。其余目标完全没有移动。 因此,正如我前面提到的,要定位运动对象,我们将执行帧差分。 结果将如下所示:

c57565475e17950a7fe1e5150704d214.png

您可以看到最初出现手的突出显示区域或白色区域。 除此之外,记事本还沿其边缘突出了一点。 这可能是由于手的运动引起的照明变化。 建议去除对静止物体的不必要检测。 因此,我们需要在帧上执行某些图像预处理步骤。

图像阈值

在该方法中,基于阈值为灰度图像的像素值分配代表黑色和白色的两个值之一。 因此,如果像素的值大于阈值,则为其分配一个值,否则为其分配另一个值。

在我们的情况下,我们将在上一步中对差异帧的输出图像应用图像阈值处理:

85761c9a549fa06600bbf241ffccb46e.png

寻找轮廓

轮廓用于识别图像中具有相同颜色或强度的区域的形状。 轮廓就像是感兴趣区域周围的边界。 因此,如果在阈值化步骤之后在图像上应用轮廓,则会得到运动目标的轮廓

062d8fc2e62b05986a88ffe995ee8a1b.png

白色区域被灰色边界包围,仅是轮廓。 我们可以轻松获得这些轮廓的坐标。 这意味着我们可以获取突出显示区域的位置。

请注意,存在多个突出显示的区域,每个区域都被轮廓包围。 在我们的情况下,具有最大面积的轮廓是所需区域。 因此,最好具有尽可能少的轮廓。

在上图中,白色区域仍然存在一些不必要的碎片。 仍有改进的余地。 想法是合并附近的白色区域以减少轮廓,为此,我们可以使用另一种称为图像扩张的技术。

图像扩张

这是对图像的卷积运算,其中内核(矩阵)在整个图像上传递。 只是为了给您直观感,右边的图像是左边图像的放大版:

db60cea70e7cd097dbcad0368744de7a.png

因此,让我们对图像进行图像放大,然后再次找到轮廓:

cc9cc3a6e9ab0ef831930f923fd1c8e0.png

事实证明,很多碎片区域相互融合。 现在,我们可以再次在该图像中找到轮廓:

82f905ae23da68f7794fd34184618a57.png

在这里,我们只有四个候选轮廓,可以从中选择面积最大的轮廓。 您还可以在原始框架上绘制这些轮廓,以查看轮廓围绕移动对象的程度:

510e0d93cf28212e2aaf2fa4ab0ae722.png

[具体实现代码下载地址](https://pan.baidu.com/s/1oUYOL8CdQ1bt31_IKcLN6g)

提取码:6ndc

[参考链接地址](Build your own Vehicle Detection Model using OpenCV and Python)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值