瑞芯微rk3588平台的开发板上编译opencv笔记
乐果 发表于 2024 年 01 月 03 日 标签:cc++arm
最近在公司开始研究边缘侧人脸识别能力,打算采用百度离线 sdk
植入集成方式,
之前倒腾穿透时买了orange-pi 5 plus
开发板,
这下刚好与百度离线sdk的硬件要求(arm架构)匹配,于是就开始继续倒腾起来。
其中在预研人脸识别 sdk
的 demo
中需要用到 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
配置交叉编译
首先启动 cmake
的 gui
界面:
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
。
成功后,进入 OpenCV
的 build
目录,执行:
sudo make -j4
j后面是进程数,不指定也可以。
在编译阶段肯定会报错,我遇到的错误有两个,第一个是:
解决方法:按照提示找到路径,即 3rdpatry/carotene/hal/carotene/Cmakefiles/carotene_objs.dir
,找到里面的 build.make
和 flags.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