全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 数据分析与数据挖掘
713 1
2022-08-16
概述
由于 Python 编程语言提供了多个开源库,因此使用 Python 进行运动检测很容易。运动检测有许多实际应用。例如,它可用于在线考试的监考或商店、银行等的安全目的。

介绍
Python 编程语言是一种开源库丰富的语言,它为用户提供了大量的应用程序并拥有大量用户。因此,它在市场上快速增长。由于其简单的语法、易于发现的错误和快速的调试过程,使其更加用户友好,因此 Python 语言的优点是无穷无尽的。

Python 于 1991 年设计,由 Python 软件基金会开发。发布了许多版本的python。其中,python2 和 python3 是最著名的。目前主要使用python3,python3的用户增长很快。在这个项目或脚本中,我们将使用 python3。

什么是运动检测?
根据物理学,当一个物体静止不动并且没有速度时,它被认为是静止的,而恰恰相反,当一个物体没有完全静止并且在某个方向上有一些运动或速度时,或者向左-右、前后或上下,则认为它处于运动状态。在本文中,我们将尝试检测它。 yada_perform_motion_detection_python_2.gif

运动检测有许多现实生活中的实现或用途,可以证明它的价值,例如使用网络摄像头监考在线考试(我们将在本文中实现),作为保安等。

在本文中,我们将尝试实现一个脚本,通过该脚本我们将使用台式机或笔记本电脑的网络摄像头检测运动。我们的想法是我们将拍摄两帧视频并尝试找出它们之间的差异。如果两帧之间存在某种差异,那么很明显,相机前面的物体发生了某种运动,从而产生了差异。

重要图书馆

在开始代码实现之前,让我们看一下我们将通过代码使用网络摄像头进行运动检测的一些模块或库。正如我们已经讨论过库在 python 的声名中扮演着重要的角色,让我们看看我们需要什么:


open-cv
pandas

上述两个库,OpenCV 和 Pandas 都是纯粹基于 Python 的、免费的开源库,我们将在 Python3 版本的 Python 编程语言中使用它们。

1.OpenCV
OpenCV是一个开源库,可与 C++、Python 等多种编程语言一起使用。它用于处理图像和视频,通过使用或与 python 的 panda/NumPy 库集成,我们可以充分利用OpenCV 的特性。


2.pandas:
正如我们所讨论的,“ pandas ”是 Python 的一个开源库,并提供了丰富的内置数据分析工具,因此它被广泛用于数据科学和数据分析流中。我们在 pandas 中以数据结构的形式提供数据帧,这有助于将表格数据操作和存储到二维数据结构中。上面讨论的两个模块都不是python

内置的,我们必须在使用前先安装它们。除此之外,我们将在项目中使用另外两个模块。

Python 日期时间模块
Python 时间模块
这两个模块都是python内置的,以后不需要安装。这些模块分别处理与日期和时间相关的功能。


代码实现
到目前为止,我们已经看到了我们将在代码中使用的库,让我们从视频只是许多静态图像或帧的组合开始它的实现,所有这些帧组合起来创建一个视频:

导入所需的库
在本节中,我们将导入所有库,例如 pandas 和 panda。然后我们从 DateTime 模块中导入 cv2、time 和 DateTime 函数。
复制代码
在本节中,我们初始化了一些我们将在代码中进一步使用的变量。我们将初始状态定义为“无”,并将跟踪的运动存储在另一个变量 motionTrackList 中。

我们定义了一个列表“motionTime”来存储发现运动的时间并使用 panda 的模块初始化 dataFrame 列表。
复制代码
主要捕获过程

在本节中,我们将执行主要的运动检测步骤。让我们逐步理解它们:

  • 首先,我们将开始使用 cv2 模块捕获视频并将其存储在 video 变量中。
  • 然后我们将使用无限循环来捕获视频中的每一帧。
  • 我们将使用 read() 方法读取每一帧并将它们存储到各自的变量中。
  • 我们定义了一个可变运动并将其初始化为零。
  • 我们使用 cv2 函数 cvtColor 和 GaussianBlur 创建了另外两个变量 grayImage 和 grayFrame 来查找运动的变化。
  • 如果我们的 initialState 是 None 那么我们将当前的 grayFrame 分配给 initialState 否则并使用 'continue' 关键字停止下一个进程。
  • 在下一节中,我们计算了我们在当前迭代中创建的初始帧和灰度帧之间的差异。
  • 然后我们将使用 cv2 阈值和扩张函数突出显示初始帧和当前帧之间的变化。
  • 我们将从当前图像或帧中的移动对象中找到轮廓,并通过使用矩形函数在其周围创建绿色边界来指示移动对象。
  • 在此之后,我们将通过添加当前检测到的元素来附加我们的motionTrackList。
  • 我们使用imshow方法显示了所有的帧,如灰度和原始帧等。
  • 此外,我们使用 cv2 模块的 witkey() 方法创建了一个键来结束进程,我们可以使用“m”键来结束我们的进程。
复制代码
完成代码
关闭循环后,我们会将 dataFrame 和 motionTime 列表中的数据添加到 CSV 文件中,最后关闭视频。
复制代码
流程总结

我们已经创建了代码;现在让我们再次简要讨论该过程。
首先,我们使用设备的网络摄像头拍摄视频,然后将输入视频的初始帧作为参考,并不时检查下一帧。如果找到与第一个不同的帧,则存在运动。这将在绿色矩形中标记。

      相关帖子DA内容精选
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2022-8-16 20:29:26
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群