Python运动检测编程实战演练

网站建设5年前发布
32 0 0

​译者 | 朱先忠,审校 | 孙淑娟,2023030610134489db89e813b5c7f9f99564a0cb5749dddb3531421,由于Python编程语言面临多个开源库可用;因此,选择Python语言进行运动检测开发是很容易的。目前,运动检测已经有许多的商业应用。例如,它可以用于在线考试的监考,也可以用于商店、银行等领域的安全目的。,Python编程语言是一种开源的且支持库极其丰富的语言,如今基于此语言已经为用户开发了大量的应用程序,并拥有大量用户。正因为如此,Python语言在市场上快速增长。Python语言的优点不胜枚举,不仅是因为它的语法简单、易于发现错误,而且其非常迅速的调试过程使其对用户更加友好。,为什么建议您学习Python呢?我们可以使用下图来简单说明:,20230306101539628a0d4964c86580110345b0ef569f0b174310373,Python于1991年设计,由Python软件基金会开发。如今已经发布了许多版本。其中,Python2和Python3最为著名。目前,Python3已经被广泛使用,用户数量也在快速增长。在本文这个项目中,我们将使用Python3作为开发语言。,根据物理学原理,当一个物体静止不动且没有速度时,它就被认为处于静止状态;而恰恰相反的是,当一物体没有完全静止且在某个方向(无论是左右、前后或上下)上有一定的运动或速度时,它都被认为处于运动状态。在本文中,我们将尝试检测出物体的运行情况。,2023030610154196ab32325b92d47bbf37185a5c2a987c74a129765,目前,运动检测在现实生活中已经存在大量实现或应用,这充分证明其巨大的应用价值。其中,使用网络摄像头(我们将在本文中实现)作为安全警卫进行在线考试监考等是最典型的应用。,在本文中,我们将尝试实现一个脚本。通过该脚本,我们将使用台式机或笔记本电脑上安装的网络摄像头实现对物体运动的检测。我们的想法是,我们将拍摄两帧视频,并试图找出它们之间的差异。如果两帧之间存在某种差异,那么很明显,相机前面的物体存在某种移动,这就产生了差异。,在着手实现代码之前,让我们先看看我们将在代码中使用的一些模块或库,这些模块或库用于操作网络摄像头进行运动检测。正如我们所讨论的,这些开源库对于Python声誉的传播起着重要作用。让我们看看本文示例项目中需要的开源库:,上述两个库OpenCV和Pandas都是纯粹基于Python的免费开源库,我们将通过Python语言的Python3版本来使用它们。,OpenCV是一个非常著名的开源库,可以与许多编程语言(如C++、Python等)一起使用,专门应用于处理图像和视频程序开发。通过与Python的开源库Pandas或者NumPy库集成应用,我们可以充分挖掘出OpenCV的功能。,Pandas是一个开放源码的Python库,为数据分析提供了丰富的内置工具;因此,在数据科学和数据分析领域得到了广泛的应用。在Pandas中提供了数据结构形式DataFrame数据帧,这种结构对于将表格数据操作和存储到二维数据结构中提供了极方便的支持。,上述两个模块都不是Python内置的,我们必须在使用前先安装它们。除此之外,我们还将在项目中使用另外两个模块。,这两个模块都内置在Python中,以后无需安装。这些模块分别用来处理与日期和时间相关的功能。,到目前为止,我们已经看到了我们将在代码中使用的库。接下来,让我们从视频只是许多静态图像或帧的组合这一假定开始,然后使用所有这些帧的组合来创建一个视频。,在本节中,我们将首先导入所有库,如Pandas和OpenCV。然后,我们从DateTime模块导入time和DateTime函数。,在本节中,我们要初始化一些变量,并将在代码中进一步使用这些变量。首先,我们将初始状态定义为“None”,然后通过另一个变量motionTrackList来存储跟踪的运动。,此外,我们还定义了一个列表“motionTime”,用于存储发现运动的时间,并使用Panda的模块初始化数据帧列表。,在本节中,我们将实现本文示例项目中最关键的运动检测步骤。下面,让我们分步骤进行解说:,在结束循环体执行后,我们将从dataFrame和motionTime列表中添加数据到CSV文件中,最后关闭视频。这一部分代码的实现如下所示:,至此,我们已经成功地创建完所有代码。现在,让我们再次归纳一下整个过程。,首先,我们使用设备的网络摄像头捕捉视频,然后将输入视频的初始帧作为参考,并不时检查下一帧。如果发现与第一帧不同的帧,则说明存在运动。该信息将被标记在绿色矩形中。,现在,让我们把上面所有代码片断连接到一起,如下所示:,运行上述代码后得到的结果与下面看到的结果类似。,2023030610134575312ae13759cda813082184c1132c2099fdd0602,从这个动画中,我们可以看到该男子在视频中的动作已经被跟踪。因此,可以相应地看到输出结果。,然而,在这段代码中,跟踪是在移动对象周围的矩形框的帮助下完成,类似于下面动画中所示的。这里要注意的一件有趣的事情是,这段视频是一个实际的安全摄像头的镜头,已经对其进行了检测处理。,20230306101346215a7e886379269d8c058172c2049047f90198666,最后来归纳一下。本文中所介绍的运动检测的主要思想是,每个视频只是许多静态图像(称为帧)的组合,我们是通过判断帧之间的差异来实现运行检测的。,朱先忠,51CTO社区编辑,51CTO专家博客、讲师,潍坊一所高校计算机教师,自由编程界老兵一枚。早期专注各种微软技术(编著成ASP.NET AJX、Cocos 2d-X相关三本技术图书),近十多年投身于开源世界(熟悉流行全栈Web开发技术),了解基于OneNet/AliOS+Arduino/ESP32/树莓派等物联网开发技术与Scala+Hadoop+Spark+Flink等大数据开发技术。,原文标题:How to Perform Motion Detection Using Python​,作者:Vaishnavi Amira Yada​

© 版权声明

相关文章