时间过得好快!一直有同学收藏这个博文,能帮到大家感觉好开心!
更新一波,把我们耗时四个多月的成品展示一下,作品拿到了2020年计算机设计大赛国二的成绩,赛道是物联网应用-医药卫生。
视频地址在小破站:2020计设国二作品——智能药箱,希望对大家参加比赛有所帮助。
2022年5月8日
————————————————————————————————————
开学要参加计设,项目是基于树莓派的视觉识别和语音识别的系统,由于疫情影响,取消了队友来冀一起做项目的计划,2月17号开始和队友一起连麦从0做起。
树莓派上安装OpenCV的确是个很复杂的事情,找到一个好的教程可以让你事半功倍。我安装时主要参考同济大学子豪兄的教程,可能年代久远,版本更新带来了一些不相容的错误,在这个基础上我也出现了一些错误,还参考了以下文章:
①对于opencv2/xfeatures2d/cuda.hpp: No such file or directory 类问题的解决方法
②为什么Opencv3.4.0使用make编译时出现错误?
③无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系
总之,经历了两天的折磨,终于在树莓派上安装好了OpenCV,可喜可贺!!!把方法分享给大家~也在这里给自己做个备忘。
本教程使用的是2020年2月13号官网发布的最新Raspbian操作系统,地址在此。
如何安装系统在此不再赘述,请自行百度。这里请注意,该操作系统是基于Debian Buster的。
防止下载速度过慢。
①打开文件
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编辑器回到命令行界面。
打开树莓派的命令行界面,两个命令即可完成安装。执行第一条命令需要半个小时左右,请耐心等待。第二条命令执行只需要几秒钟。
sudo apt-get install libopencv-dev
sudo apt-get install python-opencv
安装好之后,在命令行中输入python
或者python2
,回车
import cv2
出现下图结果,则证明安装成功。
也可以在Python2下输入以下命令,查看OpenCV版本。
cv2.__version__
高能预警!!!以下操作过程总共将耗费至少5小时的时间,请做好心理准备。
打开命令行界面,输入以下命令,安装Python科学计算库numpy
sudo pip3 install numpy
命令行界面输入命令,进入树莓派配置界面。
sudo raspi-config
会进入以下界面:
选择第七行:Advanced Options
选择A1:Expand Filesystem,点击Yes。将根目录扩展到这个SD卡,充分利用SD卡的存储空间。如果不进行这一步,后续命令会出现卡死。然后根据提示重启树莓派。
挨个运行下面八条命令。共需要七分钟(注意倒数第三条命令中要安装四个-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
在命令行输入以下三条命令,下载两个压缩包到树莓派的/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
目录下(一定不能错)。
解压opencv和opencv_contrib压缩包,缺少文件.zip后续会用到。
cd /home/pi/Downloads
unzip opencv-3.4.0.zip
unzip opencv_contrib-3.4.0.zip
设置编译参数
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。如果失败,可能是因为两个压缩包的路径没有严格按照上文的要求。如果成功,就可以开始最重要的编译了。
最后一步,也是最重要的一步:编译
保证树莓派有至少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,这个错误在百度上找了好久好久,但是功夫不负有心人,终于让我找到了解决办法。
/home/pi/Downloads/opencv-3.4.0/modules/python/src2
中的这个文件 cv2.cpp
char*
改成 const char*
。(你会发现其他地方的字符指针都是const char*
,只有这个地方是 char*
)然后继续在/home/pi/Downloads/opencv-3.4.0/build
目录中make
即可
等待100%,编译完成,如下图所示:
make
命令执行完成之后,执行下面的命令,执行命令需要一分钟:
sudo make install
安装好之后,在命令行中输入python3
,回车
import cv2
回车
cv2.__version__
回车,如果出现下图的结果,说明Python3环境下的OpenCV安装成功。
大功告成!!!!!!!
非常感谢子豪兄和在文章开始提到的那几篇文章,这是我安装成功的最大功臣。我写这篇博客完全是站在他们的肩膀上,把信息汇总了一下而已。
希望计设顺利!