前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用 OpenCV 进行运动检测

使用 OpenCV 进行运动检测

作者头像
小白学视觉
发布2022-02-09 12:38:42
8800
发布2022-02-09 12:38:42
举报
文章被收录于专栏:深度学习和计算机视觉

Raspberry Pi 3 上的 OpenCV 运动检测

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

什么是 OpenCV?

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

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

安装 OpenCV

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

1.安装库和依赖项

代码语言:javascript
复制
$ 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后端)

代码语言:javascript
复制
$ sudo apt-get install libgtk-3-dev 
$ sudo apt-get install libcanberra-gtk*

3. OpenCV的数值优化

代码语言:javascript
复制
$ sudo apt-get install libatlas-base-dev gfortran

4. Python3 开发头文件

代码语言:javascript
复制
$ sudo apt-get install python3.7-dev
After 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.7m
The 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.7m
pyconfig.h is the dev file that you need to copy to correct directory

5.安装pip

代码语言:javascript
复制
$ sudo apt-get install python3-pip
If this won't work then use the following commands
$ wget https://bootstrap.pypa.io/get-pip.py
$ sudo python3 get-pip.py
$ sudo apt autoremove
If pip is already installed then make sure it's the latest version 
$ pip --version
If not then - 
$ pip install --upgrade pip

6.虚拟环境

代码语言:javascript
复制
$ sudo pip install virtualenv virtualenvwrapper
$ sudo rm -rf ~/get-pip.py ~/.cache/pip
Update .bashrc to finish installing the tools, use nano or similar text editor - 
# virtualenv and virtualenvwrapper
export WORKON_HOME=$HOME/.virtualenvs
export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3
source /usr/local/bin/virtualenvwrapper.sh
save and exit
And finally create the virtual environment- 
$ mkvirtualenv cv -p python3
Verify if cv environment is working or not - 
$ workon cv
(cv) pi@raspberrypi:~$
(cv) indicates that we are inside a virtual environment

7.其他库

代码语言:javascript
复制
Install Numpy
$ pip install numpy
Install imutils
$ pip install imutils

8.最后是 OpenCV

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

代码语言:javascript
复制
$ sudo nano /etc/dphys-swapfile
Edit CONF_SWAPSIZE as
CONF_SWAPSIZE=2048

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

代码语言:javascript
复制
$ free -m
$ swapon -s

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

现在安装 OpenCV

代码语言:javascript
复制
$ 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 中可以看出,响应速度很慢,但这是运动检测的基本演示,我将在以后的文章中介绍更多用例。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-10-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 小白学视觉 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档