更新

时间过得好快!一直有同学收藏这个博文,能帮到大家感觉好开心!

更新一波,把我们耗时四个多月的成品展示一下,作品拿到了2020年计算机设计大赛国二的成绩,赛道是物联网应用-医药卫生。

视频地址在小破站:2020计设国二作品——智能药箱,希望对大家参加比赛有所帮助。

2022年5月8日
————————————————————————————————————

如何在树莓派4上配置OpenCV

开学要参加计设,项目是基于树莓派的视觉识别和语音识别的系统,由于疫情影响,取消了队友来冀一起做项目的计划,2月17号开始和队友一起连麦从0做起。
树莓派上安装OpenCV的确是个很复杂的事情,找到一个好的教程可以让你事半功倍。我安装时主要参考同济大学子豪兄的教程,可能年代久远,版本更新带来了一些不相容的错误,在这个基础上我也出现了一些错误,还参考了以下文章:
对于opencv2/xfeatures2d/cuda.hpp: No such file or directory 类问题的解决方法
为什么Opencv3.4.0使用make编译时出现错误?
无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系
总之,经历了两天的折磨,终于在树莓派上安装好了OpenCV,可喜可贺!!!把方法分享给大家~也在这里给自己做个备忘。

1. 安装前提

1.1 配置好树莓派的Raspbian操作系统

本教程使用的是2020年2月13号官网发布的最新Raspbian操作系统,地址在此
在这里插入图片描述
如何安装系统在此不再赘述,请自行百度。这里请注意,该操作系统是基于Debian Buster的。

1.2 切换到国内的apt-get下载源和pip下载源

防止下载速度过慢。
①打开文件

sudo nano /etc/apt/sources.list

②在第一行开头加一个#,把下面的内容拷贝到最后一行之后

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

PS:子豪兄的系统可能是基于stretch的,所以他给的两行代码跟上述两行代码略有不同,仔细比较可以发现,是buster和stretch不同。
deb http://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian/ stretch main contrib non-free rpi
deb-src http://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian/ stretch main contrib non-free rpi

我的系统是buster,但是下载源用的stretch,结果就会在后续安装过程中出现错误:无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系balabala,所以无论用哪一种,只要和你的系统版本匹配就可以。

在这里插入图片描述
③先按键盘上的ctrl+o,再按回车保存,再按ctrl+x退出nano编辑器回到命令行界面。再输入以下命令更新到清华大学镜像源最新的软件列表。

sudo apt-get update 

④给pip换源

sudo mkdir ~/.pip
cd .pip
sudo nano pip.conf

⑤在打开的文件中输入以下内容:

[global]
timeout = 10
index-url =  http://mirrors.aliyun.com/pypi/simple/
extra-index-url= http://pypi.douban.com/simple/
[install]
trusted-host=
    mirrors.aliyun.com
    pypi.douban.com

先按键盘上的ctrl+o,再按回车保存,再按ctrl+x退出nano编辑器回到命令行界面。

2. 安装运行在Python2上的OpenCV

2.1 安装

打开树莓派的命令行界面,两个命令即可完成安装。执行第一条命令需要半个小时左右,请耐心等待。第二条命令执行只需要几秒钟。

sudo apt-get install libopencv-dev
sudo apt-get install python-opencv

2.2 在Python2上测试OpenCV

安装好之后,在命令行中输入python或者python2,回车

import cv2

出现下图结果,则证明安装成功。
在这里插入图片描述
也可以在Python2下输入以下命令,查看OpenCV版本。

cv2.__version__

3. 安装运行在Python3上的OpenCV

高能预警!!!以下操作过程总共将耗费至少5小时的时间,请做好心理准备。

3.1 安装numpy

打开命令行界面,输入以下命令,安装Python科学计算库numpy

sudo pip3 install numpy

最新系统应该是自带的这个库,所以可能会显示以下界面:
在这里插入图片描述

