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

文章目录

  • 前言
  • 配置OpenCV 4.6.0 环境
    • 1 调整GPU Memory
    • 2 检查EEPROM
    • 3 版本确认
    • 4 安装依赖
    • 5 下载OpenCV
    • 6 Build Make
    • 7 Make
    • 8 环境配置
    • 9 检查
    • 10 测试
    • 11 卸载
  • 配置ncnn
    • 1 版本确认
    • 2 安装
    • 3 ncnn+dnn

前言

本教程参考如下几篇文章

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

3 版本确认

uname -a

确认返回的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

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

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 ..

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

7 Make

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

$ sudo vim /etc/dphys-swapfile

将 CONF_SWAPSIZE=100改为1024

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

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

$ make -j4

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

$ sudo make install
$ sudo ldconfig
# cleaning (frees 300 KB)
$ make clean
$ sudo apt-get update

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

$ sudo vim/etc/dphys-swapfile

设置 CONF_SWAPSIZE=100 

$ sudo reboot

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

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

8 环境配置

修改opencv.conf文件

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

然后在文件中输入

/usr/local/lib

更新共享链接库

sudo ldconfig 

配置bash

sudo gedit /etc/bash.bashrc

在最后加上

PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
export PKG_CONFIG_PATH

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

source ~/.bashrc

更新

sudo updatedb

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

sudo apt install mlocate
sudo updatedb

9 检查

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

$ python3
>>> import cv2
>>> cv2.__version__
'4.6.0'
>>> exit()

或者

pkg-config --modversion opencv4

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

4.6.0

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;
}

编译

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

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

./test test.jpg

11 卸载

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

$ cd ~/opencv
$ sudo rm -r build

配置ncnn

1 版本确认

uname -a

确认返回的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

3 ncnn+dnn

可参照YolofastestV2中readme的教程

你可能感兴趣的:(environment,python,opencv,开发语言)