当前位置: 首页 > news >正文

[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 <stdio.h>
#include <opencv2/opencv.hpp>

using namespace cv;

int main(int argc, char** argv )
{
    if ( argc != 2 )
    {
        printf("usage: DisplayImage.out <Image_Path>\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的教程

相关文章:

  • PTC:需求管理是智能汽车高效创新的关键能力
  • Vue——整理一些开源管理平台项目
  • 堡垒机有录像吗?好用吗?有什么作用?
  • 优雅的实现EasyPoi动态导出列的两种方式
  • 基于Matlab 实现螺旋线 轨迹曲线绘制
  • 「Python」面向对象封装案例1——小夏爱跑步、案例扩展
  • java专家系统房产营销智能推荐系统计算机毕业设计MyBatis+系统+LW文档+源码+调试部署
  • 面向对象是面试时提问最多的吗?
  • HTML5和CSS3四属性总结一
  • paddlepaddle 复现论文LeNet-5网络结构(仅仅关注模型)
  • 查询出跨4个表以上的查询
  • 罗马数字转整数(13)题解
  • STC单片机RAM在KEIL编程使用
  • Git的版本控制(查看文件内容和文件的变化状态、版本日志、版本回退以及找回覆盖的版本等)
  • ijkplayer源码分析 —— 事件消息设计
  • 0x05 Python数据分析,Anaconda八斩刀
  • Angular2开发踩坑系列-生产环境编译
  • - C#编程大幅提高OUTLOOK的邮件搜索能力!
  • C++回声服务器_9-epoll边缘触发模式版本服务器
  • conda常用的命令
  • CoolViewPager:即刻刷新,自定义边缘效果颜色,双向自动循环,内置垂直切换效果,想要的都在这里...
  • JavaWeb(学习笔记二)
  • Java应用性能调优
  • js操作时间(持续更新)
  • Linux gpio口使用方法
  • Ruby 2.x 源代码分析:扩展 概述
  • Sass Day-01
  • unity如何实现一个固定宽度的orthagraphic相机
  • Vue全家桶实现一个Web App
  • webgl (原生)基础入门指南【一】
  • 第13期 DApp 榜单 :来,吃我这波安利
  • 猫头鹰的深夜翻译:Java 2D Graphics, 简单的仿射变换
  • 少走弯路,给Java 1~5 年程序员的建议
  • 摩拜创始人胡玮炜也彻底离开了,共享单车行业还有未来吗? ...
  • 组复制官方翻译九、Group Replication Technical Details
  • ​Z时代时尚SUV新宠:起亚赛图斯值不值得年轻人买?
  • # .NET Framework中使用命名管道进行进程间通信
  • #pragma multi_compile #pragma shader_feature
  • #图像处理
  • (10)Linux冯诺依曼结构操作系统的再次理解
  • (rabbitmq的高级特性)消息可靠性
  • (补)B+树一些思想
  • (附源码)springboot 房产中介系统 毕业设计 312341
  • (黑马出品_高级篇_01)SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式
  • (剑指Offer)面试题34:丑数
  • (理论篇)httpmoudle和httphandler一览
  • (转)编辑寄语:因为爱心,所以美丽
  • (转)项目管理杂谈-我所期望的新人
  • ..回顾17,展望18
  • .NET delegate 委托 、 Event 事件
  • .Net程序帮助文档制作
  • .net打印*三角形
  • .Net的DataSet直接与SQL2005交互
  • .NET和.COM和.CN域名区别
  • .NET建议使用的大小写命名原则