树莓派4B配置OpenCV

1.前言

首先,opencv在Linux系统上使用需要编译。

我参考的是这两篇文章。

  • 树莓派4b Opencv安装(真实有效)——授人鱼不如授人以渔
  • 用树莓派4b构建深度学习应用(三)OpenCV篇

这两篇应该都是可行的,我起初参考的是第一篇,他安装的是3.4.6,提供了3.4.6和4.1.0的安装方案,参考了子豪兄和其他一些人的博文。

我最后参考的是第二篇,这个人的博文写的也很好,我几乎收藏了他所有关于树莓派的博文。

现在学的东西越来越多,不做笔记,一定会忘光光!!!

2.笔记

第一篇博文作者自己用的3.4.6版本的opencv,我开始用的就是他4.1.0版本的opencv,因为觉得3.4.6有点旧了,然后看到了opencv 4.4.0的版本安装教程(第二篇),我就立马换成更新的了,第一个作者是正常安装在树莓派系统中的,第二个作者是先建议了一个虚拟环境,然后再虚拟环境中进行编译安装。

对于版本最好安装自己的需求来,我只是为了试一下,所以直接选择我看到的较高版本了。

  • 第一个问题是FFmpeg编译+安装的时间大概1个小时到一个半小时之间,博主没有提示。

  • 第二个问题是可以参考第一篇博文,在build设置好后,进行一个备份,防止失败再花费这个步骤的时间。

  • 第三个问题就是我安装的FFmpeg的版本是4.1.1,和博主的步骤相同但是结果安装的版本不一致。

  • 第四个问题就是在编译opencv的时候,在76%的时候报错了,然后我把第一篇博文中的补充文件放进去了,然后编译成功。

  • 第五个问题,跑了一个opencv做人脸检测的脚本,但是输出的图片特别大。原来是我图片尺寸太大了。

在虚拟环境中配置,方便后面配置别的,避免了后续学习其他东西的东西出现依赖库版本的冲突。

3.步骤(基于第二篇博文,有修改,是我部署的过程)

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

在这里说一下,用不同的源可能结果不一样,用阿里云和中科大的镜像源没有问题。其实,我在安装这个依赖库时,我已经安装博文一来安装过了以来库了,两者重合大部分。

安装 Python 虚拟环境

树莓派的官方镜像里自带了 python 2.7.16 和 python 3.7.3 两个版本,为了隔离各个环境的包冲突,明确所需的 python 版本。我们先安装一个虚拟环境管理包,这特别对于后续 Tensorflow 和 Pytorch 的环境依赖也会有很好的支持。

sudo pip3 install -U virtualenv
virtualenv -p python3 ~/my_envs/opencvsource ~/my_envs/opencv/bin/activate #进入专门为opencv准备的虚拟环境#安装 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 )

sudo su #其实一定要给,原博主貌似不要
echo "/usr/local/lib" >> /etc/ld.so.conf
ldconfig

输入exit可以推出root模式,或者su user(user是你自己安装时候的用户名)就可以从root用户切回user用户。

最后在命令行中输入ffmpeg,查看是否有输出,有输出则为成功

ffmpeg -version

Tip:这里有个巨坑,一定要在编译 OpenCV 之前先安装 FFmpeg,并在编译参数里指定 WITH_FFMPEG=ON,这样编译出的 OpenCV 才能使用 ffmpeg 解码视频流。

编译安装 OpenCV 4.4.0

先从 https://github.com/opencv 下载两个源码包,上传到树莓派的 Downloads 目录下(或者自己改一个文件夹,但后面涉及到地址路径的地方也要相应更改):

蓝奏云:opencv-4.4.0.zip https://wws.lanzous.com/ipcL9ormsmd
opencv_contrib-4.4.0.zip https://wws.lanzous.com/ix8a3ormtgd

补充文件 https://wws.lanzous.com/isD06ormuoh

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

备份

不要以为不重要,你知道83%的时候他死机了,重启以后他报错文件受损只能重来的苦么还好我当时有备份可以少做一个配置cmake

cd ..   #返回上一级目录
cp -r build ./build1
cd build/

补充缺失

把文件夹 boostdesc_bgm.i,vgg_generated_48.i等 里的所有文件都拷贝到opencv_contrib-4.4.0

这个文件夹
opencv_contrib-4.4.0/modules/xfeatures2d/src/

回到build,开始编译

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 链接上这个文件:

注:退出虚拟环境命令

deactivate

在虚拟环境下测试一下,检测是否成功:

$ 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}/libName: 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 时输出结果如下:

此时,就算配置好了。


来个人脸检测试一下。

import cv2
#找一个图片重命名为img,与程序文件放在一个文件夹下(要有人脸啊)
img = cv2.imread('img.jpg',1)
#这里要改用你的绝对路径
face_engine = cv2.CascadeClassifier('/home/pi/Downloads/opencv/data/haarcascades/haarcascade_frontalface_default.xml')
faces = face_engine.detectMultiScale(img,scaleFactor=1.3,minNeighbors=5)
for (x,y,w,h) in faces:img = cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)# 存储检测后画框的人脸图片
cv2.imwrite('./out.png', img)
print('人脸检测完成,已保存检测结果图像')

来个调用摄像头实时进行检测