3.2 在树莓派设置中把根目录扩大到整个SD卡

命令行界面输入命令,进入树莓派配置界面。

sudo raspi-config

会进入以下界面:
在这里插入图片描述
选择第七行:Advanced Options
在这里插入图片描述
选择A1:Expand Filesystem,点击Yes。将根目录扩展到这个SD卡,充分利用SD卡的存储空间。如果不进行这一步,后续命令会出现卡死。然后根据提示重启树莓派。

3.3 安装OpenCV所需的库

挨个运行下面八条命令。共需要七分钟(注意倒数第三条命令中要安装四个-dev软件包)。

sudo apt-get install build-essential git cmake pkg-config -y
sudo apt-get install libjpeg8-dev -y
sudo apt-get install libtiff5-dev -y
sudo apt-get install libjasper-dev -y
sudo apt-get install libpng12-dev -y

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

sudo apt-get install libgtk2.0-dev -y
sudo apt-get install libatlas-base-dev gfortran -y

3.4 下载OpenCV

在命令行输入以下三条命令,下载两个压缩包到树莓派的/home/pi/Downloads目录下。第一个压缩包86.8MB,第二个压缩包54.5MB:

cd

wget https://github.com/Itseez/opencv/archive/3.4.0.zip

wget https://github.com/Itseez/opencv_contrib/archive/3.4.0.zip

下载之后,把第一个压缩包重新命名为opencv-3.4.0.zip,把第二个压缩包重新命名为opencv_contrib-3.4.0.zip

如果下载速度很慢,可以用以下两种方法进行下载:

  • ①可以在电脑浏览器中输入wget后面的链接下载压缩包,再用Fillzilla或者U盘等方法把文件传输到树莓派的/home/pi/Downloads目录下(一定不能错)。

  • ②如果你有网盘会员,或者破姐版网盘的话,可以用电脑在百度网盘链接,密码dnrn。总共有两个文件(opencv和opencv_contrib)和一个目录(目录下有一个opencv缺少文件.zip)。下载这三个压缩包之后再用Fillzilla或者U盘等方法把文件传输到树莓派的/home/pi/Downloads目录下(一定不能错)。

解压opencvopencv_contrib压缩包,缺少文件.zip后续会用到。

cd /home/pi/Downloads
unzip opencv-3.4.0.zip
unzip opencv_contrib-3.4.0.zip

3.5 设置编译参数

设置编译参数

cd /home/pi/Downloads/opencv-3.4.0
mkdir build
cd build

设置CMAKE参数,注意,下面这是一行命令(包括最后那俩点儿),需要耐心等待十五分钟左右:

cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D INSTALL_C_EXAMPLES=ON -D INSTALL_PYTHON_EXAMPLES=ON -D OPENCV_EXTRA_MODULES_PATH=/home/pi/Downloads/opencv_contrib-3.4.0/modules -D BUILD_EXAMPLES=ON -D WITH_LIBV4L=ON PYTHON3_EXECUTABLE=/usr/bin/python3.5 PYTHON_INCLUDE_DIR=/usr/include/python3.5 PYTHON_LIBRARY=/usr/lib/arm-linux-gnueabihf/libpython3.5m.so PYTHON3_NUMPY_INCLUDE_DIRS=/home/pi/.local/lib/python3.5/site-packages/numpy/core/include ..

根据下图判断你是否配置成功了CMAKE。如果失败,可能是因为两个压缩包的路径没有严格按照上文的要求。如果成功,就可以开始最重要的编译了。
在这里插入图片描述

3.6 编译

最后一步,也是最重要的一步:编译

保证树莓派有至少5G的存储空间,注意,在此期间,树莓派要供电充足,不要运行其它任务,以免因为内存不够什么的幺蛾子报错。

树莓派3代耗时在5小时左右,我的树莓派4B实测耗时3小时15分钟,这还包括编译过程中出现了自豪兄未遇到的4个问题,我把解决方法汇总给大家,估计最后耗时会在2.5小时左右。

