使用 OpenCV 进行运动检测

重磅干货,第一时间送达

Raspberry Pi 3 上的 OpenCV 运动检测

这篇文章将解释如何实现基本的运动检测,这可以用于我们的基于触发器的监控系统。

什么是 OpenCV?

OpenCV 是一个开源的计算机视觉库,它的目标是提供一个简单易用的计算机视觉基础设施,帮助人们快速构建复杂的应用程序。它包含 500 多项功能,涵盖许多视觉领域,包括工厂产品检测、医学成像、安全、用户界面、相机校准、立体视觉和机器人技术。

— 学习 OpenCV,Gary Bradski 和 Adrian Kaehler,O'Reilly

安装 OpenCV

我们指的是PiImageSearch安装OpenCV的教程以及本文档。在开始安装之前,只需更新系统—sudo apt update

1.安装库和依赖项

$ sudo apt-get install libjpeg-dev libpng-dev libtiff-dev $ sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev $ sudo apt-get install libxvidcore-dev libx264-dev

2.安装GTK(GUI后端)

$ sudo apt-get install libgtk-3-dev $ sudo apt-get install libcanberra-gtk*

3. OpenCV的数值优化

$ sudo apt-get install libatlas-base-dev gfortran

4. Python3 开发头文件

$ sudo apt-get install python3.7-devAfter installing to check if the dev files are installed in correct directory check using this command$ python3.7-config --includes-I/usr/include/python3.7m -I/usr/include/python3.7mThe first path is expected and second is current path. If they are not the same then you need to perform a copy command to change the current path$ sudo cp /current/path/to/dev/file/pyconfig.h /usr/include/python3.7mpyconfig.h is the dev file that you need to copy to correct directory

5.安装pip

$ sudo apt-get install python3-pipIf this won't work then use the following commands$ wget https://bootstrap.pypa.io/get-pip.py$ sudo python3 get-pip.py$ sudo apt autoremoveIf pip is already installed then make sure it's the latest version $ pip --versionIf not then - $ pip install --upgrade pip

6.虚拟环境

$ sudo pip install virtualenv virtualenvwrapper$ sudo rm -rf ~/get-pip.py ~/.cache/pipUpdate .bashrc to finish installing the tools, use nano or similar text editor - # virtualenv and virtualenvwrapperexport WORKON_HOME=$HOME/.virtualenvsexport VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3source /usr/local/bin/virtualenvwrapper.shsave and exitAnd finally create the virtual environment- $ mkvirtualenv cv -p python3Verify if cv environment is working or not - $ workon cv(cv) pi@raspberrypi:~$(cv) indicates that we are inside a virtual environment

7.其他库

Install Numpy$ pip install numpyInstall imutils$ pip install imutils

8.最后是 OpenCV

当我们尝试安装 OpenCV 时,安装需要花费大量时间,即使反复尝试安装,RasPi 仍然挂起。增加交换内存让我们在没有内存耗尽的情况下编译 OpenCV,Pi 不会挂起。即使在增加交换内存后,在我们的 Pi 3 上安装也需要大约 5 小时。

$ sudo nano /etc/dphys-swapfileEdit CONF_SWAPSIZE asCONF_SWAPSIZE=2048

保存并退出,使用这些命令检查交换内存 。

$ free -m$ swapon -s

增加交换内存只占用SD卡的空间,所以增加交换内存后只执行OpenCV安装。

现在安装 OpenCV

$ pip install opencv-python$ pip install opencv-contrib-python // Ref.

装完成后,将交换内存恢复为原始值。CONF_SWAPSIZE=100

验证 OpenCV 是否安装成功 :

验证 OpenCV 安装

实现

我们使用 piimagesearch 的教程来实现基本的运动检测,它提供了开源的代码,并且可以下载。当我在Pi上运行此代码时,出现了此错误。

运行代码时出错

当我搜索imshow功能时,我明白代码需要X-server才能运行。因为我正在对我的 Pi 执行 ssh,所以代码没有运行。运行此命令使我可以在 ssh 期间访问 X-server。

ssh -Y pi@<IP>

然后我再次运行python代码,我得到了这三个窗口——

运行 piimagesearch 的 Python 代码

根据教程,代码需要第一帧为空来检测该区域是被占用还是未被占用。

3个窗口分别是:

