树莓派安装OpenCV-4.3.0+Python
如果您曾经在Raspberry Pi(或之前的任何其他平台)上安装过OpenCV,那么您知道该进程可能非常耗时且需要安装许多依赖项和先决条件。本教程的目标是引导您逐步完成编译和安装过程。
前期准备
注:Raspbian-lite所需要的额外操作将单独标注。
一台装好系统的Raspbarry Pi(建议不低于16GB micro-SD卡)
我手上的是Raspberry Pi 4b,安装的操作系统是Debian-Pi-Aarch64 - 为全新Raspberry Pi 4B适配的64位操作系统。
系统镜像:2020-06-17-OPENFANS-Debian-Buster-Desktop-Aarch64-ext4-v2019-2.0-U3-Release.img
1
2链接:https://pan.baidu.com/s/1DfE2V_F2q5Uz0nTzy8G9Cg
提取码:ocrd理论上带GUI的操作系统都可以,比如Raspbian-full。 | 揭秘了揭秘了 Raspbian-lite操作成功!!!
镜像烧写看这篇教程——树莓派系统镜像烧写
如果是Raspbian的话,换源教程在这里——Linux源的基础操作
至于这里为什么选择带GUI的桌面系统,总归还是太菜了,后面手动CMake了n次全部失败,所以不得不用到CMake-GUI来协助。
扩展SWAP分区,否则大概率会在编译过程中因为内存不足而爆掉。因为你编译到后面基本上看到的是下面的景象:
1 |
|
SWAP扩展分区教程——树莓派的SWAP分区扩展
根据我的编译过程来看RAM+SWAP最少需要5GB,建议给足一点,防止中途爆掉。
网络配置(可选)
建议有软路由的小伙伴先把树莓派接入软路由,因为可能会在国外服务器拉取源代码文件,网络不通畅的话会导致这一过程十分的漫长。
资源预下载
OpenCV4.3.0和opencv_contrib-4.3.0的安装包大家可从GitHub上搜索下载,如果网络有障碍,可从我的百度网盘下载(同时网盘内也上传了一些CMake易下载失败的文件):
1 |
|
开始操作
Step1 扩展文件分区(Raspbian-lite等)
如果你是新安装的Raspbian操作系统,你应该将文件系统扩展至整张micro-SD卡
1 |
|
你会看到:
选择“Advanced Options”
接着:
选择“A1. Expand File System”
完成以后重启树莓派
1 |
|
重启之后使用
1 |
|
可以看到当前的分区情况:
1 |
|
Step2 清理不必要文件和程序
1 |
|
你可以获得更大的磁盘空间(毕竟安装OpenCV真的非常消耗空间,更何况还有SWAP分区)
Step3 安装依赖
首先更新源和程序
1 |
|
安装CMake相关构建工具
1 |
|
图像I/O
1 |
|
视频I/O
1 |
|
之后构建会用到的一个模块:
1 |
|
安装Python2.7和Python3
1 |
|
Step4 下载/拷贝OpenCV源码
(带GUI的操作系统)
如果你在百度云下载了相关文件则把提前下载好的OpenCV文件拷贝到/home/pi文件夹里,并用
1 |
|
命令解压。
如果网络条件不错当然也可以直接下载:
1 |
|
后面的4.3.0是版本号,可以根据实际的最新版本情况修改。
Raspbian-lite
获取源码:
1 |
|
这里需要注意,opencv和contrib必须对应否则编译会失败,因此我此处clone了最新的
Step5 配置Python
安装Python的包管理器pip
1 |
|
安装NumPy库
网络条件好用这个命令:
1 |
|
网络条件不好用这个命令:
1 |
|
-i后面是服务器地址,可以根据实际情况切换速度比较快的国内服务器。
Step6 编译和安装OpenCV
构建项目
先创建build文件夹
1 |
|
然后开始构建:
以下是错误的构建命令
以下是错误的构建命令
以下是错误的构建命令
1 |
|
1 |
|
1 |
|
以上命令要么构建失败,要么编译到一半报错,具体原因由于水平有限我也不清楚。
(带GUI的操作系统)
无奈之下只好选择CMake-GUI来完成构建:
用VNC连接树莓派,在远程桌面的终端中输入:
1 |
|
启动cmake-gui如下:
在Where is the source code:选择opencv-4.3.0目录位置(我的位置为/home/pi/opencv-4.3.0),在Where to build the binaries:选择build位置(我的位置为/home/pi/opencv-4.3.0/build)。
选择完毕点击Configure,配置完毕会出现很多 红色 项目
- 找到BUILD_opencv_world,后面的方框点上勾;
- 找到在CMAKE_BUILD_TYPE 值处输入RELEASE,其他保持不变;
- 找到OPENCV_ENABLE_NONFREE,在后面的方框点上勾(有的算法有专利,不点这个不能用,比如sift)
- 找到OPENCV_EXTRA_MODULES_PATH,选择opencv_contrib文件夹中的modules文件夹,注意是modules文件夹(我的路径是/home/pi/opencv_contrib/modules)。
完成以上工作再点击Configure,耐心等一等,如果上面还有红色的再点击Configure,直到没有红色为止。
Configure完成之后点击Generate,等一等即可。
正常情况下,等Generate完成之后,我们可以直接在build目录下输入命令:
1 |
|
-j4命令是多核编译参数,这里的4就是4核的意思,CPU4核拉满能够提高一些效率。
(Raspbian-lite手动构建)
之前的cmake代码不成功大概是以下原因:
Python的libraries,numpy,packages Path都没有,说明Python环境不正常,不会生成Python的opencv库,到时候会报ImportError: No module named cv2的错误。
- 指定参数的时候有些没加-D。
- 没有启用BUILD_opencv_python3。
- 部分变量名错了
打开opencv的CMAKELists.txt,发现许多变量名是错的,下面是opencv的CMAKELists.txt部分代码。
环境Python3.7 & Python2.7
1 |
|
构建成功如图:
接着我们可以在build目录下输入命令:
1 |
|
-j4命令是多核编译参数,这里的4就是4核的意思,CPU4核拉满能够提高一些效率。
随即开始编译。
请做好准备,这是一个,非常,非常,非常漫长的过程!!!!!!!!
请做好准备,这是一个,非常,非常,非常漫长的过程!!!!!!!!
请做好准备,这是一个,非常,非常,非常漫长的过程!!!!!!!!
有Building CXX object modules/python2/CMakeFiles/opencv_python2.dir/_/src2/cv2.cpp.o
和Building CXX object modules/python3/CMakeFiles/opencv_python3.dir/_/src2/cv2.cpp.o两部分编译得有20分钟,一度以为又死机了,实际上不是,耐心等待,树莓派编译特别慢。
在这个过程当中你可能会遇到不少问题,常见问题写在了末尾。
编译不出错完成之后,在build目录下输入命令:
1 |
|
Step7 配置环境
安装完需要配置环境,树莓派可以使用vim,nano等命令进行编辑,也可以安装gedit进行编辑,本菜鸟能力不强,还是喜欢用gedit,就安装了个gedit。输入命令如下:
1 |
|
打开文件之后是空的,输入以下内容:
1 |
|
保存后退出,再输入命令:
1 |
|
更改环境变量,输入命令:
1 |
|
打开之后,在文件最后面输入以下内容:
1 |
|
保存退出,opencv基本上就安装完成了。
Step8 检测安装是否成功
Python2.7检查
终端按照如下操作:
1 |
|
如果看到了版本号则表示成功。
Python3.7检查
终端按照如下操作:
1 |
|
如果看到了版本号则表示成功。
到此为止安装基本成功
后续工作
删除安装文件,清理空间。
别忘记把SWAP分区改回来!!!
如果你跳过这一步的话,你的SD卡大概率过不了多久就会被写废!!!
调整dphys-swapfile:
1
sudo nano /etc/dphys-swapfile
修改文件中以下项目为:
1
2
3
4
5# set size to absolute value, leaving empty (default) then uses computed value
# you most likely don't want this, unless you have an special disk situation
CONF_SWAPSIZE=100
# CONF_SWAPSIZE=4096
# CONF_MAXSWAP=4096
1 |
|
你的SWAP分区将从4096MB变回100MB
opencv_config安装问题
报错1:没有那个文件或目录
编译OpenCV提示opencv_contrib缺少boostdesc_bgm.i等文件
解决方法:
查看 build 文件夹下的日志文件 CMakeDownloadLog.txt,在日志文件CMakeDownloadLog.txt中搜索 boostdesc_bgm.i 关键词。日志文件里就有它的下载地址,到指定位置下载即可。https://github.com/opencv/opencv_contrib/issues/1301,点开上面这个网址往下拉,有人提供了缺失的各个文件的链接,点击保存. 或者直接在这个网页里搜索 BenbenIO 这个用户的回答。
下载后,直接拷贝源码并生成同名文件,放在 opencv_contrib/modules/xfeatures2d/src/ 路径下即可。
报错2:编译时头文件不对
fatal error: features2d/test/test_detectors_regression.impl.hpp: 没有那个文件或目录
#include “features2d/test/test_detectors_regression.impl.hpp”
头文件include地址不对,解决方法如下:
将opencv-4.1.0/modules/features2d/test/文件下的
1 |
|
拷贝到opencv_contrib-4.1.0/modules/xfeatures2d/test/文件下。
同时,将opencv_contrib-4.1.0/modules/xfeatures2d/test/test_features2d.cpp文件下的
1 |
|
改成:
1 |
|
将opencv_contrib-4.1.0/modules/xfeatures2d/test/test_rotation_and_scale_invariance.cpp文件下的
1 |
|
改成:
1 |
|