WHCSRL 技术网

在树莓派 4 上安装 OpenCV 4.5.4+ Python3.7

准备工作1:拓展文件系统

首先你要确定你有没有拓展文件系统?如果没有的话需要先进行设置:

sudo raspi-config

选择高级选项菜单

 然后选择拓展文件系统

之后系统会提示你重启,如果没有的话通过命令重启

sudo reboot

准备工作2:安装依赖关系

第一步需要更新和升级现有的软件包:

sudo  apt-get update

sudo apt-get upgrade

这可能需要花费你几分钟的时间,如果速度过慢可以选择换软件源 :

1 在命令窗口输入 sudo nano /etc/apt/sources.list(sudo 是指系统管理员权限启动,nano是树莓派内置的轻量级文本编辑器,/etc/apt/sources.list是软件源的配置文件地址)

2 将原本的内容全部注释掉(在文件前面加#号),然后复制粘贴以下内容到最下方:

deb http://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian/ buster main non-free contrib rpi
deb-src http://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian/ buster main non-free contrib rpi

(这是国内的清华源,自用感觉还不错)

如下图所示:

然后Ctrl+O写入 ,Enter确定  ,Ctrl+X退出

第二步 我们需要一些开发工具,包括CMAKE

sudo apt-get install build -essential cmake pkg-config

第三步,我们需要一些图像和视频的I/O包以确保能处理视频流和图片

图像包:

sudo apt-get install libjpeg-dev libtiff5-dev libjasper-dev libpng12-dev

视频包:

sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev

sudo apt-get install libxvidcore-dev libx264-dev

第四步,为了编译OpenCV的highgui模块,我们需要安装GTK开发库(highgui模块用于在屏幕上显示图像并构建基本的GUI)

sudo apt-get install libgtk2.0-dev libgtk-3-dev

第五步,安装一些额外的依赖进一步优化矩阵操作

sudo apt-get install libatlas-base-dev gfortran

第六步,安装python3头文件来绑定编译Opencv

sudo apt-get python3-dev

下载OpenCV源代码

做好所有准备工作之后,我们可以从OpenCV官方的仓库中获取,我现在的版本是OpenCV4.5.4,可以通过访问官方仓库查询最新版本,然后后面的版本号全部替换4.5.4就可以。

查询版本

 确定了版本号就让我们开始安装:

cd  - (进入主目录,下载路径为/home/pi/)

wget -O opencv.zip https://github.com/Itseez/opencv/archive/4.5.4.zip  #获取压缩包

unzip opencv.zip  #解压

我们还需要获取OpenCV_contrib存储库注意:确保OpenCV和 OpenCV_contrib版本相同

 cd -

wget -O opencv_contrib.zip https://github.com/Itseez/opencv_contrib/archive/4.5.4.zip

unzip opencv_contrib.zip

在开始编译OpenCV之前,我们需要安装Python pip

wget https://bootstrap.pypa.io/get-pip.py

sudo python3 get-pip.py

了解虚拟环境virtualenv和virtualenvwrapper

虚拟环境是一种特殊工具,他可以为每个不同的项目创建不同的环境以满足需要,它解决了项目A需要版本2.7,而B项目需要3.7的问题

开始安装:

sudo pip install virtualenv  virtualenvwrapper

sudo rm -rf ~/.cache/pip    #删除 pip安装缓存目录

安装好之后我们需要配置文件:

sudo nano ~/.profile    #进入profile配置

在# virtualenv and virtualenvwrapper后面添加:

export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3
export WORKON_HOME=/home/pi/.virtualenvs
source /usr/local/bin/virtualenvwrapper.sh

 然后Ctrl+O写入 ,Enter确定  ,Ctrl+X退出

现在配置文件更新之后,我们需要应用它:

source ~/.profile

创建Python虚拟环境

mkvirtualenv cv -p python3     #cv是我给我的镜像起的名字,当然你可以起任何名字

下面是我整理的一些虚拟环境的常用命令:

mkvirtualenv # 创建虚拟环境
rmvirtualenv # 删除虚拟环境
workon # 进入虚拟环境、查看所有虚拟环境
deactivate # 退出虚拟环境

进入虚拟环境:

source ~/.profile

workon cv

当你重启树莓派或者或者打开一个新的终端都需要通过这个命令重新进入虚拟环境

为了验证你在虚拟环境中,当你看到(cv)就表示你在虚拟环境中

在你的Raspberry Pi上安装NumPy

现在我们进入虚拟环境cv中,我们需要的唯一依赖就是NumPy

pip install numpy

编译安装OpenCV

第一步首先我们要确保进入虚拟环境,同上进入步骤

第二步我们要使用CMake来配置我们的版本

cd ~/opencv-4.5.4/    #进入opencv的文件夹

mkdir build    #创建安装目录

cd build    #进入安装目录

 sudo cmake -D CMAKE_BUILD_TYPE=RELEASE
    -D CMAKE_INSTALL_PREFIX=/usr/local
    -D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib-4.5.4/modules
    -D INSTALL_PYTHON_EXAMPLES=ON
    -D BUILD_EXAMPLES=ON ..

 #/CMAKE_BUILD_TYPE是编译方式
    CMAKE_INSTALL_PREFIX是安装目录
    OPENCV_EXTRA_MODULES_PATH是加载额外模块
    INSTALL_PYTHON_EXAMPLES是安装官方python例程
    BUILD_EXAMPLES是编译例程(这两个可以不加,不加编译稍微快一点点,想要C语言的例程  的话,在最后一行前加参数INSTALL_C_EXAMPLES=ON,要C++例程的话在最后一行前加参数INSTALL_C_EXAMPLES=ONINSTALL_CXX_EXAMPLES=ON)

#

第三步编译前配置交换空间大小

完成Cmake配置之后回到最上级目录

打开你的sudo  nano /etc/dphys-swapfile然后修改CONF_SWAPSIZE变量:

这使得编译不会因为内存问题停止

然后我们要激活交换空间:

sudo /etc/init.d/dphys-swapfile stop    #停止

sudo /etc/init.d/dphys-swapfile starting  #启动

现在我们重新进入目录准备开始编译

cd ~/opencv-4.5.4/build

sudo make -j4  #编译

编译的过程需要大概一个小时左右,需要耐心等待。

编译完成之后,应该如下图所示:

然后我们开始安装它:

sudo make install   #安装

sudo ldconfig  #更新动态链接库

安装之后,OpenCV应该安装在/usr/local/lib/python3.7/site-packages中,我们用ls命令验证一下

我们可以看到cv2文件 ,现在我们要将他绑定到Python 3.7 的虚拟环境中

cd ~/.virtualenvs/cv/lib/python3.7/site-packages/

ln -s /usr/local/lib/python3.7/site-packages/cv2 cv2

 

当一切就绪之后我们需要测试以下OpenCV是否安装正常,我们可以试着查询以下OpenCV的版本

 python3

import cv2

cv2.__version__

 

最后不要忘记更换交换大小!!!

如果忘记这一步可能会导致内存损坏

sudo  nano /etc/dphys-swapfile

 进入之后将刚刚的1024注释掉然后原来的100取消注释,最后重启即可:

sudo /etc/init.d/dphys-swapfile stop    #停止

sudo /etc/init.d/dphys-swapfile starting  #启动

推荐阅读