Thresh基本上是使用图像阈值创建的,该阈值用于使图像更易于分析。

Frame Delta,这是一个灰度图像。

Security Feed,是最后的视频源,它显示框架中是否有人,该区域是否已被占用/未占用。

这段代码非常基础,正如我们所看到的,即使框架中只有我,代码也会感应其他运动,就像电风扇的一片扇叶一样,并且有多个块,所以需要更多的逻辑来建立在它之上。

这个实现还帮助我们了解我们是否可以在像Raspberry Pi这样的低规格系统中实现 OpenCV。尽管从介绍的 GIF 中可以看出,响应速度很慢,但这是运动检测的基本演示,我将在以后的文章中介绍更多用例。

(0)

相关推荐

  • 解决jetson Nano中python版本问题(Ubuntu系统都适用)

    jetson 的环境搭建遇到了很多的问题,这里开帖子记录一下 sudo easy_install pip sudo apt-get install python3-pip 还有这个是最烦的问题,版本这 ...

  • Ubuntu 升级python3为更高版本【已实测】

    目录 更新安装步骤: 1. 先update一下 2. 安装依赖库 3. 下载Python3安装包,并解压安装 4. 删除软连接 5. 新建软连接 6. 检测版本: 可能遇到的错误: 1. 在安装依赖包 ...

  • python pip 的安装、更新、卸载、降级、和使用 pip 管理包

    ____tz_zs 安装 pip 安装 pip 官网的安装方式(推荐) curl https://bootstrap.pypa.io/get-pip.py -o get-pip.pypython ge ...

  • [opencv]吊诡的摄像头黑屏

    #include <opencv2/core.hpp> #include <opencv2/videoio.hpp> #include <opencv2/highgui. ...

  • 如何使用OpenCV实现图像均衡???

    重磅干货,第一时间送达 我们已经练习了很多图像处理--操作图像(精确地说是图像矩阵).为此,我们探索了图像的均衡方法,以便在一定程度上增强对比度,以使被处理的图像看起来比原始图像更好,这种技术称为直方 ...

  • 219个opencv常用函数汇总

    本文转自|新机器视觉 1.cvLoadImage:将图像文件加载至内存: 2.cvNamedWindow:在屏幕上创建一个窗口: 3.cvShowImage:在一个已创建好的窗口中显示图像: 4.cv ...

  • 基于OpenCV实战:车牌检测

    重磅干货,第一时间送达 拥有思维导图或流程将引导我们朝着探索和寻找实现目标的正确道路的方向发展.如果要给我一张图片,我们如何找到车牌并提取文字? 一般思维步骤: 识别输入数据是图像. 扫描图像以查看由 ...

  • 基于OpenCV实战的图像处理:色度分割

    重磅干货,第一时间送达 通过HSV色阶使用彩色图像可以分割来分割图像中的对象,但这并不是分割图像的唯一方法.为什么大多数人偏爱色度而不是RGB / HSV分割? 可以获得RGB / HSV通道之间的比 ...

  • 【福利】OpenCV最新中文版官方教程来了(附下载)

    OpenCV 中文版官方教程来了. OpenCV是计算机视觉中经典的专用库,然而其中文版官方教程久久不来.近日,一款最新OpenCV4.1 版本的完整中文版官方教程出炉,读者朋友可以更好的学习了解Op ...

  • 迅为i.MX6ULL开发板-移植OpenCv2.4.9-搭建OpenCv编译环境

    本章节将介绍 OpenCV 的移植方法,及结合 Qt 例程去进一步学习 OpenCV 识别图像.本章节使用的资料已经放到了开发板网盘资料中,路径为:"11_Linux 系统开发进阶\85_章 ...

  • 使用Python OpenCV实现姿态估计

    什么是OpenCV? 计算机视觉是一个能够理解图像和视频如何存储和操作的过程,它还有助于从图像或视频中检索数据.计算机视觉是人工智能的一部分. 计算机视觉在自动驾驶汽车,物体检测,机器人技术,物体跟踪 ...

  • 基于OpenCV的实战:轮廓检测(附代码解析)

    重磅干货,第一时间送达 利用轮廓检测物体可以看到物体的各种颜色,在这种情况下放置在静态和动态物体上.如果是统计图像,则需要将图像加载到程序中,然后使用OpenCV库,以便跟踪对象. 每当在框架中检测到 ...