本教程参考如下几篇文章
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中,方便后续复现。
树莓派默认的GPU Memory大小有点小,需要手动增大。
# 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
uname -a
确认返回的infomation中有armv7l(32-bit OS)。若出现aarch64(则为64-bit OS,可参考这篇教程:Install OpenCV 4.4.0 on Raspberry 64 OS)。
$ 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
这里可以用命令下载,也可以到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
原教程这里提供了一个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会给出一个正常的报告:)。
在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
修改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
如果你是在虚拟环境中安装的,要先workon到对应的虚拟环境中(类似于anaconda的conda activate)。
$ python3
>>> import cv2
>>> cv2.__version__
'4.6.0'
>>> exit()
或者
pkg-config --modversion opencv4
查看是否打印对应版本信息
4.6.0
以下是来自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
如果需要删除当前版本,执行以下操作即可:
$ cd ~/opencv
$ sudo rm -r build
uname -a
确认返回的infomation中有armv7l(32-bit OS)。如果是aarch64(64-bit OS),则可参考教程二。
依次输入即可
# 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
可参照YolofastestV2中readme的教程