• Tengine 边缘AI计算框架移植RV1126(包括opencv的交叉编译)


    目录

    1.编译opencv

    2.拷贝SDK源码到虚拟机

    3. 拉取TIM-VX代码

    4.拉取Tengine源码并配置


    1.编译opencv

    编译opencv是为了,在编译Tengine时指定OpenCVConfig.cmake,以便寻找特定的opencv动态库

    01.从github拉取opencv源代码

    git clone -b 4.5.5 https://github.com/opencv/opencv.git 
    

    02.在虚拟机安装cmake

    1. sudo apt-get update
    2. sudo apt-get install cmake

    04.解压opencv源码,并进入文件

    05.新建文件ax620a.toolchain.cmake配置交叉编译工具链

    1. set(CMAKE_SYSTEM_NAME Linux)
    2. set(CMAKE_SYSTEM_PROCESSOR arm)
    3. #如果未设置交叉编译器到环境变量,要加入绝对路径,我这里已经加入到环境变量中了
    4. set(CMAKE_C_COMPILER "arm-linux-gnueabihf-gcc")
    5. set(CMAKE_CXX_COMPILER "arm-linux-gnueabihf-g++")
    6. set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
    7. set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
    8. set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
    9. set(CMAKE_C_FLAGS "-march=armv7-a -mfloat-abi=hard -mfpu=neon")
    10. set(CMAKE_CXX_FLAGS "-march=armv7-a -mfloat-abi=hard -mfpu=neon")
    11. # cache flags
    12. set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS}" CACHE STRING "c flags")
    13. set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}" CACHE STRING "c++ flags")

    06.创建build文件夹并配置cmake

    1. mkdir build && cd build
    2. #sudo cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=./build -D OPENCV_ENABLE_NONFREE=True -DCMAKE_TOOLCHAIN_FILE=../ax620a.toolchain.cmake -D WITH_FFMPEG=ON ../
    3. # -D CMAKE_INSTALL_PREFIX指定编译后的安装路径
    4. # -D CMAKE_BUILD_TYPE=Release优化编译,删除没必要的调试信息等
    5. # -D OPENCV_ENABLE_NONFREE开启了非自由模块的支持
    6. # -DCMAKE_TOOLCHAIN_FILE指定了交叉编译工具链文件的位置
    7. # -D WITH_FFMPEG开启了FFmpeg的支持
    8. cmake -DCMAKE_TOOLCHAIN_FILE=../ax620a.toolchain.cmake -DCMAKE_INSTALL_PREFIX=$(pwd)/_install -DOPENCV_FORCE_3RDPARTY_BUILD=ON ../

    07.编译并安装

    1. #sudo make && make install
    2. make -j$(nproc --ignore 1)

    查看在build目录下是否存在OpenCVConfig.cmake文件

    2.拷贝SDK源码到虚拟机

    SDK源码中带有Tengine需要的动态库,所以必须把SDK源码拷贝到虚拟机

    3. 拉取TIM-VX代码

    1. git clone https://github.com/VeriSilicon/TIM-VX.git
    2. cd TIM-VX
    3. git checkout 68b5acb

    4.拉取Tengine源码并配置

    01拉取代码

    1. git clone https://github.com/OAID/Tengine.git tengine-lite
    2. cd tengine-lite

    02.将 TIM-VX 的 include 和 src 目录复制到 Tengine-Lite 的 source/device/tim-vx 目录下,以便于 CMake 查找文件完成编译

    1. cd tengine-lite
    2. cp -rf ../TIM-VX/include ./source/device/tim-vx/
    3. cp -rf ../TIM-VX/src ./source/device/tim-vx/

    03. 准备 x86_64 3rdparty 依赖

    准备的 include 目录和 VIM3/VIM3L 本地编译 NPU 最新版本相同,下载一份 perbuild SDK,将其中的 include 文件夹复制到 3rdparty/tim-vx 目录。 依赖的 lib 目录下的文件需要从前面 SDK 中解压出来的 external/rknpu/drivers/linux-armhf-puma/usr/lib 目录提取。将该目录下的文件全部(实际上不需要全部复制,FAQ 有文件列表)复制到 3rdparty/tim-vx/lib/aarch32 文件夹下即可

    1. wget -c https://github.com/VeriSilicon/TIMVX/releases/download/v1.1.28/aarch64_S905D3_D312513_A294074_R311680_T312233_O312045.tgz
    2. tar zxvf aarch64_S905D3_D312513_A294074_R311680_T312233_O312045.tgz
    3. mv aarch64_S905D3_D312513_A294074_R311680_T312233_O312045 prebuild-sdk-s905d3
    4. cd tengine-lite
    5. mkdir -p ./3rdparty/tim-vx/include
    6. mkdir -p ./3rdparty/tim-vx/lib/aarch32
    7. cp -rf ../prebuild-sdk-s905d3/include/* ./3rdparty/tim-vx/include/
    8. cp -rf /* ./3rdparty/tim-vx/lib/aarch32/
    9. #是external/rknpu/drivers/linux-armhf-puma/usr/lib 

     04.修改cmake文件

    1. cd toolchains
    2. vi arm-linux-gnueabihf.toolchain.cmake

     修改为绝对路径

    05.设置 OpenCV_DIR 环境变量

    设置 OpenCV_DIR 环境变量是为了指定OpenCVConfig.cmake文件的路径

    exoprt OpenCV_DIR=/home/alientek/opencv-4.x/build

    06.编译

    1. cd tengine-lite-root-dir
    2. mkdir build && cd build
    3. export PATH=/bin:$PATH
    4. ln -s ../3rdparty/tim-vx/lib/aarch32/libOpenVX.so.1.2 ../3rdparty/tim-vx/lib/aarch32/libOpenVX.so
    5. cmake -DCMAKE_TOOLCHAIN_FILE=../toolchains/arm-linux-gnueabihf.toolchain.cmake -DTENGINE_ENABLE_TIM_VX=ON -DTENGINE_OPENMP=OFF ..
    6. make -j`nproc` && make install

    提取 install 目录下的文件到板子上测试即可。需要注意的是,不设置OpenCV_DIR环境变量部分 OpenCV 依赖的 example 在这个过程中不会编译,需要先准备好交叉编译的OpenCV,并正确设置 OpenCV_DIR 到环境变量中方可打开这部分 example 的编译。(咱们已经设置过了)可以看到,我们把所有组件都编译出来了

  • 相关阅读:
    GNSS技术在农业领域的创新应用
    【Python-编程模式】
    【LeetCode周赛】LeetCode第365场周赛
    长安链可验证数据库,保证数据完整性的可信存证方案
    SOLIDWORKS 2023新产品发布会!带你领略SOLIDWORKS 2023新增功能!
    《人类简史》笔记四—— 想象构建的秩序
    从零开始配置 vim(18)——终端模式
    车道线检测-GANet-CVPR2022论文学习笔记
    总结List的三种实现类
    GSCoolink GSV2201D 替 IT6563 DisplayPort 1.2转HDMI 2.0
  • 原文地址:https://blog.csdn.net/weixin_45993872/article/details/133832787