当前位置: 首页 > 工具软件 > XMake > 使用案例 >

树莓派opencv+contrib+xmake环境搭建

越鸿才
2023-12-01

目录

0.Intro

1. 环境搭建过程

1.1 树莓派系统安装

1.2 树莓派ssh连接准备

1.3 更改apt源

1.4 安装clang

1.5 安装eigen

1.6 安装xmake

1.7 安装opencv与opencv_contrib

1.8 摄像头设置

1.9 Github加速

1.10 测试

2 参考网站

0.Intro

最近要搞树莓派上的目标识别,装了一手opencv,折腾了不少,在这里记录一下安装过程,也为了以后的再安装给自己一个参考。

第一次发csdn,格式按着hexo排的,感觉有点看着不太舒适,先不改了

如果有问题的话可以看我的博客

环境:

opencv - 4.5.5

opencv_contrib - 4.5.5

xmake - v2.6.3

raspberrypi - 4b with bullseye

storage -16G

cmake用的不熟,所以偷懒选择了xmake, 理论上除了树莓派不用局限在上面的版本

建议卡还是大一点,32G往上吧,可以少走点弯路

1. 环境搭建过程

  1. 如无特殊说明,安装、下载、解压目录均在   aka  /home/pi 下进行

  2. bash里粘贴不是ctrlCV,用右键-粘贴或者它的快捷键都可以,^C是关闭进程,复制用鼠标选中就可以

1.1 树莓派系统安装

  1. 树莓派的系统直接选择了官网上给出的烧录软件Raspberry Pi Imager,安装后打开的画面如下:

  2. 选择SD所在的驱动器以及要烧录的系统,因为方便用树莓派的摄像头所以我用了默认的系统,16G的话必须选recommend的系统或者更简,再往上可以安装full

  3. 进入设置,配置wifi、用户名等信息,并选择“跳过启动向导”

注1:若使用VNC显示画面,自行百度

注2:HDMI接口可能会因为外壳厚度而无法输出信号,建议裸机连接排障

1.2 树莓派ssh连接准备

  1. 电脑上安装git,利用里面的git bash

  2. 安装FileZilla,用于传输文件

  3. 树莓派官方给的找树莓派方法是手机用Fing之类的,这个就看吧,我用的华为路由器的ip管理,总之得获取一个树莓派的地址

  4. 打开bash,输入

    ssh {刚才设置的用户名,默认为pi}@{查到的树莓派地址}

    弹出询问的时候输入yes

    如果是重装的话需要在连接前,先删除电脑C:\Users\{yourname}\.ssh\known_hosts里的树莓派指纹

    输入密码,没有更改的话应该是raspberry,进入系统

  5. FileZilla的方法类似,主机名为sftp://{yourip}

完成ssh连接

1.3 更改apt源

国内访问apt的速度比较慢,因此切换到清华源

安装过程参考:

  1. raspbian | 镜像站使用帮助 | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror

# 编辑 `/etc/apt/sources.list` 文件,删除原文件所有内容,用以下内容取代:
deb [arch=armhf] http://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian/ bullseye main non-free contrib rpi
deb-src http://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian/ bullseye main non-free contrib rpi
​
# 如果需要 arm64 软件源,在 `/etc/apt/sources.list` 中加上
# (这个一般不用)
deb [arch=arm64] http://mirrors.tuna.tsinghua.edu.cn/raspbian/multiarch/ bullseye main
​
# 编辑 `/etc/apt/sources.list.d/raspi.list` 文件,删除原文件所有内容,用以下内容取代:
deb http://mirrors.tuna.tsinghua.edu.cn/raspberrypi/ bullseye main

1.4 安装clang

因为我安装xmake时用默认方法没法编译,所以参考了issue使用了clang来编译

实际操作可以先试试不用clang,如果安不了再装

