Raspberry Pi编译安装OpenCV4

前言

因为最近准备往树莓派上放一个基于OpenCV的项目,在PC上测试没有问题后放在树莓派上pip install -r requirements.txt的时候却提示:

1
2
ERROR: Could not find a version that satisfies the requirement opencv-python (from versions: none)
ERROR: No matching distribution found for opencv-python

再去网上搜索后才发现opencv-python这个库并没有提供ARM架构的二进制包。不过偶然发现还有一个专门为树莓派提供的第三方依赖库 ,可是这里目前只提供基于Python3.5且版本号太低无法满足我当前项目的要求,那接下来就只剩下源码自己独立编译这条路了。

环境准备

  • Python3.7.4

  • 需要安装Numpy:pip install numpy

  • 扩展文件系统

    1. 输入 sudo raspi-config

    2. 选择 Advanced Options

    3. 选择 Expand Filesystem

  • 扩充Swap

    1. 编辑文件:sudo vi /etc/dphys-swapfile,将CONF_SWAPSIZE的值修改成2048

    2. 重启dphys-swapfile:sudo /etc/init.d/dphys-swapfile restart

  • 更新系统的包

    1
    
    sudo apt-get update
    
  • 在系统中安装相关依赖

    1
    2
    3
    4
    5
    6
    7
    8
    
    sudo apt-get install build-essential cmake unzip pkg-config
    sudo apt-get install libjpeg-dev libpng-dev libtiff-dev
    sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev
    sudo apt-get install libxvidcore-dev libx264-dev
    sudo apt-get install libgtk-3-dev
    sudo apt-get install libcanberra-gtk*
    sudo apt-get install libatlas-base-dev gfortran
    sudo apt-get install python3-dev
    
  • 下载源码并解压

    1
    2
    3
    4
    
    wget -O opencv.zip https://github.com/opencv/opencv/archive/4.1.1.zip
    wget -O opencv_contrib.zip https://codeload.github.com/opencv/opencv_contrib/zip/4.1.1
    unzip opencv.zip
    unzip opencv_contrib.zip
    

编译安装

  • opencv-4.1.1中创建build文件夹,用于存放源码编译后的产物

    1
    2
    3
    
    cd opencv-4.1.1
    mkdir build
    cd build
    
  • 配置CMake参数

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    
    sudo cmake -D CMAKE_BUILD_TYPE=RELEASE
    -D CMAKE_INSTALL_PREFIX=/usr/local
    -D OPENCV_EXTRA_MODULES_PATH=/home/pi/opencv/opencv_contrib-4.1.1/modules
    -D ENABLE_NEON=ON
    -D ENABLE_VFPV3=ON
    -D WITH_FFMPEG=ON
    -D INSTALL_PYTHON_EXAMPLES=ON
    -D WITH_GSTREAMER=ON
    -D OPENCV_EXTRA_EXE_LINKER_FLAGS=-latomic
    -D BUILD_EXAMPLES=ON ..
    
  • 在CMake检查结束后,会打印出详细的信息,需要检查其中Python3部分的各个参数是否都有值。

  • 确认没问题后即开始编译OpenCV,建议可以在这时候使用screen命令创建一个可以在后台持续执行的会话。

  • 可以在make后增加-j2参数指定使用2个核心参与编译,这里使用单核编译,即不加任何参数。敲完命令后就需要等待大约七八小时后才能完成(Raspberry Pi 3B)

    1
    
    sudo make
    
  • 编译结束并且没有报错信息后,需要修改一下配置,modules/python3/CMakeFiles/opencv_python3.dir/link.txt中第一行增加-latomic参数

    1
    
    vi build/modules/python3/CMakeFiles/opencv_python3.dir/link.txt
    

    在第一行中的起始中 /usr/bin/c++ -fPIC -fsigned-char -W -Wall 修改为 /usr/bin/c++ -fPIC -latomic -fsigned-char -W -Wall

  • 安装OpenCV

    1
    2
    
    sudo make install
    sudo ldconfig
    

检查安装结果

1
2
3
4
5
6
7
$ python
Python 3.7.4 (default, Sep  8 2019, 10:06:39)
[GCC 8.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import cv2
>>> cv2.__version__
'4.1.1'

参考链接