• [Raspberry Pi] Raspberry Pi 4配置OpenCV4.6.0和ncnn环境(32-bit operation system)


    前言

    本教程参考如下几篇文章

    Install OpenCV 4.4.0 on Raspberry Pi 4
    Install ncnn deep learning framework on a Raspberry Pi 4.
    Ubuntu20.04.4安装opencv4.5.5
    这几篇教程写的非常好,特别是前两篇非常有针对性。我这里是属于自我整理,将几篇中需要用到的部分整理在一篇blog中,方便后续复现。

    配置OpenCV 4.6.0 环境

    1 调整GPU Memory

    树莓派默认的GPU Memory大小有点小,需要手动增大。

    • 找到树莓派左下角和win类似的按钮->Preferences->Raspberry Pi Configuration->Performance->GPU Memory
    • 将数值修改为128(我的初始值是76)

    2 检查EEPROM

    # to get the current status
    $ sudo rpi-eeprom-update
    # 如果出现 BOOTLOADER: up-to-data 则不用后续的操作
    # 反之,若出现BOOTLOADER: update required 则需要后续更新
    
    # if needed, to update the firmware
    $ sudo rpi-eeprom-update -a
    $ sudo reboot
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    3 版本确认

    uname -a
    
    • 1

    确认返回的infomation中有armv7l(32-bit OS)。若出现aarch64(则为64-bit OS,可参考这篇教程:Install OpenCV 4.4.0 on Raspberry 64 OS)。

    4 安装依赖

    $ sudo apt-get update
    $ sudo apt-get upgrade
    $ sudo apt-get install cmake gfortran
    $ sudo apt-get install python3-dev python3-numpy
    $ sudo apt-get install libjpeg-dev libtiff-dev libgif-dev
    $ sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev
    $ sudo apt-get install libgtk2.0-dev libcanberra-gtk*
    $ sudo apt-get install libxvidcore-dev libx264-dev libgtk-3-dev
    $ sudo apt-get install libtbb2 libtbb-dev libdc1394-22-dev libv4l-dev
    $ sudo apt-get install libopenblas-dev libatlas-base-dev libblas-dev
    $ sudo apt-get install libjasper-dev liblapack-dev libhdf5-dev
    $ sudo apt-get install gcc-arm* protobuf-compiler
    # The latest Debian 11, Bullseye don't support python2 full
    # don't try to install if you're having a Raspberry Bullseye OS
    $ sudo apt-get install python-dev python-numpy
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    5 下载OpenCV

    这里可以用命令下载,也可以到OpenCV的官网下载。
    下面的版本号可以对应修改。

    $ cd ~
    $ wget -O opencv.zip https://github.com/opencv/opencv/archive/4.6.0.zip
    $ wget -O opencv_contrib.zip https://github.com/opencv/opencv_contrib/archive/4.6.0.zip
    
    $ unzip opencv.zip
    $ unzip opencv_contrib.zip
    
    # 为了方便之后的操作
    $ mv opencv-4.4.0 opencv
    $ mv opencv_contrib-4.4.0 opencv_contrib
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    6 Build Make

    原教程这里提供了一个Virtual environment的选项,因为我不应该不用有版本切换,且我感觉用Virtual environment比较麻烦(可能是因为不熟练)。所以我没有使用Virtual environment,需要的朋友可以看前言中的教程一的相关部分。

    $ cd ~/opencv/
    $ mkdir build
    $ cd build
    
    # 注意,如果之前包解压的位置与本教程不同,OPENCV_EXTRA_MODULES_PATH需要对准自己的位置
    $ cmake -D CMAKE_BUILD_TYPE=RELEASE \
            -D CMAKE_INSTALL_PREFIX=/usr/local \
            -D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib/modules \
            -D ENABLE_NEON=ON \
            -D ENABLE_VFPV3=ON \
            -D WITH_OPENMP=ON \
            -D BUILD_TIFF=ON \
            -D WITH_FFMPEG=ON \
            -D WITH_TBB=ON \
            -D BUILD_TBB=ON \
            -D BUILD_TESTS=OFF \
            -D WITH_EIGEN=OFF \
            -D WITH_GSTREAMER=OFF \
            -D WITH_V4L=ON \
            -D WITH_LIBV4L=ON \
            -D WITH_VTK=OFF \
            -D WITH_QT=OFF \
            -D OPENCV_ENABLE_NONFREE=ON \
            -D INSTALL_C_EXAMPLES=OFF \
            -D INSTALL_PYTHON_EXAMPLES=OFF \
            -D BUILD_NEW_PYTHON_SUPPORT=ON \
            -D BUILD_opencv_python3=TRUE \
            -D OPENCV_GENERATE_PKGCONFIG=ON \
            -D BUILD_EXAMPLES=OFF ..
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29

    如果不出意外,CMake会给出一个正常的报告:)。

    7 Make

    在make之前,我们需要先增大一下交换区的大小

    $ sudo vim /etc/dphys-swapfile
    
    • 1

    将 CONF_SWAPSIZE=100改为1024

    $ sudo /etc/init.d/dphys-swapfile stop
    $ sudo /etc/init.d/dphys-swapfile start
    
    • 1
    • 2

    j后面的数字是希望使用的核数,就用4就好。如果想快点可以使用更多的核。

    $ make -j4
    
    • 1

    官方估计时间是1.15h,这期间可以去做点其他时间。
    如果不出意外,make成功之后(可以忽略中间出现的warning)进行如下操作。

    $ sudo make install
    $ sudo ldconfig
    # cleaning (frees 300 KB)
    $ make clean
    $ sudo apt-get update
    
    • 1
    • 2
    • 3
    • 4
    • 5

    安装好之后要将swap区域改回去,减少对存储卡的损耗注,(注:可以在安装完ncnn再修改)。

    $ sudo vim/etc/dphys-swapfile
    
    设置 CONF_SWAPSIZE=100 
    
    $ sudo reboot
    
    • 1
    • 2
    • 3
    • 4
    • 5

    下面操作可选,我存储空间够就没做。

    # just a tip to save some space
    $ sudo rm -rf ~/opencv
    $ sudo rm -rf ~/opencv_contrib
    
    • 1
    • 2
    • 3

    8 环境配置

    修改opencv.conf文件

    sudo gedit /etc/ld.so.conf.d/opencv.conf
    
    • 1

    然后在文件中输入

    /usr/local/lib
    
    • 1

    更新共享链接库

    sudo ldconfig 
    
    • 1

    配置bash

    sudo gedit /etc/bash.bashrc
    
    • 1

    在最后加上

    PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
    export PKG_CONFIG_PATH
    
    • 1
    • 2

    保存后退出,终端输入以下命令使配置生效

    source ~/.bashrc
    
    • 1

    更新

    sudo updatedb
    
    • 1

    如果出现command not found问题,则安装一下即可

    sudo apt install mlocate
    sudo updatedb
    
    • 1
    • 2

    9 检查

    如果你是在虚拟环境中安装的,要先workon到对应的虚拟环境中(类似于anaconda的conda activate)。

    $ python3
    >>> import cv2
    >>> cv2.__version__
    '4.6.0'
    >>> exit()
    
    • 1
    • 2
    • 3
    • 4
    • 5

    或者

    pkg-config --modversion opencv4
    
    • 1

    查看是否打印对应版本信息

    4.6.0
    
    • 1

    10 测试

    以下是来自OpenCV官网的教程代码,也可以尝试其用CMakeLists.txt编译的方法,也可以看其其他的教程。

    // test.cpp
    #include 
    #include 
    
    using namespace cv;
    
    int main(int argc, char** argv )
    {
        if ( argc != 2 )
        {
            printf("usage: DisplayImage.out \n");
            return -1;
        }
        Mat image;
        image = imread( argv[1], 1 );
        if ( !image.data )
        {
            printf("No image data \n");
            return -1;
        }
        namedWindow("Display Image", WINDOW_AUTOSIZE );
        imshow("Display Image", image);
        waitKey(0);
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    编译

    g++  test.cpp  -o  test  `pkg-config --cflags --libs opencv4`
    
    • 1

    运行(注:需要自备一张test.jpg在当前目录,可以任意命名)

    ./test test.jpg
    
    • 1

    11 卸载

    如果需要删除当前版本,执行以下操作即可:

    $ cd ~/opencv
    $ sudo rm -r build
    
    • 1
    • 2

    配置ncnn

    1 版本确认

    uname -a
    
    • 1

    确认返回的infomation中有armv7l(32-bit OS)。如果是aarch64(64-bit OS),则可参考教程二。

    2 安装

    依次输入即可

    # check for updates
    $ sudo apt-get update
    $ sudo apt-get upgrade
    
    # install dependencies
    $ sudo apt-get install cmake wget
    $ sudo apt-get install libprotobuf-dev protobuf-compiler
    
    # download ncnn
    $ git clone --depth=1 https://github.com/Tencent/ncnn.git
    
    # install ncnn
    $ cd ncnn
    $ mkdir build
    $ cd build
    
    # build 32-bit ncnn
    $ cmake -D NCNN_DISABLE_RTTI=OFF \
    		-D NCNN_BUILD_TOOLS=ON \
    		-D CMAKE_EXE_LINKER_FLAGS=-ldl \
    		-D CMAKE_TOOLCHAIN_FILE=../toolchains/pi3.toolchain.cmake ..
    $ make -j4
    $ make install
    
    # copy output to dirs
    $ sudo mkdir /usr/local/lib/ncnn
    $ sudo cp -r install/include/ncnn /usr/local/include/ncnn
    $ sudo cp -r install/lib/libncnn.a /usr/local/lib/ncnn/libncnn.a
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28

    3 ncnn+dnn

    可参照YolofastestV2中readme的教程

  • 相关阅读:
    5.最长回文子串(马拉车怨种版)
    Facebook:连接世界的社交巨人
    Arduino驱动MAX30102心率血氧传感器模块
    终于搞懂了 super(XXXX, self).__init__()的作用是啥了
    前微软CEO的“离别礼物“:Cortana差点改名为“Bingo”
    【Python】AttributeError: module lib has no attribute X509_V_FLAG_CB_ISSUER_CHECK
    iOS基础开发介绍
    设置共享文件夹在主机与本地VMware虚拟机之间传输文件
    airflow报ModuleNotFoundError: No module named ‘dags‘原因和解决方法
    力扣刷题-链表-链表相交
  • 原文地址:https://blog.csdn.net/ztmajor/article/details/126660205