cd /home/pi/Downloads/opencv-3.4.0/build
make

Error 1

在编译到75%左右的时候,我出现了第一种错误:
在这里插入图片描述
这个错误是缺少一些文件,此时就用到了之前下载的缺少文件.zip

将解压缩后的以下11个文件拷贝到opencv_contrib/modules/xfeatures2d/src/目录下,然后继续在/home/pi/Downloads/opencv-3.4.0/build目录中make即可

make

Error 2

在编译到95%左右的时候,我出现了第二种错误:
opencv_contrib-3.4.0目录下的xx文件中找不到xx.hpp文件

/home/pi/Downloads/opencv_contrib-3.4.0/modules/xfeatures2d/include/opencv2/xfeatures2d.hpp:43:10: 
fatal error: /opencv2/nonfree.hpp: No such file or directory
 #include "/opencv2/nonfree.hpp"
          ^~~~~~~~~~~~~~~~~~~~~~~~~~
compilation terminated.

根据给的路径找到xfeature2d.hpp的文件并打开,找到第42行如下:

#ifndef __OPENCV_XFEATURES2D_HPP__
#define __OPENCV_XFEATURES2D_HPP__

#include"/opencv2/xfeatures2d.hpp"

然后去往/home/pi/Downloads/opencv_contrib3.4.0/modules/xfeatures2d/include/opencv2目录下,发现有该文件nonfree.hpp,然后把该绝对路径修改到上述错误代码中,即:

#ifndef __OPENCV_XFEATURES2D_HPP__
#define __OPENCV_XFEATURES2D_HPP__

#include"/home/pi/Downloads/opencv_contrib3.4.0/modules/xfeatures2d/include/opencv2/nonfree.hpp"

这种错误一共出现了两个,去/home/pi/Downloads/opencv_contrib3.4.0/modules/xfeatures2d/include/opencv2目录下找就可以了,一个是nonfree.hpp,一个是cuda.hpp,都能找到。

然后继续在/home/pi/Downloads/opencv-3.4.0/build目录中make即可

Error 3

继续,我出现了第三种错误,与第二种错误极其相似:
opencv-3.4.0目录下的xx文件中找不到xx.hpp文件

对,你没看错,这次是opencv-3.4.0的目录下的文件,不是opencv_contrib-3.4.0目录下的文件了。

道理一样,按照报错的信息,找到指定的行数,然后去/home/pi/Downloads/opencv_contrib3.4.0/modules/xfeatures2d/include/opencv2找到对应的文件,把绝对路径替换过去就OK了。

然后继续在/home/pi/Downloads/opencv-3.4.0/build目录中make即可

Error 4

编译到了99%,我丢~又来了个错误???
在这里插入图片描述
你会发现超级多warning!!!!mmp,这个错误在百度上找了好久好久,但是功夫不负有心人,终于让我找到了解决办法。

  1. 找到 /home/pi/Downloads/opencv-3.4.0/modules/python/src2 中的这个文件 cv2.cpp
  2. 把第885行的 char* 改成 const char*。(你会发现其他地方的字符指针都是const char*,只有这个地方是 char*

然后继续在/home/pi/Downloads/opencv-3.4.0/build目录中make即可

等待100%,编译完成,如下图所示:
在这里插入图片描述
make命令执行完成之后,执行下面的命令,执行命令需要一分钟:

sudo make install

3.7 在Python3上测试OpenCV

安装好之后,在命令行中输入python3,回车

import cv2

回车

cv2.__version__

回车,如果出现下图的结果,说明Python3环境下的OpenCV安装成功。
在这里插入图片描述
大功告成!!!!!!!
非常感谢子豪兄和在文章开始提到的那几篇文章,这是我安装成功的最大功臣。我写这篇博客完全是站在他们的肩膀上,把信息汇总了一下而已。

希望计设顺利!

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