安装过程参考:

  1. Raspberry Pi - Install Clang 9 and compile C++17 and C++20 programs | Solarian Programmer

  1. 前往github release下载clang安装包,其名称应为clang+llvm-{version}-armv7a-linux-gnueabihf.tar.xz

  2. 通过FileZilla将安装包传输至树莓派/home/pi目录下

  3. 解压并安装

    tar -xvf clang+llvm-{version}-armv7a-linux-gnueabihf.tar.xz
    rm clang+llvm-{version}-armv7a-linux-gnueabihf.tar.xz
    mv clang+llvm-{version}-armv7a-linux-gnueabihf clang_{version}
    sudo mv clang_{version} /usr/local
  4. 配置clang环境变量

    export PATH=/usr/local/clang_{version}/bin:$PATH
    export LD_LIBRARY_PATH=/usr/local/clang_{version}/lib:$LD_LIBRARY_PATH
  5. 长久配置clang变量

    echo 'export PATH=/usr/local/clang_9.0.0/bin:$PATH' >> .bashrc
    echo 'export LD_LIBRARY_PATH=/usr/local/clang_9.0.0/lib:$LD_LIBRARY_PATH' >> .bashrc
    . .bashrc
  6. 确定是否成功安装

    clang++ --version

    我的输出如下:

    pi@raspberrypi:~ $ clang++ --version
    clang version 13.0.1 (http://git.linaro.org/toolchain/jenkins-scripts.git d04b0fafc2d906fd9b2e8e55efb35c9cf7114e68)
    Target: armv7l-unknown-linux-gnueabihf
    Thread model: posix
    InstalledDir: /usr/local/clang_13.0.1/bin
  7. 原文中还附带了卸载方法,我就没尝试,一般直接remake了(

1.5 安装eigen

在我的项目中需要用的eigen来解算,为了与opencv连接,在opencv前安装eigen,如果项目中没有使用可以跳过

安装过程参考

  1. linux 下面如何安装Eigen_ttomchy的博客-CSDN博客_linux 安装eigen

  1. 安装

    sudo apt-get install libeigen3-dev
  2. 调整安装路径(好像不调整也可以,但是保险还是调了,反正是cp

    cd /usr/include/eigen3
    sudo cp Eigen/ .. -R

    原文有测试方法,我直接装了也没啥问题(

1.6 安装xmake

xmake还是一个非常香的编译器,所以用了它(其实还是不会cmake

遇到的最主要的问题还是make buildmake LDFLAGS="-latomic都没成功,所以按照作者意见用了clang

安装过程参考:

  1. https://github.com/xmake-io/xmake/issues/2119

  2. https://github.com/xmake-io/xmake/issues/1384

  3. xmake: 轻量级跨平台C/C++构建工具,采用lua语法接口API描述项目,提供依赖检测、编译、打包、安装、运行、调试一条龙服务

  4. xmake

安装依赖

sudo apt-get install git

默认搭建过程:

git clone --recursive https://gitee.com/tboox/xmake.git
cd ./xmake
make build
./scripts/get.sh __local__ __install_only__
source ~/.xmake/profile

clang搭建过程:

git clone --recursive https://gitee.com/tboox/xmake.git
cd ./xmake
export CC=clang
bash <(curl -fsSL https://xmake.io/shget.text)

1.7 安装opencv与opencv_contrib

主角登场,这次还查了不少的参考

这玩意儿安的挺多,每次都给我整点新花样

什么时候能出opencv一键编译安装

安装过程参考:

  1. (细节项)在Linux下用正确的姿势配置编译安装OpenCV - 知乎 -- 这个参考的还挺多的

  2. 树莓派4B 安装opencv 及实时人脸检测-raspberry pi OS version : 2021/10/30 , Based on Debian version 11 (bullseye) - 知乎

  1. 增大可用空间(如果卡大的话应该不需要

    sudo raspi-config

    方向键选择如下

    重启树莓派

  2. 安装依赖

    sudo apt-get install -y build-essential
    sudo apt-get install -y cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
    sudo apt-get install -y python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev 
    sudo apt-get install -y libavcodec-dev libavformat-dev libswscale-dev libv4l-dev liblapacke-dev
    sudo apt-get install -y libxvidcore-dev libx264-dev
    sudo apt-get install -y libatlas-base-dev gfortran 
    sudo apt-get install -y ffmpeg

    参考1里给了使用脚本的安装方式,可以看一下

  3. 在电脑上下载opencv源码

opencv 的 release页 下载Sources

opencv_contrib 的 tag页 下载与opencv版本相同的第三方库

  1. 用FileZilla传输至树莓派

  2. 解压并改名

    unzip opencv.zip
    unzip opencv_contrib.zip
    mv opencv-{version} opencv
    mv opencv_contrib-{version} opencv_contrib
  3. 预编译opencv

    cd opencv
    #创建build文件夹
    mkdir build
    cd build
    #直接粘贴,包括换行
    cmake \
      -D CMAKE_BUILD_TYPE=RELEASE \
      -D OPENCV_GENERATE_PKGCONFIG=ON  \
      -D CMAKE_SHARED_LINKER_FLAGS='-latomic' \
      -D OPENCV_ENABLE_NONFREE=ON \
      -D WITH_TBB=ON \
      -D WITH_EIGEN=ON \
      -D WITH_GTK=ON \
      -D WITH_OPENGL=ON \
      -D WITH_V4L=ON \
      -D WITH_OPENCL=OFF \
      -D WITH_CUDA=OFF \
      -D BUILD_NEW_PYTHON_SUPPORT=ON \
      -D BUILD_DOCS=ON \
      -D BUILD_TESTS=OFF \
      -D BUILD_PERF_TESTS=OFF \
      -D BUILD_EXAMPLES=ON  \
      -D BUILD_opencv_gpu=OFF \
      -D BUILD_opencv_gpuarithm=OFF \
      -D BUILD_opencv_gpubgsegm=OFF \
      -D INSTALL_PYTHON_EXAMPLES=ON \
      -D INSTALL_C_EXAMPLES=ON \
      -D CMAKE_BUILD_TYPE=RELEASE \
      -D CMAKE_INSTALL_PREFIX=/usr/local/ \
      -D OPENCV_EXTRA_MODULES_PATH=/home/pi/opencv_contrib/modules ..
      #上面这个OPENCV_EXTRA_MODULES_PATH要填刚才解压移动的opencv_contrib文件夹里modules的位置,如果名字不一样记得改

    在预编译的过程中可能会出现下载不了的问题,一般是xfeature2D之类的容易出问题,可以百度一下怎么解决,我以前遇到了这次都还好,如果下次出问题再更新

  4. 编译opencv

    sudo make -j4

    -j4 说明使用4核心(raspberry pi 4b的核心数)进行编译

    等待时间很长就等着吧

    在这个过程中可能会出现包下载不下来的问题,可以参照参考1进行排障

  5. 编译到100%即可安装

    sudo make install
  6. 配置环境

    1. 查找opencv4.pc文件,在/usr/local/lib/目录下建立pkgconfig目录,然后将build文件夹下编译生成的opencv4.pc 拷贝进/usr/local/lib/pkgconfig

      find ./ -name opencv4.pc

      我的返回如下

      pi@raspberrypi:~/opencv/build $ find ./ -name opencv4.pc
      ./unix-install/opencv4.pc

      进行复制

      sudo cp ./unix-install/opencv4.pc /usr/local/lib/pkgconfig
    2. 检查在系统中是否能找到头文件

      pkg-config --cflags --libs opencv4

      返回应该如下(具体的lib可能会有多有少,问题大部分情况不大

      pi@raspberrypi:~/opencv/build $ pkg-config --cflags --libs opencv4
      -I/usr/local/include/opencv4 -L/usr/local/lib/arm-linux-gnueabihf -lopencv_gapi -lopencv_stitching -lopencv_alphamat -lopencv_aruco -lopencv_barcode -lopencv_bgsegm -lopencv_bioinspired -lopencv_ccalib -lopencv_dnn_objdetect -lopencv_dnn_superres -lopencv_dpm -lopencv_face -lopencv_freetype -lopencv_fuzzy -lopencv_hfs -lopencv_img_hash -lopencv_intensity_transform -lopencv_line_descriptor -lopencv_mcc -lopencv_quality -lopencv_rapid -lopencv_reg -lopencv_rgbd -lopencv_saliency -lopencv_stereo -lopencv_structured_light -lopencv_phase_unwrapping -lopencv_superres -lopencv_optflow -lopencv_surface_matching -lopencv_tracking -lopencv_highgui -lopencv_datasets -lopencv_text -lopencv_plot -lopencv_videostab -lopencv_videoio -lopencv_wechat_qrcode -lopencv_xfeatures2d -lopencv_shape -lopencv_ml -lopencv_ximgproc -lopencv_video -lopencv_xobjdetect -lopencv_objdetect -lopencv_calib3d -lopencv_imgcodecs -lopencv_features2d -lopencv_dnn -lopencv_flann -lopencv_xphoto -lopencv_photo -lopencv_imgproc -lopencv_core
    3. 修改opencv.conf

      sudo nano /etc/ld.so.conf.d/opencv.conf
      ​
      #在opencv.conf中添加内容:
      /usr/local/lib

      ctrl+o enter 保存

      ctrl+x 退出

    4. 执行生效命令

      sudo ldconfig
    5. 修改bash.bashrc

      sudo nano /etc/bash.bashrc
      ​
      #文件末尾加入:
      export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig  
    6. 这里应该会有一个更新命令,但好像要装mlocate,我就贴个命令,不执行好像也没事

      source /etc/bash.bashrc  
      sudo updatedb  

    我们的opencv搭完啦!

1.8 摄像头设置

针对树莓派官方的摄像头,其他的没试过(

设置过程参考:

  1. 子豪兄教你在树莓派上安装OpenCV - 知乎

硬件安装上,把板子放在桌面上,黑抽屉的两个耳朵往上拉,然后把排线塞进去即可

如果有问题的话先看硬件连接,没问题去百度

设置代码

sudo raspi-config

选择Interface Options-Legency Camera,启用它,重启

这时候好像就用不了VNC了,目前没有找解决方案除了直接外接显示器

测试代码

vcgencmd get_camera

我的输出

pi@raspberrypi:~/opencv/build $ vcgencmd get_camera
supported=1 detected=1

可以输入命令

raspistill -o image.jpg

会调用摄像头生成一张名为image.jpg的图片到/home/pi

1.9 Github加速

如果测试时,xmake可以顺利下载依赖就不需要了

设置过程参考:

  1. Linux中加速访问github - zonyZhang - 博客园 -- 本块基本全文粘贴

  1. 登录Dns检测|Dns查询 - 站长工具

  2. 查询以下域名映射,并分别取访问速度较快的一个ip

github.global.ssl.fastly.net -> 151.101.229.194

assets-cdn.github.com -> 203.208.39.99

TTL值越大证明响应速度越快

  1. 将查询到的ip和域名设置到host中

    sudo nano /etc/hosts

    在hosts加入结果

    #github
    151.101.229.194  github.global.ssl.fastly.net
    203.208.39.99 assets-cdn.github.com

    保存,退出,并重启网络服务

    /etc/init.d/networking restart

1.10 测试

测试代码考虑到不一定有桌面输出,所以写了无需imshow的程序

TODO:还没有做摄像头的捕捉,过一阵更新吧

设置过程参考:

  1. 在Ubuntu20.04下配置Opencv(C++)并用xmake构建和运行 - 小季不是咸鱼 - 博客园

  2. xmake去github下载包失败 该如何绕过? · Issue #I1AW6Z · tboox/xmake - Gitee.com -- 最终未使用,仅作为github下载失败的解决方案之一

  1. /home/pi下建立workspace/opencv-test(这部分文件夹起名随意,但建议放在/home/pi下,其中opencv-test即为我们的项目储存地

    cd ~
    mkdir workspace/opencv-test
    cd workspace/opencv-test
  2. 创建代码,可以在电脑上编完再放上去,也可以在树莓派上现写

    #在/home/pi/workspace/opencv-test目录下
    touch test.cpp
    nano test.cpp

    或者FileZilla直接传写好的test.cpp

    测试代码如下

    #include <opencv2/opencv.hpp>
    #include <iostream>
    ​
    using namespace std;
    using namespace cv;
    ​
    int main(){
        cout << "Programme begin." << endl;
        Mat input_image = imread("./image.jpg");
        cout << "Finish reading image." << endl;
        Mat output_image;
        cvtColor(input_image, output_image, COLOR_BGR2GRAY);
        cout << "Gen gray image." << endl;
        imwrite("./image_gray.jpg", output_image);
        return 0;
    }
  3. 使用xmake编译

    xmake

    输入y确定,首次或者下面更改完xmake.lua后可能会下载一些依赖,等待下载,如果不行参照1.9处理

    这时候会找不到opencv.hpp

  4. 更改xmake.lua

    nano xmake.lua

    将其修改为

    add_requires("opencv4")
    ​
    target("test")
        set_kind("binary")
        add_rules("mode.debug", "mode.release")
        add_includedirs("/usr/include", "/usr/local/include", "/usr/local/include/opencv4")
        add_packages("opencv4")
        add_files("test.cpp")
    ​
    set_languages("cxx17")

    这里注意的有:

    1. add_requires()add_packages()用的是opencv4而非opencv这好像与pkg的安装有关,以后也得加4

    2. 如果多文件的话需要看一下参考,这个是不够的

  5. 再次编译

    xmake

    在这之前设置了/usr/local/include/opencv4/opencv2/usr/local/include/opencv4的软链接,如果下文出现错误可以尝试建立软链接(方法百度)

  6. 运行文件

    xmake -r
  7. 终端和FileZilla都进入./build/linux/armv7a/release/

    cd build/linux/armv7a/release/

    FileZilla在release下上传名为image.jpg的图片(比如测试摄像头的那一张)

  8. 运行

    ./test

    我的输出

    pi@raspberrypi:~/workspace/opencv-test/build/linux/armv7a/release $ ./test
    Programme begin.
    Finish reading image.
    Gen gray image.
    pi@raspberrypi:~/workspace/opencv-test/build/linux/armv7a/release $ ls
    image_gray.jpg  image.jpg  test

    应该会在同一文件夹下生成image_gray.jpg的灰度图,可以用FileZilla下载到电脑上查看(注意F5刷新FileZilla)

至此除了没有测试opencv读取摄像头已经全部完成了,在测试环境可能会出现各种各样烦得要死的问题,善用百度、csdn、git issue等平台吧

希望搭建顺利!

2 参考网站

以下是我在搭建环境时或多或少参照的内容,感谢他们的付出

  1. clang搭建

    1. Raspberry Pi - Install Clang 9 and compile C++17 and C++20 programs | Solarian Programmer

    2. Getting Started with the LLVM System — LLVM 15.0.0git documentation

  2. eigen安装

    1. linux 下面如何安装Eigen_ttomchy的博客-CSDN博客_linux 安装eigen

  3. opencv搭建

    1. (细节项)在Linux下用正确的姿势配置编译安装OpenCV - 知乎

    2. 树莓派4B 安装opencv 及实时人脸检测-raspberry pi OS version : 2021/10/30 , Based on Debian version 11 (bullseye) - 知乎

    3. Linux(Ubuntu 18.04)中安装OpenCV + OpenCV_Contrib - 花落未殇 - 博客园

    4. 树莓派3和4B安装OpenCV教程(编译源码,一次成功)提供安装好OpenCV的系统镜像_zqxdsy的博客-CSDN博客_树莓派安装编译opencv

  4. xmake搭建

    1. https://github.com/xmake-io/xmake/issues/2119

    2. xmake: 轻量级跨平台C/C++构建工具,采用lua语法接口API描述项目,提供依赖检测、编译、打包、安装、运行、调试一条龙服务

  5. 摄像头设置

    1. 子豪兄教你在树莓派上安装OpenCV - 知乎

  6. xmake测试

    1. 在Ubuntu20.04下配置Opencv(C++)并用xmake构建和运行 - 小季不是咸鱼 - 博客园

    2. xmake去github下载包失败 该如何绕过? · Issue #I1AW6Z · tboox/xmake - Gitee.com

  7. github代理

    1. Linux中加速访问github - zonyZhang - 博客园

  8. 搭建环境综合(为什么我最后才看见)

    1. 北理工机器人队RM视觉组ubuntu必备软件安装指南 - LightningStar - 博客园

 类似资料: