上回我们把大部分系统相关的软件都安装好了,这一篇主要介绍一下最新版的 OpenCV 4.4 在树莓派上的编译,安装与使用。
让我们先看一下 OpenCV 4.4 的新特性:
上面哪一条都值得咽一下口水,可惜树莓派上还没有直接可安装的包,我们只能从源码编译一个版本出来。
首先安装一些编译需要的依赖库:
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 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 是一个音视频处理最常用的开源开发包,它功能强大,用途广泛,大量用于视频网站和商业软件,也是许多音频和视频格式的标准编码/解码实现。
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 个小时
先从 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 时输出结果如下:
本文介绍了如何在树莓派上,使用 OpenCV 和 Python 完成人脸检测项目。该项目不仅描述了识别人脸所需要的具体步骤,同时还提供了很多扩展知识。此外,该项目并不需要读者了解详细的人脸识别理论知识,因此初学者也能轻松跟着步骤实现。
本教程基于树莓派4B打造一个稳定的软硬件开发环境,再在其上构建AI应用。比如选择构建OpenCV 4.4,pyTorch 1.6和1.7,Tensorflow 2.1,然后在上面跑yolo v5应用,用intel NCS2加速等等…