Python 中的网络摄像头运动检测器2025年3月17日 | 阅读18分钟 我们都能看到,现在我们坐在家里就可以执行多项操作,而以前我们需要为此跑遍很多办公室。其中一些任务是使用网络摄像头完成的,例如用于官方文件、在线考试、在线监考以及许多其他任务。现在,每台笔记本电脑都内置了摄像头;因此,我们可以在家里完成所有这些任务。此功能使我们能够轻松地完成所有这些任务,而无需担心跑来跑去。除了这些好处之外,网络摄像头功能还为我们提供了坐在家里的便利,并节省了我们的时间。如今,我们可以利用我们系统的网络摄像头功能执行多项操作,并且可以利用它开发多个项目,而这些项目在过去我们无法做到。今天,我们可以做很多与开发和编程相关的工作,需要使用网络摄像头并利用我们系统的此功能开发许多项目。最流行的网络摄像头之一是将其用作运动检测传感器,以检测特定区域的运动。我们可以将我们系统的网络摄像头用作运动检测器,并将其用于需要运动检测器的多个操作。将网络摄像头用作运动检测器现在非常流行,人们也可以在家中使用此功能。是的,我们可以将我们的网络摄像头转换为运动检测器,而且完全靠我们自己。有很多选项可以用于将我们系统的网络摄像头转换为运动检测传感器,并在执行需要运动检测器的多项任务时使用它。 许多编程语言也为我们提供了将系统网络摄像头转换为运动检测传感器的选项。我们可以使用这些编程语言的库函数来编写一个程序,该程序在执行时将我们系统的网络摄像头用作运动检测器。Python 就是这样一种编程语言,它为我们提供了将系统网络摄像头转换为或用作运动检测器的选项。Python 中有多个库,它们包含大量有用的函数,我们可以使用这些函数编写一个程序,该程序在执行时将我们系统的网络摄像头用作运动检测传感器,并将其用于执行需要使用运动检测器的多项任务。我们可以通过使用许多模块或库(专门为开发目的设计)的函数来编写一个 Python 程序,当执行该程序时,我们系统的网络摄像头将被用作运动检测器。因此,在本教程中,我们将学习如何使用 Python 库及其函数来编写一个程序,该程序在执行时将使用我们系统的网络摄像头作为运动检测器。我们还将了解本教程中设计的程序的工作原理。 使用 Python 创建网络摄像头运动检测器简介众所周知,Python 是最强大的编程语言之一,因此在当今几乎所有领域都得到了广泛应用。Python 是拥有非常丰富的库的编程语言之一,这些库的函数对我们执行许多任务非常有用。Python 总是为我们提供一个或一组库,以供我们进行任何编程或开发相关的工作。因此,Python 被认为是拥有适用于我们希望进行的所有开发相关工作的函数和库的最强大的编程语言之一。正如我们已经讨论过的,网络摄像头功能使我们能够坐在家里执行许多任务,而以前我们必须为此跑来跑去;Python 有几个库,它们具有与我们系统网络摄像头配合使用的函数。通过使用 Python 这些库的函数,将我们系统的网络摄像头用作运动检测器也是可能的。因此,我们将使用一些这样的 Python 库及其函数来与我们系统的网络摄像头配合使用,并将其用作运动检测器。我们将在这里使用这些库及其函数编写一个 Python 程序,当我们运行此程序时,它将使用我们系统的网络摄像头作为运动检测器,直到我们退出程序。在本教程的后面部分,我们将设计我们上面讨论的这样一个程序,理解它的工作原理,并学习如何将我们系统的网络摄像头用作运动检测器。但首先,我们将学习此项目的要求以及设计这样一个程序所需的依赖项。 使用 Python 创建网络摄像头运动检测器:安装依赖项我们已经讨论了 Python 库,它们对于我们使用系统网络摄像头非常有用。在这里,我们将只讨论那些 Python 库或模块,它们的功能是设计一个用于将系统网络摄像头用作运动检测器的 Python 程序所必需的。在此项目中,我们将使用以下库的函数来设计所需的程序
OpenCV 和 Pandas 都是纯 Python 库,这些库也像 Python 一样是开源的。在继续本教程之前,我们应该确保这两个库都存在于我们的系统中。我们还应该确保我们的系统中安装了最新版本的 Python 或 Python 3 版本。如果有人使用的是旧版本(2.x 版本)的 Python,我们应该通过从 Python 官方网站安装最新版本来直接切换到最新版本。一旦我们有了最新版本的 Python,我们就可以开始安装本教程所需的库了。 (1)安装 OpenCV 库OpenCV 是一个 Python 库或模块,它带有多个函数,我们可以使用这些函数处理图片和视频。此 OpenCV 模块旨在通过在 Python 程序中使用此库的函数来处理 Python 中的图片和视频。因此,此库的函数对于我们编写本教程所需的程序变得非常重要。OpenCV 不是一个内置的 Python 模块,这意味着此模块不会随 Python 的安装一起安装。因此,我们应该首先确保此模块已安装在我们的系统中,如果此模块不存在于我们的系统中,我们必须首先安装此模块才能在此项目上工作。我们可以通过多种方法在我们的系统中安装 OpenCV 模块,但通过 pip 安装程序方法安装此模块是此模块最简单、最容易的安装方法。因此,我们将使用 pip 安装程序方法来安装此模块,并且要使用 pip 安装此模块;我们必须使用我们系统的命令提示符 shell。首先,我们必须打开我们系统的命令提示符 shell,之后,**我们必须写入以下 pip 安装命令,通过 pip 安装程序安装 OpenCV 模块:** 输入此命令后,我们必须按回车键,然后此模块的安装过程将开始。OpenCV 模块将在短时间内安装在我们的系统中,因为它需要许多依赖项,这些依赖项将随此模块一起安装。在我们的系统中成功安装此模块后,我们可以转到 Pandas 库的安装过程。 (2)安装 Pandas 模块Pandas 是 Python 的一个开源模块,旨在处理科学和数学相关的任务。Pandas 是 Python 最流行和最强大的库之一,拥有大量内置函数,可用于许多研究和开发相关的工作。Pandas 库可以在我们的系统上执行与系统软件、计算操作、开发项目以及许多其他相关的多项任务。因此,在本教程中,我们使用此模块的函数以及 OpenCV 模块的函数来创建所需的程序。Pandas 库函数将有助于计算和分析通过系统网络摄像头捕获的帧,从而使其作为运动检测器工作。我们将在本教程的后面部分理解所需程序的工作原理时了解更多信息。因此,在本教程中使用 Pandas 库及其函数对于项目的正常运行非常重要和必要。Pandas 库也不是 Python 的内置模块,这意味着此模块不会随 Python 的安装一起安装。因此,我们应该首先确保此模块已安装在我们的系统中,如果此模块不存在于我们的系统中,我们必须首先安装此模块才能在此项目上工作。我们可以通过多种方法在我们的系统中安装 Pandas 模块,但通过 pip 安装程序方法安装此模块也是此模块最简单、最容易的安装方法。因此,我们将使用 pip 安装程序方法来安装此模块,并且要使用 pip 安装此模块;我们必须使用我们系统的命令提示符 shell。首先,**我们必须打开我们系统的命令提示符 shell,之后,我们必须写入以下 pip 安装命令,通过 pip 安装程序安装 Pandas 模块:** 输入此命令后,我们必须按回车键,然后此模块的安装过程将开始。Pandas 模块将在短时间内安装在我们的系统中,因为它需要许多依赖项,这些依赖项将随此模块一起安装。在我们的系统中成功安装此模块后,我们可以转到本教程的下一部分。 注意:由于这两个库都已存在于我们的系统中,因此它将显示“要求已满足”,如安装窗口所示。如果模块尚不存在,它将安装模块到我们的系统中,并在成功安装模块后,在命令提示符 shell 的安装窗口上显示消息“模块已成功安装”。其他要求除了 pandas 和 OpenCV 库,我们还需要在所需的程序中使用许多 Python 的内置模块,这样我们就可以将我们系统的网络摄像头用作运动检测传感器。这些内置模块为通过网络摄像头在帧中检测到的运动提供支持。我们将在学习程序工作原理时了解更多信息。 以下是 Python 的内置模块,我们将在本教程的所需程序中使用它们的功能 (1)Python Datetime 模块:此内置模块处理与日期时间任务相关的函数,更具体地说,与日期相关的任务。 (2)Python Time 模块:这是 Python 的另一个内置模块,它处理执行时间相关任务和时间函数所需的函数。 现在,我们已经学习了本教程所需程序中将使用的所有必需模块的功能。我们现在可以继续程序的 मुख्य 逻辑,以便我们能够理解其工作原理以及其中多个模块功能的使用。 使用 Python 创建网络摄像头运动检测器:理解主要逻辑当我们谈论视频时,这意味着我们谈论的是帧或图片堆栈,这些移动的帧共同创建了一个视频。我们设计这个程序的基本目的是捕获不同的帧(图片堆栈),并将它们与视频中没有检测到运动的初始静态帧进行比较。这就是我们如何通过在系统网络摄像头中使用不同的滤镜来检测初始静态帧(未检测到运动)与随机捕获的帧之间对象位置和运动的差异。这种方法不仅有助于我们检测初始帧中对象位置的变化,还有助于我们通过监考过程跟踪运动。正如我们已经讨论过的,我们需要在哪些地方使用网络摄像头进行这些过程,我们在这里不再讨论,直接继续如何在这里使用运动检测器。我们从系统网络摄像头捕获的两幅图像或帧实际上是根据图像的像素强度进行比较的,这种像素强度差异有助于我们找出两幅图像之间的差异。为此,我们将设计一个 Python 程序,正如我们本教程中已经讨论过的,在该程序中,我们将使用 pandas、cv2 和许多内置模块的函数,以便我们可以比较通过系统网络摄像头捕获的图像的像素强度。在比较像素强度并找出捕获图像中的强度差异后,我们可以检测帧中对象的运动。这是我们将在其中编写的程序的主要逻辑,我们使用这些函数以便我们可以捕获差异并使用程序本身比较像素强度差异。 现在,我们都应该对程序的工作原理以及通过 Python 程序使用系统网络摄像头创建运动检测器的基本思想有一个基本的了解。当我们编写和执行程序并在实现部分理解程序中使用的函数时,我们将对此有更多的了解。但是,首先,我们将继续本教程所需的程序,并执行它以了解我们的网络摄像头作为运动检测器的工作原理。 使用 Python 创建网络摄像头运动检测器:所需程序在本教程的这一部分,我们将编写所需的程序,并在解释部分理解该程序的工作原理,以了解我们在程序中使用的函数是如何工作和执行的。我们将使用我们在本教程的早期部分中讨论过的所有不同模块(包括内置模块)的函数。该程序将在我们的系统屏幕上打开多个具有不同滤镜的帧,用于通过不同方法捕获运动。一旦我们执行程序,这些不同的过滤后的网络摄像头屏幕将打开,我们可以在程序执行后理解这些不同网络摄像头屏幕的工作原理。这就是这个 Python 程序将如何帮助我们使用我们系统的网络摄像头作为运动检测器,以检测视频帧中对象位置和运动的变化。 请看以下 Python 程序,我们在其中使用了多个模块的函数,以便在执行此程序时将我们的系统网络摄像头用作运动检测器 输出 当我们运行程序时,输出屏幕上将打开四种不同类型的视频帧,这些视频帧将捕获初始帧中存在并稍后添加到视频帧中的对象的运动。除了帧之外,一个包含所有运动时间细节的 CSV 文件将保存在代码所在的同一目录中,但我们将在理解所有四个输出视频帧后讨论这一点。这些帧有其自己的特点,我们将通过解释每个帧的功能来描述它们。每个帧都将用于捕获运动,并使用我们系统的网络摄像头作为运动检测器工作。这 4 个视频帧窗口将捕获不同类型的结果,每个窗口都有不同的输出,因此,我们将它们作为程序的输出单独研究。**以下是执行程序时将在输出窗口中显示给我们的不同颜色帧的描述:** (1)灰度帧:输出屏幕上打开的第一个视频帧是灰度帧。灰度帧中显示的图像以灰度或灰色阴影显示(因此此帧被称为灰度帧),并且它也略微模糊。正如我们所知,RGB(红、绿和蓝)图像帧有三个强度值。但是,灰度图片帧中只有一个强度值,如这里所示。这使得捕获灰度帧中对象的强度值差异变得更加容易。 灰度图片帧的最终输出窗口作为程序的输出显示 ![]() (2)差异帧:我们没有将此帧命名为黑白帧,而是将其命名为差异帧,因为我们将通过此视频帧捕获初始静态帧和当前帧中强度值的差异。通过此帧,我们可以使用初始静态帧和当前帧中强度值的差异来检测帧中的运动以及帧中对象的移动。 以下是输出屏幕中显示的最终差异帧 ![]() (3)彩色帧:这是一个彩色帧,图像以彩色阴影格式显示(就像我们通常在相机或系统网络摄像头中看到的那样)。我们在彩色帧中捕获彩色图像,彩色帧中存在的对象的运动在运动发生区域周围用绿色矩形突出显示。 彩色图片帧的最终输出窗口作为程序的输出显示 ![]() (4)阈值帧:这是高斯模糊图片滤镜帧,我们在灰度图片滤镜之后在程序中应用了该滤镜。正如我们在程序中定义的那样,当像素强度变化超过 30 时,像素将以白色突出显示。在相反的情况下,当像素强度变化小于 30 时,像素差异将以黑色突出显示。 以下是输出屏幕中显示的最终阈值帧 ![]() 运动和运动时间记录现在,我们已经了解了程序成功执行后将在输出窗口中显示的所有四个帧。除了这些帧之外,正如我们所讨论的,一个包含所有运动时间记录的 CSV 文件将保存在我们系统的目录中(与所需程序所在的同一位置)。该文件将以 CSV 扩展名存在,我们可以使用 Microsoft Excel、Google Sheets 或任何其他推荐的软件打开此文件。当我们打开此文件时,我们将看到所有初始和最终运动的时间都将在此处显示,并在“初始”和“最终”列下带有时间戳(如我们在程序中定义名称)。 这些时间表示帧中运动何时开始和何时结束,如下面我们系统中保存的文件所示 ![]() 解释: 首先,我们已将所有必需的模块(cv2、pandas、time 和 datetime)导入程序中,以使用它们的功能来构建所需的程序。之后,我们用多个变量(staticBack 和 motionList)定义了帧的静态位置,并将其初始值定义为“None”,以将它们设置为静态视频帧。我们还定义了一个时间列表来捕获帧中发生运动的时间。我们还创建了一个数据框来存储运动发生时的开始时间和结束时间。之后,我们使用了 OpenCV 库中的 videocapture () 函数从系统网络摄像头捕获视频,并使用 read() 函数开始读取每个视频帧。现在,我们使用 cv2 模块函数创建了一个灰度图像,之后,我们使用此灰度图像变量从系统网络摄像头创建了一个灰度帧。我们还使用捕获的灰度图像创建了高斯模糊,并创建了一个高斯模糊帧。然后,我们使用静态帧变量创建了一个不同的帧,并将其用作黑白帧来捕获运动。我们还创建了一个 threshFrame,通过突出显示更改来捕获对象的运动,我们使用定义的 differFrame 创建了它。 然后,我们在阈值帧中创建了轮廓以检测帧中的运动和移动。之后,我们定义了 x、y 和宽度及高度变量,以在检测到运动的帧区域周围创建一个矩形。这有助于我们识别帧中对象的移动,并用绿色矩形将其在帧中指出。之后,我们使用我们定义的 motionList 变量在帧中添加了运动状态。我们使用了 if 方法将运动的开始时间和结束时间添加到 motion list 变量中,以便我们可以将其用于进一步的用途。之后,我们显示了到目前为止我们定义的各种帧,并以不同的方式进行标注,例如彩色帧、黑白帧等。当我们执行程序时,所有这些帧将一次性打开。之后,我们定义了等待键,并使用 if 语句一次性关闭所有帧。当我们按下定义的键(在此程序中为“m”)时,它将一次性关闭所有打开的帧。之后,我们将所有运动时间附加到我们定义的数据框中,该数据框来自我们之前存储此数据的 motionList。我们将此数据导入到名为“MovementsTimeFile”的 CSV 文件中,此文件将保存在我们的代码所在的同一目录中。最后,我们关闭或销毁了我们打开的所有窗口,并退出了正在运行的程序。 结论在本教程中,我们使用了多个模块来编写所需的程序,使其成功执行。我们使用此程序创建了不同类型的帧,这些帧将用于捕获帧中的运动并充当运动检测器。这就是我们如何使用 Python 程序将我们的系统网络摄像头用作运动检测器来捕获视频帧中对象的运动。 |
我们请求您订阅我们的新闻通讯以获取最新更新。