内容简介:使用计算机视觉技术为视频添加注释是一项非常有趣的实用练习。我最近在使用此Code Pattern,因此有机会尝试了这项练习。我从中获益匪浅,相信您也可以。如果尝试了这项练习,您将会想到许多有用的应用场景。在一个用例中,我首先从计算移动目标数量的构想着手,然后考虑如何将此构想应用于业务应用程序。无论是车流量、人流量还是传送带上的产品数量,有许多应用程序可用于跟踪潜在客户数、实际客户数、产品数或其他资产数。随着视频摄像头的普及,企业可以借助计算机视觉技术从这些摄像头中获取一些有用信息。将此技术应用于视频要比一些
计算车辆数量的 Code Pattern
使用计算机视觉技术为视频添加注释是一项非常有趣的实用练习。我最近在使用此Code Pattern,因此有机会尝试了这项练习。我从中获益匪浅,相信您也可以。如果尝试了这项练习,您将会想到许多有用的应用场景。
在一个用例中,我首先从计算移动目标数量的构想着手,然后考虑如何将此构想应用于业务应用程序。无论是车流量、人流量还是传送带上的产品数量,有许多应用程序可用于跟踪潜在客户数、实际客户数、产品数或其他资产数。随着视频摄像头的普及,企业可以借助计算机视觉技术从这些摄像头中获取一些有用信息。将此技术应用于视频要比一些老办法(例如,使用特殊硬件或者人工计算车流量)实用得多。
只要完成以下四项操作,就可以解决大部分用例:
- 识别目标对象
- 跟踪移动对象
- 确定物体是否进出某个目标区域
- 为视频添加注释(如果需要)
在示例Code Pattern 中,我能够识别并跟踪高速公路上的车辆。在此案例中,目标区域位于屏幕底部,我将计算从该区域驶出视频画面(即“终点线”)的车辆数量。
识别目标对象
在示例中,我想要识别车辆,并希望能够在视频中定位车辆。我使用了 IBM PowerAI Vision 及其 Video Data Platform 来为车辆创建对象检测 API。通过 PowerAI Vision,可以很容易地应用深度学习。我无需编写任何代码,就已经创建、训练并部署了该模型。然后,我可以在任何代码中轻松使用该模型。在此实例中,我使用了 Jupyter Notebook 来展示如何将该模型与 Python 和视频结合使用。
由于我使用的是视频,因此能够使用 Video Data Platform 和自动标记功能。这取代了大量的人工工作,从而显著提升了模型的准确性。其基本构想是通过少量的人工操作来添加标记(在 Web UI 中,使用鼠标为某些图像上的车辆绘制边框),然后 Video Data Platform 利用该模型进行推断,以便为从视频中采样的许多其他帧自动添加标记。只需验证结果,并确定是否需要手动进行调整,这样便可以获得更准确的模型。无论是对视频还是静态图像使用模型,使用如此多的角度和光线略有不同的示例,确实提升了模型的准确性。
PowerAI Vision在 Power Systems 上运行,并使用 GPU 加快深度学习的步伐。您可以在本地运行 PowerAI Vision,也可以在云端试用 PowerAI Vision。
那么,如何识别视频中的车辆呢?Jupyter Notebook(Python 代码)使用 OpenCV 来拍摄视频并提取帧。对这些帧进行采样,并将其发送到已部署的 PowerAI Vision API,从而得到一个 JSON 文件,该文件描述检测到的车辆以及车辆边框的坐标。由于每秒包含大量帧,因此无需对每个帧运行推断。您可根据自己的用例作出调整。无论如何,您都希望逐帧跟踪这些车辆,请继续往下看。
跟踪移动对象
在此处检测到的对象 | 沿道路前行的对象 |
---|---|
如果只关心某张图像中的车辆数量或者一组图像中的平均车辆数量,那么实施起来会更容易一些,而且无需跟踪。但是,在大多数情况下,视频中的对象都会启动、停止并四处移动。可以考虑计算杂货店排队人数的示例。如果只关心平均排队人数,那么只需先计数然后计算平均值即可。如果关心已接待过的顾客数量,那么需要以某种方式来捕获客户动向。排队长度可能始终保持不变,但顾客不断流动。在“车辆计数器”示例中,我使用跟踪器计算了每个车道上经过终点线的车辆数量。因此,我不仅可以演示如何对帧中的车辆进行识别、添加注释和计算数量,还可以演示如何在车辆逐帧移动并进入目标区域时,对其进行跟踪和计数。
那么,如何对这些车辆进行跟踪呢?OpenCV 提供了一个可完成此操作的跟踪 API。首先找到 PowerAI Vision 推断所生成的边框,并为每个新框创建一个 OpenCV 跟踪器。需要编写少量代码来确定此框是否为新框,但 OpenCV 可以在对象(无需知道这是一辆车)逐帧移动时很好地跟踪此框。有多种跟踪算法可供选择。目前,最实用的跟踪算法是核相关滤波器 (KCF) 和多示例学习 (MIL)。
如果跟着我的示例练习,您可能会注意到,当车辆图像重叠时,跟踪器有时会跟丢车辆(模型准确性对此有一定的影响,因此您得到的结果可能会不同)。在我的示例中,将代码中的 KCF 更改为 MIL 可以解决跟丢车辆的问题,但 MIL 在其他方面也可能会遇到问题。因此,我对丢失计数器保留了此设置,但会建议一些简单的修复方法供您在练习时使用。最简单的修复方法是从总数中减去跟丢车辆数,这样便可以解决问题,通常可沿道路进一步检测跟丢的车辆。但是,在一般情况下,跟丢的对象稍后不会再次出现在视频中。因此,您需要确认是否存在重复计数。对于高速公路视频,我添加了一条起点线,避免在发生重叠问题的距离内添加车辆。这样就可以解决在使用 KCF 时存在的问题,但我在代码中把它关闭了,因为我认为这是一个很有趣的问题,应该让开发者看到。
另一个选项是编写自己的跟踪器,这很有可能会更频繁地检测对象,可能会检测每一帧。这肯定会提供来自 PowerAI Vision 的更准确的边框,并且方便控制对象跟踪方式。只是需要编写更多代码。具体采用何种方法应取决于您的业务需求。
确定车辆是否进出某个目标区域
我采用的方法是,假定我要跟踪进入某个“目标区域”或者经过某个目标线的对象。在样本视频中,您可断定道路上的平均车辆数量足以描述该视频,但如前面所述,如果能够跟踪移动对象、计算进入目标区域的对象数量以及计算速度或延迟,就可以将此方法应用于许多其他用例。在“高速公路上的车辆”示例中,可通过终点线、车道分界线和每秒帧数来实现这一点。由于这些车辆不会停下,因此很容易计算经过终点线的车辆数量。唯一需要注意的是,确保不会将其重复添加到后续帧中。做到这点并不难。利用连续不断的边框和中心跟踪器,能够轻易地在车辆到达终点线时(车辆位于终点线的中部位置)计数,且避免在车辆接近终点线时(车辆位于终点线的下部位置)重复计数。
一种不错的做法是添加每秒车辆数,因为相比于计算一段无记录的时间内的车辆数量,每秒车辆数指标要有用得多。OpenCV 可帮助记录该指标。只需一次简单的调用,即可获取视频中的每秒帧数,之后的数学运算就非常简单了。
为视频添加注释
我最终得到了检测到的车辆总数、来自推断和跟踪器的边框数量、到达每个车道的终点线的车辆计数以及每秒车辆数指标。也许我不该提到“跟丢的车辆数”。它也包含在其中。这些数字可能只满足部分业务需要,但我喜欢条理清楚,添加了注释的视频会更有趣。我是如何做到的呢?主要使用 OpenCV 和一少部分 IPython 命令在 Notebook 中显示动画,并使用一些 FFmpeg 命令来重建视频和动画 GIF。
在我使用 OpenCV 处理每一个帧时,向该帧添加了文本、线条、边框和统计信息。我将添加了注释的帧保存到一个目录中。OpenCV 命令、文档和示例非常容易理解,希望示例 Notebook 也可以帮助您理解这些内容。通过在每个被跟踪的车辆上显示一个序号,可帮助人们了解跟踪器正在执行的操作。
为在 Jupyter Notebook 中通过动画来播放各个帧,我使用了 IPython display、Image 和 clear_output 函数。某些 OpenCV 命令有助于完成编码。此帧循环的播放方式与视频类似,非常方便查看结果,但帧率不同于视频。
为了将各个帧重新整合到一个 MP4 视频中,我使用了 FFmpeg 命令。您可从 Notebook(取决于您的环境)中运行 FFmpeg,或者将输出帧的目录复制到 FFmpeg 的安装位置。 Code Pattern GitHub 存储库 中包含 工具 目录。其中有一个脚本用于根据帧来创建视频,还有一个脚本用于根据视频来创建动画 GIF。不仅可以查看您的工作成果,还可以分享这些工作成果用于“展示说明”。
开始试用吧!
这是一个很好的练习,但要真正从中学到一些东西,您需要亲自尝试一下。了解一下此 Code Pattern 。其中包含详细的 README 文件和 Jupyter Notebook。我希望您有机会运行它、改变它、将它为你所用并加以创新!
本文翻译自: Use computer vision to detect and track moving objects in video (2018-05-11)
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- Firefox 65 计划推出新反跟踪方法,专门针对跨站点跟踪
- Thinkphp漏洞跟踪
- 跟踪 Component 的修改
- 路径跟踪 PathMeasure的简单使用
- 埋点:淘宝 SPM 流量跟踪体系
- 调用链跟踪系统之 Vaper
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
D3.js in Action
Elijah Meeks / Manning Publications / 2014-3 / USD 44.99
Table of Contents Part 1: An Introduction to D3 1 An introduction to D3.js 2 Information Visualization Data Flow 3 D ata-Driven Design and Interaction Part 2: The Pillars of Information......一起来看看 《D3.js in Action》 这本书的介绍吧!