网站开发实现页面的跳转,执法局网站建设目的,做网站的eclip,免费的个人空间建网站一 问题背景 瑞芯微RK3588等嵌入式板作为边缘端设备为算法模型的部署提供了便利#xff0c;目前很多分类或好检测模型针对边缘端做了优化或量化#xff0c;使得在边缘端也能达到实时稳定的识别和检测效果。 但嵌入式设备普遍的flash emmc不大#xff0c;一般在32G左…一 问题背景 瑞芯微RK3588等嵌入式板作为边缘端设备为算法模型的部署提供了便利目前很多分类或好检测模型针对边缘端做了优化或量化使得在边缘端也能达到实时稳定的识别和检测效果。 但嵌入式设备普遍的flash emmc不大一般在32G左右如果在嵌入式设备进行大量的编译操作很容易空间不足。通过交叉编译的方式避免文件包在嵌入式上编译可以通过在x86 PC端等进行交叉编译然后将编译好的文件夹拷贝到ARM设备平台上。
交叉编译是指在一台计算机上生成目标平台的可执行程序。通常情况下我们在开发软件时会在同一平台上编译、运行程序但有时候需要将程序部署到不同体系结构或操作系统的设备上运行这就需要使用交叉编译工具链来生成适用于目标平台的可执行文件。常见的应用场景包括在开发嵌入式系统、移动应用程序或跨平台软件时进行交叉编译。 二 问题描述 需要将一个类似于CNStream的框架移植到RK3588板子上跑通示例模型其中需要用到交叉编译后的带ffmeg的opencv,读取示例MP4视频作为模型算法输入数据完成框架移植与测试。 三 环境准备
-linux系统unbuntu18.04 X86_64 -rk3588软件包rknn-toolkit2:1.5.2-cp36 -交叉编译工具gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu -硬件平台寒武纪MLU270
1 创建docker虚拟环境
docker创建命令如下 docker run -it --privileged --name NewF3588 -p 35886:22 -v /home/lc/hang/rk3588:/workspace/hang/rk3588 rknn-toolkit2:1.5.2-cp36 /bin/bash
2 搭建交叉编译环境
step1交叉编译工具链下载
下载交叉编译工具链将交叉编译工具放置在docker虚拟环境中比如/opt目录下改名gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu为aarch64-rockchip-linux-gnu
step2 设置交叉编译环境变量
关于linux下环境变量的设置可看此处博文https://blog.csdn.net/xishining/article/details/119283522 通过vim ~/.bashrc命令打开环境变量配置文件主要是添加lib、lib64余bin文件 在文件最后添加 export LD_LIBRARY_PATH/opt/aarch64-rockchip-linux-gnu/lib:/opt/aarch64-rockchip-linux-gnu/lib64:$LD_LIBRARY_PATH export PATH$PATH:/opt/aarch64-rockchip-linux-gnu/bin 添加后保存并 source ~/.bashrc 验证交叉编译环境是否搭建成功在任意目录执行命令 aarch64-none-linux-gnu-gcc -v 若返回gcc版本号则表示成功。 四 源码下载与安装
1 两个必要的软件包
apt-get install build-essential pkg-config
2 cmake3.23.0 https://cmake.org/download/http:// https://cmake.org/download/ 3 opencv-4.5.1
https://opencv.org/releases/page/2/http:// https://opencv.org/releases/page/2/ 4 opencv_contrib-4.5.1
https://github.com/opencv/opencv_contrib/releases/tag/4.5.1http:// https://github.com/opencv/opencv_contrib/releases/tag/4.5.1 5 ffmpeg-4.2.9
https://ffmpeg.org/download.html#releaseshttp:// https://ffmpeg.org/download.html#releases 以上软件下载源码后解压至/opt目录下并先创键/arm/fffmpeginstall夹用于后续存放ffmeg相关配置文件 五 源码编译
1 cmake源码编译
cmake --version检查是否安装成功
2 ffmepg交叉编译
#在/opt目录下依次执行以下命令cd ffmpeg-4.2.9
#不带x264的ffmpeg编译
#注意修改--cross-prefix--cc--cxx--prefix为自己相关文件路径其他不变
./configure --enable-cross-compile --target-oslinux --archaarch64 \
--cross-prefix/opt/aarch64-rockchip-linux-gnu/bin/aarch64-none-linux-gnu- \
--cc/opt/aarch64-rockchip-linux-gnu/bin/aarch64-none-linux-gnu-gcc \
--cxx/opt/aarch64-rockchip-linux-gnu/bin/aarch64-none-linux-gnu-g \
--prefix/opt/arm/fffmpeginstall \
--disable-asm --enable-parsers --disable-decoders --enable-decoderh264 --disable-debug --enable-ffmpeg --enable-shared --disable-static --disable-stripping --disable-doc
#带x264的ffmpeg编译
./configure --enable-cross-compile --target-oslinux --archaarch64 \
--cross-prefix/opt/aarch64-rockchip-linux-gnu/bin/aarch64-none-linux-gnu- \
--cc/opt/aarch64-rockchip-linux-gnu/bin/aarch64-none-linux-gnu-gcc \
--cxx/opt/aarch64-rockchip-linux-gnu/bin/aarch64-none-linux-gnu-g \
--prefix/opt/arm/fffmpeginstall \
--extra-cflags-I/opt/arm/fffmpeginstall/include \
--extra-ldflags-L/opt/arm/fffmpeginstall/lib \
--disable-asm --enable-parsers --disable-decoders --enable-decoderh264 --disable-debug --enable-ffmpeg --enable-shared --disable-static --disable-stripping --disable-doc --enable-libx264 --enable-gpl
执行make命令编译并查看是否编译成功有无报错。
make -j$(nproc)make install
然后进入你的--prefix目录查看生成的文件bin,include,lib,share 在/opt/arm/fffmpeginstall//bin目录下执行file libavcodec.so.60.35.100命令若出现aarch64则表示ffmpeg交叉编译成功 设置ffmpeg的环境变量这里是设置的临时的环境变量 export PKG_CONFIG_PATH/opt/arm/fffmpeginstall/lib/pkgconfig$PKG_CONFIG_PATH export PKG_CONFIG_LIBDIR/opt/arm/fffmpeginstall/lib$PKG_CONFIG_LIBDIR export LD_LIBRARY_PATH/opt/arm/fffmpeginstall/lib:$LD_LIBRARY_PATH export 查看环境变量格式是否正确 进入/opt/aarch64-rockchip-linux-gnu/aarch64-none-linux-gnu/libc/usr路径下将ffmpeg生成的文件bin,include,lib,share目录下的文件分别对应复制到 usr目录下binincludelibshare文件夹中 3 opencvopencv_contrib交叉编译
STEP1先把opencv_contrib源码复制到opencv源码目录下
STEP2进入opencv源码目录进行以下操作 mkdir build 用于存放cmake的生成文件 mkdir install用于存放opencv交叉编译的生成文件夹 vim tool_chain.cmake 创键交叉编译工具链文件 #修改tool_chain.cmake文件添加以下内容注意修改相关路径
set( CMAKE_SYSTEM_NAME Linux )
set( CMAKE_SYSTEM_PROCESSOR aarch64 )
set( CMAKE_C_COMPILER /opt/aarch64-rockchip-linux-gnu/bin/aarch64-none-linux-gnu-gcc)
set( CMAKE_CXX_COMPILER /opt/aarch64-rockchip-linux-gnu/bin/aarch64-none-linux-gnu-g)
#set( OPENCV_ENABLE_PKG_CONFIG ON)
#set( CMAKE_C_FLAGS -Wl,-rpath-link/opt/arm/fffmpeginstall/lib)
set( CMAKE_FIND_ROOT_PATH /opt/arm/fffmpeginstall/lib )
set( CMAKE_CXX_FLAGS -Wl,-rpath/opt/arm/fffmpeginstall/lib)
set( CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER )
set( CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY )
set( CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY ) 保存后关闭 tool_chain.cmake文件。
STEP3进入opencv源码根目录进入build文件夹执行以下命令
cmake -DCMAKE_INSTALL_PREFIX../install \
-DOPENCV_EXTRA_MODULES_PATH../opencv_contrib-4.5.1/modules \
-DWITH_FFMPEGON \
-DCMAKE_TOOLCHAIN_FILE../toolchain.cmake ..
出现ffmpeg YES 表示链接ffmpeg成功然后执行make命令编译生成
make -j$(nproc)make install 六 应用说明
一般应用
最后在opencv源码根目录install文件夹下将include和lib里的文件分别拷贝到ARM板的/usr/include 和/usr/lib下 然后打开终端执行可执行文件即可。
本例应用
最后在opencv源码根目录install文件夹下将include和lib里的文件分别替换框架程序原opencv源码交叉编译并将生成的文件放到目标嵌入式板子上。
因为采用的是opnecv硬编码ffmpeg,所以需要将前文中ffmpeg编译生成的bin,include,lib,share文件夹放到目标RK3588板上。并设置临时环境变量。 #环境变量设置
#环境变量查询命令
echo $PATH
echo $LD_LIBRARY_PATH
echo $PKG_CONFIG_PATH
echo $PKG_CONFIG_LIBDIR#RK3588板子
#ffmpeg库
#在板子环境下的/opt目录下新建/arm/fffmpeginstall目录用于放置ffmpeg的四个文件夹
export PATH$PATH:/opt/arm/fffmpeginstall/bin
export LD_LIBRARY_PATH/opt/arm/fffmpeginstall/lib:$LD_LIBRARY_PATH
export PKG_CONFIG_PATH/opt/arm/fffmpeginstall/lib/pkgconfig:$PKG_CONFIG_PATH
export PKG_CONFIG_LIBDIR/opt/arm/fffmpeginstall/lib:$PKG_CONFIG_LIBDIR