• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
MKT-porter
博客园    首页    新随笔    联系   管理    订阅  订阅
经典-树莓派从源码编译安装python-opencv3.8或者4.5及其扩展库

参考教程

基于树莓派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 关闭休眠(可以不管)
  
为了避免安装过程中树莓派休眠,先关闭他自动休眠
https://www.cnblogs.com/kekeoutlook/p/11066283.html

准备2 切换安装源(可以不切换)
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了吧,干扰了我之前装的,当执行卸载后就被去掉了。

 

posted on 2019-11-14 01:48  MKT-porter  阅读(2722)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3