315

瑞芯微rk3588平台的开发板上编译opencv笔记

乐果   发表于   2024 年 01 月 03 日 标签:cc++arm

最近在公司开始研究边缘侧人脸识别能力,打算采用百度离线 sdk 植入集成方式, 之前倒腾穿透时买了orange-pi 5 plus开发板, 这下刚好与百度离线sdk的硬件要求(arm架构)匹配,于是就开始继续倒腾起来。

其中在预研人脸识别 sdkdemo 中需要用到 opencv 类库,故作此笔记。

下载源码与交叉编译工具

本人的开发pc机是 x86 架构 ubuntu 系统, 本笔记以此为例。

首先要在pc机上安装cmake,为了保险也装上gcc和g++。例如,可以这样安装Cmake:

sudo snap install cmake --classic

除此之外,一定也要安装make:

sudo apt install make

下载源码

opencv源码: https://opencv.org/releases/page/3/

下载交叉编译工具

交叉编译工具: https://developer.arm.com/downloads/-/gnu-a

因为我们是需要从 x86_64 交叉编译到 aarch64,因此选择 gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu

解压OpenCV和交叉编译工具链

在PC上,将下载好的OpenCV压缩包进行解压。其实放在哪个目录无所谓,假设在home下:

unzip opencv-4.1.2.zip

随后进入解压后的文件夹,并新建 build目录 和 /usr/local/opencv4.1.2 目录。build 用来存放 cmake 的中间文件,/usr/local/opencv4.1.2 用来存放安装文件,将来粘贴到板子上。

cd opencv-4.1.2
mkdir build
sudo mkdir -p /usr/local/opencv4.1.2

同样,解压交叉编译工具链:

tar -xvf gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu.tar.xz

之后将其 bin子目录加入 .bashrc (因为我用了zsh , 所以我的是 .zshrc ):

export PATH="/home/xiao/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu/bin:$PATH"

同样需要激活

source .bashrc
# 或 source .zshrc

配置交叉编译

首先启动 cmakegui 界面:

cmake-gui

Where is the source code 选择 OpenCV 所在目录, Where to build the binaries 选择 OpenCV 下的 build 文件夹:

之后点左下角的configure,进行如图配置:

点击next,然后如图配置:

点击 finish ,成功后,在 Search 栏中搜索 PREFIX , 选定安装到哪个目录(例如,将如下截图目录改成 /usr/local/opencv4.1.2 ):

此外CMAKE_BUILD_TYPE设置成RELEASE ,其他的选项可以个性化配置,我就没有更改其他的。

再次点击 configure ,点击generate

成功后,进入 OpenCVbuild 目录,执行:

sudo make -j4

j后面是进程数,不指定也可以。

在编译阶段肯定会报错,我遇到的错误有两个,第一个是:

解决方法:按照提示找到路径,即 3rdpatry/carotene/hal/carotene/Cmakefiles/carotene_objs.dir ,找到里面的 build.makeflags.make , 将里面的 ipcp-unit-growth 全部替换为 ipa-cp-unit-growth

vim 3rdparty/carotene/hal/carotene/CMakeFiles/carotene_objs.dir/build.make
# 搜索替换:%s/ipcp-unit-growth/ipa-cp-unit-growth/g
vim 3rdparty/carotene/hal/carotene/CMakeFiles/carotene_objs.dir/flags.make
# 搜索替换:%s/ipcp-unit-growth/ipa-cp-unit-growth/g

第二个是:

fetal error : no such file or dictionary: zlib.h

是报找不到 zlib.h 头文件的错误。一开始我去zlib的官网安装 zlib,但是没有用,解决的方法是:不要用外部的 zlib,直接用 OpenCV 目录里的 zlib ,即 ./opencv-3.4.5/3rdparty/zlib/zlib.h

于是,哪个文件报找不到 zlib.h ,就直接更改 include 即可 . 即:

将报错行的 #include <zlib.h>#include "zlib.h" 改成相对路径,让它引用到 ./opencv-3.4.5/3rdparty/zlib/zlib.h : 例如 ./opencv-3.4.5/3rdparty/libpng/pngstruct.h 中的 #include "zlib.h" 改为 #include "../zlib/zlib.h"

make 成功后 执行:

sudo make install

将OpenCV移动到板卡上

上一步执行完毕后,install文件夹里应该就有东西了。我们只需要这个文件夹,但是不要直接复制粘贴,因为里面的一些so文件是不可以复制粘贴的。为此,我们先把install打包:

tar -czvf opencv4.1.2.tar.gz /usr/local/opencv4.1.2

随后将 opencv4.1.2.tar.gz 放到板卡某路径下,例如 /usr/local, 并解压:

tar -xvf opencv4.1.2.tar.gz

随后要做两处更改,一是在 /etc/ld.so.conf 中增加:

cd /etc
sudo vim ld.so.conf

末尾增加:

/usr/local/opencv4.1.2/lib

然后在 ld.so.conf.d 中新建 opencv.conf :

cd ld.so.conf.d
sudo vim opencv.conf

编写内容:

/usr/local/opencv4.1.2/lib

乐果   发表于   2024 年 01 月 03 日 标签:cc++arm

0

文章评论