• rv1126-rknpu-v1.7.3添加opencv库


     测试平台:易佰纳rv1126 38板

    rknn_toolkit安装

    环境要求:ubutu18.04

    建议使用docker镜像

    安装docker

    参考https://zhuanlan.zhihu.com/p/143156163

    镜像地址 百度企业网盘-企业云盘-企业云存储解决方案-同步云盘

    rknn_toolkit目录结构

    docker load --input rknn-toolkit-1.7.3-docker.tar.gz

    docker images

    docker run -t -i --privileged -v /dev/bus/usb:/dev/bus/usb  \

    -v /home/wzw/rk_npu_sdk/rknn-toolkit-master-v1.7.3:/rknn_toolkit rknn-toolkit:1.7.3 /bin/bash

    至此环境搭建完成

    更新NPU驱动

    查看板端版本

    1:查看npu驱动版本

    dmesg | grep -i galcore,可以看到版本为6.4.3.5

    2:查看rknn-server版本

    strings /usr/bin/rknn_server | grep build

    3:查看librknn_runtime版本

    strings /usr/lib/librknn_runtime.so | grep version

    更新驱动

    驱动连接-> https://github.com/rockchip-linux/rknpu/tree/master/drivers

    我这里使用的是1.7.3版本,注意板端版本要尽量与rknn sdk的版本相一致,这里有两个版本的库

     其中linux-armhf-puma是full版为95M,而linux-armhf-puma-mini是小型版本仅为5.3M,他们之间的区别是mini版不支持连板推理,且仅支持预编译的rknn模型,这里采用的是full版;

     

    将linux-armhf-puma目录下的lib和bin文件 push到板端,将板端/usr/bin下的rknn_server用1.7.3的代替,并将lib下的所有库文件拷贝至/usr/lib目录下

    替换完成后

    sync

    reboot  

    查看npu驱动,rknn-server以及librknn_runtime的版本,可以看到已全部更新为1.7.3

    至此还要将库重新连接一下,因为有的库需要用到其他的库文件

    ln -snf libOpenCL.so.1.2 libOpenCL.so.1

    ln -snf libOpenVX.so.1.2 libOpenVX.so

    ln -snf libOpenVX.so.1.2 libOpenVX.so.1

    sync

    测试

    随便找一个demo进行测试,若成功则表示npu更新完成

    至此npu更新至1.7.3

    NPU sdk添加opencv库

    rv1126所使用的rknn sdk里默认是不带opencv库的,官方所用的例程里也没有使用opencv,但是这样在进行图像处理的时候有点麻烦了,这里有两种办法:

    一是先用python将所需要的图片处理好后在转化为bin格式文件,在使用c++或c进行读取,可以参考->;

    二是为其添加opencv库,可以直接在程序中调用opencv接口;下面介绍具体步骤

    交叉编译opencv源码

    1:首先利用rv1126的交叉编译工具,将opencv源码生成可在rv1126上运行的库,参考

    -> Rv1126移植opencv-CSDN博客

    2:将编译生成的install下的所有文件拷贝支/3rdparty/opencv/下

    3:编辑CMakeLists.txt

    1. cmake_minimum_required(VERSION 3.4.1)
    2. set(PROJECT_NAME rknn_template)
    3. project(${PROJECT_NAME})
    4. set(CMAKE_SYSTEM_NAME Linux)
    5. set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS}")
    6. set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
    7. if(CMAKE_SIZEOF_VOID_P EQUAL 8)
    8.     message(STATUS "64bit")
    9.     set(LIB_ARCH lib64)
    10. else()
    11.     message(STATUS "32bit")
    12.     set(LIB_ARCH lib)
    13. endif()
    14. # rknn api
    15. set(RKNN_API_PATH ${CMAKE_SOURCE_DIR}/../../librknn_api)
    16. include_directories(${RKNN_API_PATH}/include)
    17. set(RKNN_API_LIB ${RKNN_API_PATH}/${LIB_ARCH}/librknn_api.so)
    18. # opencv
    19. if(LIB_ARCH STREQUAL "lib")
    20.     set(OpenCV_DIR ${CMAKE_SOURCE_DIR}/../3rdparty/opencv/opencv-3.4.3/share/OpenCV)
    21.     message(STATUS "--------armhf")
    22. else()
    23.     set(OpenCV_DIR ${CMAKE_SOURCE_DIR}/../3rdparty/opencv/opencv-linux-aarch64/share/OpenCV)
    24.     message(STATUS "aarch64")
    25. endif()
    26. find_package(OpenCV REQUIRED)
    27. #stb
    28. include_directories(${CMAKE_SOURCE_DIR}/../3rdparty/)
    29. set(CMAKE_INSTALL_RPATH "lib")
    30. add_executable(${PROJECT_NAME}
    31.         src/main.cc
    32. )
    33. target_link_libraries(${PROJECT_NAME}
    34.         ${RKNN_API_LIB}
    35.         ${OpenCV_LIBS}
    36.         dl
    37.         )
    38. # install target and libraries
    39. set(CMAKE_INSTALL_PREFIX ${CMAKE_SOURCE_DIR}/install/${PROJECT_NAME})
    40. install(TARGETS ${PROJECT_NAME} DESTINATION ./)
    41. install(DIRECTORY model DESTINATION ./)
    42. install(PROGRAMS ${RKNN_API_LIB} DESTINATION lib)

    build.sh

    1. #!/bin/bash
    2. set -e
    3. # for rv1109/rv1126 armhf
    4. GCC_COMPILER=/opt/atk-dlrv1126-toolchain/bin/arm-linux-gnueabihf
    5. ROOT_PWD=$( cd "$( dirname $0 )" && cd -P "$( dirname "$SOURCE" )" && pwd )
    6. # build rockx
    7. BUILD_DIR=${ROOT_PWD}/build
    8. if [[ ! -d "${BUILD_DIR}" ]]; then
    9. mkdir -p ${BUILD_DIR}
    10. fi
    11. cd ${BUILD_DIR}
    12. cmake .. \
    13. -DCMAKE_C_COMPILER=${GCC_COMPILER}-gcc \
    14. -DCMAKE_CXX_COMPILER=${GCC_COMPILER}-g++
    15. make -j4
    16. make install
    17. cd -

    main.cc里加入opencv库

    此时有可能报错,使用ldd xxxx查看

    这是因为板端没有找到相应的库,此时把缺失的库拷贝到提示缺失的路径下,再次运行即可,若依然有报错则继续添加到相应路径下即可。

  • 相关阅读:
    【SnowFlake】雪花算法(Java版本)
    java奖助学金管理系统计算机毕业设计MyBatis+系统+LW文档+源码+调试部署
    41.cuBLAS开发指南中文版--cuBLAS中的Level-2gemvBatched()
    Python中的依赖注入
    亚信科技:发挥自我优势深入AIGC,并购整合高瞻远瞩致力未来路
    YOLOv8-Seg改进: 全局多头自注意力MHSA,效果秒杀CBAM、SE | 分割注意力系列篇
    在Ubuntu22.04条件下,如何打开树莓派4B的串口
    牛客网刷题记录 || 运算符与分支
    使用docker快速安装开发环境
    空气阻力对乒乓球运动轨迹的影响
  • 原文地址:https://blog.csdn.net/warren103098/article/details/133800203