参考教程
基于树莓派3B+Python3.5的OpenCV3.4的配置教程
https://www.cnblogs.com/Pyrokine/p/8921285.html
在Ubuntu18.04中安装OpenCV4.5
https://blog.csdn.net/qianbin3200896/article/details/107894029
目标
编译针对python的opencv以及扩展库
环境
树莓派4和3B+都可以
python3.7.3 python2.7共存但是要切换成py3为默认执行器
opencv3.4.8或者opencv4.5
--------------------------------------------------------------------------------------------------------------------------------
安装过程准备1 关闭休眠(可以不管)
准备2 切换安装源(可以不切换)
为了避免安装过程中树莓派休眠,先关闭他自动休眠
https://www.cnblogs.com/kekeoutlook/p/11066283.html
https://www.cnblogs.com/kekeoutlook/p/14016731.html
用了清华源,但是我还是电脑开了-破墙上-网-软件,通过wifi可以共享破墙上谷歌。大大加快速度
准备3 扩大交换分区(必须) 2G自身内存+4G交换内存
编译到81%的时候卡死了,报错:解决: g++: internal compiler error: Killed (program cc1plus),内存不够
增加交换分区
https://www.cnblogs.com/kekeoutlook/p/11856057.html
网上说交换分区会造成内存卡损伤加快,如果使用完没有大的使用程序,最好重新调整回去,原来是 100Mb,
开放了之后的交换空间
准备4 将python默认环境切换成python3而不是python2
https://www.cnblogs.com/kekeoutlook/p/13747606.html
准备5 扩大TF卡的空间
如果不做这步操作,后面会出问题,比如卡死
输入(命令行)
sudo raspi-config
然后选择" Advanced Options "然后选择" Expand Filesystem "然后重启树莓派
快速安装法
如果以前编译过,拷贝到同一个目录
python3.73
1安装基本依赖库,一定要装不然后面一堆报错缺库。
2 用cmake-gui在参数不改变的情况下,重新生成一次cmake
3进入bulid 然后直接执行安装 (之前编译已经产生了.so)
sudo make -j3 (跳过)
sudo make intall
额外=========
在上述基础上安装(已经编译好了opencv-python所需要的各种基本库)
pip install opencv-contrib-python==4.1.0.25
虽然生成了python可调用的opencv版本,但是是opencv4.5的,haar级联器用不了。所以需要额外装个opencv4.1版本。
源码编译的意义在于把需要依赖的底层库都装好了。直接装python-opencv 虽然成功但是python是倒入不了的,报错一堆缺库。
1正式安装
1 下载opencv以及contrib源码包
1-1 下载opencv
说明:下面的图是针对opencv3.8做的,你换成别的版本也可以,示意图中换成对应版本。
后面的安装命令我又换成了opencv4.5,因为树莓派升级了我就想试试opencv4.5,更新了教程懒得换截图,因此产生的误解注意区分
https://github.com/Itseez/opencv/
https://github.com/opencv/opencv/releases
https://github.com/opencv/opencv/releases/tag/3.4.8
1-2 下载扩展库
同样的操作下载扩展库
https://github.com/opencv/opencv_contrib
https://github.com/opencv/opencv_contrib/releases
https://github.com/opencv/opencv_contrib/releases/tag/3.4.8
我从自己的电脑下载好,拷贝到树莓派,解压。
后来更新的opencv4.5
2 更新apt(命令行)
sudo apt-get update #更新索引 sudo apt-get upgrade #真的开始根据索引更新软件 是真的慢 开启了破墙神器上谷歌,几十分钟 2020年11月最新下载的树莓派系统,要更新的东西还这么多
3 安装预先依赖库
开始为OpenCV安装做准备,配置所需的库(一次一行)
opencv3.8需要的依赖
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
opencv4.5
sudo apt-get install build-essential sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libdc1394-22-dev sudo add-apt-repository "deb http://security.ubuntu.com/ubuntu xenial-security main" sudo apt update sudo apt install libjasper1 libjasper-devq
其他
sudo apt-get install libcblas-dev sudo apt-get install libhdf5-dev sudo apt-get install libhdf5-serial-dev sudo apt-get install libatlas-base-dev sudo apt-get install libjasper-dev sudo apt-get install libqtgui4 sudo apt-get install libqt4-test
为力了解决报错提前安装
sudo apt-get install libgtk-3-dev sudo ln -s /usr/include/gtk-3.0/gtk/ /usr/include/gtk
sudo apt-get install python-dev libfreetype6-dev libfontconfig1-dev
其他报错(有问题子再看)
https://www.daimajiaoliu.com/daima/4799817a9100410
4cmake配置
在opencv3.8.4创建 build文件,命令行cd进入build文件夹下面
(后来更新的oprncv4.5对应)
camke设置
1手动命令行设置
(最早使用opencv3.8时候记录的,最新可参考后面camke-gui图形化设置,这样很多路径会自动获取不用手动复制)
(命令是针对4.5的,要换成自己对应的版本和修改)
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/1Software/opencv45_py37/opencv_contrib-4.5.0/modules -D BUILD_EXAMPLES=ON -D WITH_LIBV4L=ON PYTHON3_EXECUTABLE=/usr/bin/python3.7 PYTHON_INCLUDE_DIR=/usr/include/python3.7 PYTHON_LIBRARY=/usr/lib/arm-linux-gnueabihf/libpython3.7m.so PYTHON3_NUMPY_INCLUDE_DIRS=/usr/lib/python3/dist-packages/numpy/core/include ..
- 0根据自己的opencv版本进入到自己对应的工程路径+ build执行编译命令
-
1编译版本 选择RELEASE版本吧
-
CMAKE_BUILD_TYPE=RELEASE
- 2修改opencv_contrib扩展库对应的路径,这里用的是
-
OPENCV_EXTRA_MODULES_PATH=/home/pi/1Software/opencv45_py37/opencv_contrib-4.5.0/modules
- 3是否编译python可用的版本(默认选了python3 去掉Python2,但是可不用,python单独安装)
-
6 去掉java编译
7 去掉cuda编译
2用图形化配置camke
前面使用纯命令行执行的,如果想要
sudo apt-get install cmake-gui
打开
cmake-gui
在Where is the source code:选择opencv目录位置,在Where to build the binaries:选择build位置如下图所示:
选择完毕点击Configure,然后会弹出编译器选项,选择Unix Makefiles即可。
1 生成版本选择 RELESE
2选择生成 路径默认/usr/local 不改
3生成python3版本的所有路径信息输入
3-1取消python2的编译,找到BUILD_opencv_python2,后面方框点沟掉;
3-2其他python路径是开始自动读取的,核对下
4 扩展库路径OPENCV_EXTRA_MODULES_PATH 不要有中文路径
5不需要cuda,树莓派没有cuda 如果是别的板子可以考虑吧(jetson nx nano tk1 tk2 人家系统一般自带cuda库)
6 需要编译样例(可不选,我这里选了)用haar训练识别目标时候需要提前编译好训练软件
7 找到OPENCV_ENABLE_NONFREE,自选是否用,一般不用,没特殊情况不建议的点击。人脸识别也用不到。
我这里用了,图像拼接用一个sift检测特征点(有的算法有专利,不点这个不能用,比如sift,不过4.5已经可以免费使用了,因为专利到期了,但是别的专利库未知);
一情况用不到的话还是不要点击用不到,不然后面连接不上服务器下载不了相关文件导致编译失败。
如果需要也可以位于build下的CmakeDownloadLog.txt可以查看到有哪些文件下载失败,手动下载然后放在指定文件夹
(8) 不要java(默认有 根据需求)
这里我取消了
(8)tiff 图像操作
默认没有,需要可以选择,对tiff图像格式操作
(9)其他选择
(根据需要)
libv4l 默认没有.解决使用opencv 高分辨率下的摄像头卡顿不流畅
sudo apt-get install libv4l-dev
利用OPENCV的CvCapture *cvCaptureFromCAM( int index )来实现,屏蔽掉V4L2底层的繁琐操作,使用opencv调用相机,发现不同设备上采集的图像有很大的区别,如果保持移植的一致性,应该需要考虑v4l2配置相机。
经过对这些库的了解,才发现,最为关键的几个库为ffmpeg以及libv4l,libavcodec。特别是libv4l是直接用来捕获摄像头的库,才能够将cvCaptureFromCAM于真正的设备连接,从而获取视频。
其中,libv4l.so,没有ARM的版本,如果能够在ARM平台下找到libv4l.so的库文件,选上with v4l,我在交叉编译器的目录下没ARM版本的libv4l.so的库
初步生成camke
第一次点击configure之后,必然不会直接成功,总有一些文件配置阶段没有下载成功。
(就这还是开着破墙工具还有东西没下载下来,但是网页直接访问右键另存为可以直接下载)
点击configure之后, 根据位于build下的CmakeDownloadLog.txt可以查看到有哪些文件下载失败,手动下载然后放在指定文件夹
报错记录文件里记录了,本来要从哪里下载文件放到哪个文件夹,但是服务器连接失败没能下载。
你就手动去访问网址下载下来放在对应路径
第一批文件,手动下放在相对路径
opencv-4.5.0/build/downloads/xfeatures2d
第二批文件 -测试样例所需的人脸模型文件
/opencv-4.5.0/build/share/opencv4/testdata/cv/face/"
这些文件我整理了百度网盘便于下载
链接:https://pan.baidu.com/s/1h1geuNg9bdDNiRNpJ6Dq_w
提取码:zht4
再次配置成功没有红色报错
之前因为这些文件的报错记录也没有了
配置成功
接着点击Generate完成之后等待结束
输出成功!查看文件夹
代表成功了,可以后续执行 make
----------------------------------------------------------
下面这个图是opencv3.8用命令行生成成功的截图,我们之前上面是opencv4.5用gui界面生成成功的界面。
5编译和安装
在build文件夹下,开始编译
sudo make -j3
- 1.5GHz 四核 64 位 ARM Cortex-A72 CPU (~3× performance)
树莓派cpu是4核的,全用会卡死,还是用3个吧。
漫长的等待,树莓派3B+需要6-7个小时
树莓派4 2小时
编译成功
(opencv3.8编译成功界面)
opencv4.5编译成功界面
安装
在build路径下执行
sudo make install
成功
(opencv3.8成功截图)
opencv4.5成功
等待结束
千辛万苦终于好了!!!
测试代码
import cv2 import numpy as np img = cv2.imread('a.jpg', cv2.IMREAD_COLOR) cv2.imshow("image", img) cv2.waitKey(0)
测试人脸识别又报错
https://blog.csdn.net/hopena/article/details/91350271
model = cv2.face.EigenFaceRecognizer_create()
在做人脸识别的时候报错 module 'cv2.cv2' has no attribute 'face' 试了好几个,木有解决 最终,全部卸载,再安装一次就可以了,这是什么毛病。。。。然后卸载opencv-contrib-python
pip uninstall opencv-contrib-python
pip uninstall opencv-python
pip install opencv-python
pip install opencv-contrib-python
pip uninstall opencv-contrib-python
然后可以用了????
奇怪 我从源码编译装的是opencv4.5和对应扩展库
但是opencv-python装的是4.4,但是opencv-contrib-python 装的是4.1.1??
可能树莓派系统默认自带opencv4了吧,干扰了我之前装的,当执行卸载后就被去掉了。