#文件内容
import cv2# 导入级联分类器引擎
face_engine = cv2.CascadeClassifier('/home/pi/Downloads/opencv/data/haarcascades/haarcascade_frontalface_default.xml')# 调用摄像头
cap = cv2.VideoCapture(0)while (True):# 获取摄像头拍摄到的画面# cap.read()返回两个参数。ret:值为true或false,表示获取画面成功或失败, frame:获取到的画面是三维数组ret, frame = cap.read()# 用人脸级联分类器引擎进行人脸识别,返回的faces为人脸坐标列表,1.3是放大比例,2是重复次数(越大精确度越高)faces = face_engine.detectMultiScale(frame, scaleFactor=1.2, minNeighbors=3, minSize=(32, 32))img = framefor (x,y,w,h) in faces:# 画出人脸框,蓝色,画笔宽度为2# (x,y):左上角坐标  (x+w,y+h):右下角坐标img = cv2.rectangle(img, (x,y), (x+w,y+h), (255,0,0), 2)# 实时展示效果画面cv2.imshow("my_window", img)# 每5毫秒监听一次键盘动作,按q键结束if cv2.waitKey(5) & 0xFF == ord("q"):break# 关闭摄像头
cap.release()
# 关闭所有窗口
cv2.destroyAllWindows()

4.写在最后

最后使用的时候,和我的笔记本就权重的名字有带点小差别了,其他一样,完美!

树莓派4B配置OpenCV4.4.0(解决报错)相关推荐

  1. 树莓派4B配置tensorflow2.4.0环境

    一开始觉得配置树莓派应该和电脑上差不多,先安装anaconda然后在里面建立tensorflow环境,但这过程比我想的艰难多.下面给出我尝试的三种配置tensoflow的方法,前两种失败了,最后一种成 ...

  2. mysql 8.0 解决报错Public Key Retrieval is not allowed

    项目中数据库mysql从5.7升到8.0后启动报错:java.sql.SQLNonTransientConnectionException: Public Key Retrieval is not a ...

  3. 树莓派4B更换清华源和没有公钥报错

    1.进入清华大学开源软件镜像站 https://mirror.tuna.tsinghua.edu.cn/help/raspbian/ 2.选择你的 Raspbian 对应的 Debian 版本(本人是 ...

  4. Sublime Text 3便携版下载安装和常用插件安装--顺便解决报错An error occured installing和no packages available for install

    文章目录 Sublime Text 3便携版下载安装和常用插件安装 1.Sublime Text 3便携版下载: 2.sublime 插件控制器(Package Control)安装 2.1离线安装P ...

  5. Qt Creator5.12配置OpenCV4.3.0和opencv_contrib扩展包(亲测有效)

    本文结构 第一部分 只安装Qt Creator和配置OpenCV 1.Qt Creator5.12.2下载与安装 2.Cmake下载与安装 3.OpenCV下载 4.编译OpenCV 5.测试Qt程序 ...

  6. Android Studio 配置OpenCV4.4.0 不用安装OpenCV Manager (泪崩居然用了礼拜天2天的时间居然还没配置成功,今天又看了下配置成功了)

    Android Studio 配置OpenCV4.4.0 ,说来惭愧居然用户礼拜天2天的时间呢,期间遇到的问题大致有4个问题 这里我也总结出了最后在列举出来,(可能是新版和之前旧版本不一样的问题按照网 ...

  7. Windows 10 下 Anaconda3 (Python 3.8) 配置 OpenCV-4.4.0

    Anaconda3 配置 OpenCV-4.4.0 我的小站.Github Anaconda指的是一个开源的Python发行版本,其包含了conda.Python等180多个科学包及其依赖项. Ope ...

  8. 树莓派 4b 配置 USB 网络连接

    树莓派 4b 配置 USB 网络连接 树莓派镜像: 2022-09-22-raspios-bullseye-arm64.img 电脑: windows 10 1 打开树莓派的 USB 网络 在 /bo ...

  9. 树莓派 编译安装OpenCV4.1.0+opencv_contrib-4.1.0

    一.下载OpenCV4.1.0+opencv_contrib-4.1.0           树莓派下载文件比较慢可以用电脑先下载文件,下载地址:           OpenCV4.1.0下载地址: ...

最新文章

  1. 【代码笔记】Web-HTML-颜色
  2. Cocos2d-3.x Android环境搭建
  3. ubuntu16.04安装python.h_ubuntu16.04安装python3.6踩过的坑
  4. matplotlib库使用
  5. 前端如何实现整套视频直播技术流程
  6. MinGW编译windows可以调试的ffmpeg4.4
  7. 刨根究底字符编码之一——关键术语解释(上)
  8. 仿知乎悬浮功能按钮FloatingActionButton
  9. 仿京东天猫商品详情页
  10. 叶荣添给你的11条投机建议!
  11. 哭的时候没人哄,我学会了坚强
  12. linux安装BFE
  13. linux 查看磁盘使用情况或清空回收站命令
  14. matlab粒子群加约束条件_多目标粒子群(PSO)与MATLAB程序视频教程及动态优化问题约束条件...
  15. 如何给网站安装SSL证书?
  16. SpringCloud/Eureka/Ribbon:No instances available for springcloud-provider-dept
  17. Ubuntu最新版本(Ubuntu22.04LTS)安装nfs服务器及使用教程
  18. 学习总结——贝叶斯方法
  19. BuChain 介绍:视屏讲解
  20. OV7670 STM32驱动 YUYV格式调试总结

热门文章

  1. 卸载oracle exp 组件,oracle Spatial 组件卸载
  2. Android应用中平滑的手写效果实现
  3. CCNP——重发布技术
  4. 5G时代谁领风骚:先看看2G、3G、4G时代都崛起了哪些公司?
  5. docker 删除镜像image报错 Error response from daemon: conflict: unable to remove repository reference
  6. 0基础编写一个微信社群工具+机器人 设计+结果
  7. 学习笔记:入侵防御与检测基础
  8. 视频号超过抖音是迟早的事
  9. 抖音只能上下滑动吗_抖音短视频推荐为什么是上下滑动?抖音短视频推荐表格设置方法...
  10. python操作autocad2007绘制图形230201