环境要求: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

至此环境搭建完成
查看板端版本
dmesg | grep -i galcore,可以看到版本为6.4.3.5

strings /usr/bin/rknn_server | grep build
![]()
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
rv1126所使用的rknn sdk里默认是不带opencv库的,官方所用的例程里也没有使用opencv,但是这样在进行图像处理的时候有点麻烦了,这里有两种办法:
一是先用python将所需要的图片处理好后在转化为bin格式文件,在使用c++或c进行读取,可以参考->;
二是为其添加opencv库,可以直接在程序中调用opencv接口;下面介绍具体步骤
1:首先利用rv1126的交叉编译工具,将opencv源码生成可在rv1126上运行的库,参考
2:将编译生成的install下的所有文件拷贝支/3rdparty/opencv/下
![]()
![]()
- cmake_minimum_required(VERSION 3.4.1)
- set(PROJECT_NAME rknn_template)
- project(${PROJECT_NAME})
-
- set(CMAKE_SYSTEM_NAME Linux)
-
- set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS}")
- set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
-
- if(CMAKE_SIZEOF_VOID_P EQUAL 8)
- message(STATUS "64bit")
- set(LIB_ARCH lib64)
- else()
- message(STATUS "32bit")
- set(LIB_ARCH lib)
- endif()
-
- # rknn api
- set(RKNN_API_PATH ${CMAKE_SOURCE_DIR}/../../librknn_api)
- include_directories(${RKNN_API_PATH}/include)
- set(RKNN_API_LIB ${RKNN_API_PATH}/${LIB_ARCH}/librknn_api.so)
-
- # opencv
- if(LIB_ARCH STREQUAL "lib")
- set(OpenCV_DIR ${CMAKE_SOURCE_DIR}/../3rdparty/opencv/opencv-3.4.3/share/OpenCV)
- message(STATUS "--------armhf")
- else()
- set(OpenCV_DIR ${CMAKE_SOURCE_DIR}/../3rdparty/opencv/opencv-linux-aarch64/share/OpenCV)
- message(STATUS "aarch64")
- endif()
- find_package(OpenCV REQUIRED)
-
- #stb
- include_directories(${CMAKE_SOURCE_DIR}/../3rdparty/)
-
- set(CMAKE_INSTALL_RPATH "lib")
-
- add_executable(${PROJECT_NAME}
- src/main.cc
- )
-
- target_link_libraries(${PROJECT_NAME}
- ${RKNN_API_LIB}
- ${OpenCV_LIBS}
- dl
- )
-
- # install target and libraries
- set(CMAKE_INSTALL_PREFIX ${CMAKE_SOURCE_DIR}/install/${PROJECT_NAME})
- install(TARGETS ${PROJECT_NAME} DESTINATION ./)
- install(DIRECTORY model DESTINATION ./)
- install(PROGRAMS ${RKNN_API_LIB} DESTINATION lib)
build.sh
- #!/bin/bash
-
-
- set -e
-
-
- # for rv1109/rv1126 armhf
-
- GCC_COMPILER=/opt/atk-dlrv1126-toolchain/bin/arm-linux-gnueabihf
-
-
- ROOT_PWD=$( cd "$( dirname $0 )" && cd -P "$( dirname "$SOURCE" )" && pwd )
-
-
- # build rockx
-
- BUILD_DIR=${ROOT_PWD}/build
-
-
- if [[ ! -d "${BUILD_DIR}" ]]; then
-
- mkdir -p ${BUILD_DIR}
-
- fi
-
-
- cd ${BUILD_DIR}
-
- cmake .. \
-
- -DCMAKE_C_COMPILER=${GCC_COMPILER}-gcc \
-
- -DCMAKE_CXX_COMPILER=${GCC_COMPILER}-g++
-
- make -j4
-
- make install
-
- cd -
main.cc里加入opencv库

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

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