乐趣区

关于人工智能:用树莓派4b构建深度学习应用三OpenCV篇

前言

上回咱们把大部分零碎相干的软件都装置好了,这一篇次要介绍一下最新版的 OpenCV 4.4 在树莓派上的编译,装置与应用。

OpenCV 4.4 新个性

让咱们先看一下 OpenCV 4.4 的新个性:

  • 反对 YOLO v4
  • SIFT 专利到期,移入到了主存储库;
  • ONNX:增加对 Resnet_backbone(Torchvision)的反对;
  • 反对 EfficientDet 模型;
  • 基于 C ++ 和 python 的 文本辨认样例
  • FlowNet2 光流;
  • 减少了对 OpenVINO 2020.3 LTS / 2020.4 版本的反对;

下面哪一条都值得咽一下口水,惋惜树莓派上还没有间接可装置的包,咱们只能从源码编译一个版本进去。

OpenCV 装置编译根底库

首先装置一些编译须要的依赖库:

sudo apt-get -y install build-essential cmake unzip pkg-config
sudo apt-get -y install libjpeg-dev libpng-dev libtiff-dev
sudo apt-get -y install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev
sudo apt-get -y install libxvidcore-dev libx264-dev
sudo apt-get -y install libgtk-3-dev
sudo apt-get -y install libcanberra-gtk*
sudo apt-get -y install libatlas-base-dev gfortran

Tip:

须要装置的依赖包比拟多,下载老是断线的话,能够挂 VPN 减速。

装置 Python 虚拟环境

树莓派的官网镜像里自带了 python 2.7.16 和 python 3.7.3 两个版本,为了隔离各个环境的包抵触,明确所需的 python 版本。咱们先装置一个虚拟环境治理包,这特地对于后续 Tensorflow 和 Pytorch 的环境依赖也会有很好的反对。

sudo pip3 install -U virtualenv
virtualenv -p python3 ~/my_envs/opencv
source ~/my_envs/opencv/bin/activate
# 装置 numpy
pip3 install numpy

Tip:

在编译 OpenCV 之前,务必保障曾经装置 numpy 包,不然编译出的不反对 numpy 操作。

编译装置 FFmpeg

FFmpeg 是一个音视频解决最罕用的开源开发包,它功能强大,用处宽泛,大量用于视频网站和商业软件,也是许多音频和视频格式的规范编码 / 解码实现。

sudo apt-get install yasm
sudo apt-get install libsdl2-dev -y

抉择 ffmpeg 4.3.1 的版本编译装置:

wget http://ffmpeg.org/releases/ffmpeg-4.3.1.tar.gz
tar -xvf ffmpeg-4.3.1.tar.gz
cd ffmpeg-4.3.1
./configure --arch=armel --target-os=linux --enable-gpl --enable-libx264 --enable-nonfree
make
sudo make install

再实现一下 ldconfig 的配置

# 如果权限有余,申请一下 root 权限(sudo su)echo "/usr/local/lib" >> /etc/ld.so.conf  
ldconfig

最初在命令行中输出 ffmpeg,查看是否有输入,有输入则为胜利

ffmpeg -version

Tip:

这里有个巨坑,肯定要在编译 OpenCV 之前先装置 FFmpeg,并在编译参数里指定 WITH_FFMPEG=ON,这样编译出的 OpenCV 能力应用 ffmpeg 解码视频流。

我第一次先编译了 OpenCV,待到用到视频解码时才发现问题,只能卸载了从新又编译了一次 … 每次 3 个小时

编译装置 OpenCV 4.4.0

先从 https://github.com/opencv 下载两个源码包,并用上一篇介绍的 WinSCP 上传到树莓派的 Downloads 目录下:

opencv-4.4.0.zip
opencv_contrib-4.4.0.zip

解压文件

cd ~/Downloads/
unzip opencv-4.4.0.zip
unzip opencv_contrib-4.4.0.zip

批改目录名

mv opencv-4.4.0 opencv
mv opencv_contrib-4.4.0 opencv_contrib

进入 opencv 目录,创立 build 文件夹,指定编译参数,

其中 OPENCV_EXTRA_MODULES_PATH 指向 contrib 源码处,

WITH_FFMPEG=ON 开启 FFmpeg 的反对。

cd opencv
mkdir build && cd build
cmake -D CMAKE_BUILD_TYPE=RELEASE \
      -D CMAKE_INSTALL_PREFIX=/usr/local \
      -D OPENCV_EXTRA_MODULES_PATH=~/Downloads/opencv_contrib/modules \
      -D ENABLE_NEON=ON \
      -D ENABLE_VFPV3=ON \
      -D BUILD_TESTS=OFF \
      -D OPENCV_ENABLE_NONFREE=ON \
      -D INSTALL_PYTHON_EXAMPLES=OFF \
      -D CMAKE_SHARED_LINKER_FLAGS='-latomic' \
      -D WITH_FFMPEG=ON \
      -D BUILD_EXAMPLES=OFF ..
      
make -j4

急躁期待两个小时,留神散热,若输入如下内容,示意胜利:

装置编译好的 OpenCV:

sudo make install
sudo ldconfig

当上述编译胜利后,会在 CMAKE_INSTALL_PREFIX=/usr/local 门路下,

lib/python3.7/site-packages/cv2/python3.7 中生成 cv2.cpython-37m-arm-linux-gnueabihf.so 文件。必须要有这个文件才算编译胜利,而后须要在虚拟环境的 lib/python3.7/site-packages 链接上这个文件:

在虚拟环境下测试一下,检测是否胜利:

$ python
>>> import cv2
>>> cv2.__version__
'4.4.0'

完满!

Tip:

如果间接在零碎 Python3.7 下装置的 OpenCV,则能够省去建设软链接的步骤。

最初配置一下 opencv.pc 文件

cd /usr/local/lib
sudo mkdir pkgconfig 
cd pkgconfig
sudo nano opencv.pc

而后在 opencv.pc 中增加以下信息,留神这些信息须要与本人装置 opencv 时的库门路对应:

prefix=/usr/local
exec_prefix=${prefix}
includedir=${prefix}/include
libdir=${exec_prefix}/lib
​
Name: opencv
Description: The opencv library
Version:4.4.0
Cflags: -I${includedir}/opencv4
Libs: -L${libdir} -lopencv_shape -lopencv_stitching -lopencv_objdetect -lopencv_superres -lopencv_videostab -lopencv_calib3d -lopencv_features2d -lopencv_highgui -lopencv_videoio -lopencv_imgcodecs -lopencv_video -lopencv_photo -lopencv_ml -lopencv_imgproc -lopencv_flann  -lopencv_core
~

保留退出,而后将文件导入到环境变量:

export  PKG_CONFIG_PATH=/usr/local/lib/pkgconfig

至此就配置好 opencv.pc 啦~

再执行 pkg-config –cflags –libs opencv 时输入后果如下:


下一篇预报

咱们将编译 PyTorch 1.6 和 PyTorch 1.7,
并在下面跑一下 yolo v5,
敬请期待 …


退出移动版