开发板编译rknn_yolov5_demo报错

固件类型:官方提供的固件
固件文件名称:ITX-3588J_Debian11_v0.0.1a_220322.img
固件下载地址:百度网盘-链接不存在
Log日志:CMakeLists.zip

本帖最后由 资深搬砖人 于 2022-4-13 10:08 编辑

尝试在3588的板子上编译运行c++demo程序:\rknpu2-master\examples\rknn_yolov5_demo
通过sudo apt-get install gcc;sudo apt-get install g++,安装gcc和g++编译器。

官方提供的编译器gcc-buildroot-9.3.0-2020.03-x86_64_aarch64-rockchip-linux-gnu,我理解是交叉编译器,应该在Ubuntu主机上使用,无法在开发板使用

在开发板上直接编译正常,但执行可执行文件过程中报错:262, check error! Unsupported function: Unsupported src to input resolution more than -1, width=640, height=640

在Ubuntu主机上编译无误,且Ubuntu主机编译生成的可执行文件可正常在开发板运行
但请问运行开发板上编译的可执行文件出现的问题该怎么解决?

tchip_askquestions
CMakeLists.zip (993 Bytes)

我测试没有问题。

验证固件:ITX-3588J_Ubuntu20.04-Gnome-r211_v0.0.1c_220402.img
验证流程:

  1. 源码官方下载 sdk, sdk/external/rknpu2/examples/rknn_yolov5_demo
  2. 修改交叉编译器为 sdk 内编译器

  1. 编译 ./build-linux_RK3588.sh,输出路径 build/build_linux_aarch64/
  2. 把项目 copy 到板子上。
  3. 把 model 文件夹 copy 到 build/build_linux_aarch64/ 中, cp model/ build/build_linux_aarch64/ -rf
  4. 进入 build/build_linux_aarch64/ 运行 ./rknn_yolov5_demo model/RK3588/yolov5s-640-640.rknn model/bus.jpg

板蓝根 发表于 2022-4-13 09:23
我测试没有问题。

验证固件:ITX-3588J_Ubuntu20.04-Gnome-r211_v0.0.1c_220402.img

你好,谢谢回复,我有一个问题是,开发板是否可以直接编译项目?在Ubuntu主机上编译.sh文件,然后把可执行文件和相关数据push到开发板上没有问题,但是直接在开发板上编译然后运行可执行文件就报了错误。{:5_228:}

可以,修改交叉编译器就可以了。报错的话提供 log

板蓝根 发表于 2022-4-13 10:07
可以,修改交叉编译器就可以了。报错的话提供 log

./rknn_yolov5_demo ./model/RK3588/yolov5s-640-640.rknn ./model/bus.jpg
post process config: box_conf_threshold = 0.50, nms_threshold = 0.60
Read ./model/bus.jpg …
img width = 640, img height = 640
Loading mode…
sdk version: 1.2.0 (1867aec5b@2022-01-14T15:16:40) driver version: 0.6.4
model input num: 1, output num: 3
index=0, name=images, n_dims=4, dims=[1, 640, 640, 3], n_elems=1228800, size=4915200, fmt=NHWC, type=FP32, qnt_type=AFFINE, zp=-128, scale=0.003922
index=0, name=output, n_dims=5, dims=[1, 3, 85, 80], n_elems=1632000, size=1632000, fmt=NCHW, type=INT8, qnt_type=AFFINE, zp=77, scale=0.080445
index=1, name=371, n_dims=5, dims=[1, 3, 85, 40], n_elems=408000, size=408000, fmt=NCHW, type=INT8, qnt_type=AFFINE, zp=56, scale=0.080794
index=2, name=390, n_dims=5, dims=[1, 3, 85, 20], n_elems=102000, size=102000, fmt=NCHW, type=INT8, qnt_type=AFFINE, zp=69, scale=0.081305
model is NHWC input fmt
model input height=640, width=640, channel=3
rga_api version 1.7.0_[1]
262, check error! Unsupported function: Unsupported src to input resolution more than -1, width = 640, height = 640

我这边验证可以,你可以参考我的修改

建议你把整个 rknpu2 push 到板子再编译,我这边用的是 rknpu2 的库,example 里面的 rknn 已经转好的,应该是要版本对应的

板蓝根 发表于 2022-4-13 10:23
建议你把整个 rknpu2 push 到板子再编译,我这边用的是 rknpu2 的库,example 里面的 rknn 已经转好的,应 …

!(/home/Pictures/Screenshot from 2022-04-13 02-32-04.png)

资深搬砖人 发表于 2022-4-13 10:35

我是直接把整个rknpu2 克隆到板子上的,修改了build.sh文件和cmakelist.txt文件后,编译是可以过,但是还是报那个错误{:5_228:}

板蓝根 发表于 2022-4-13 10:23
建议你把整个 rknpu2 push 到板子再编译,我这边用的是 rknpu2 的库,example 里面的 rknn 已经转好的,应 …

linux-vdso.so.1 (0x0000007fbc87e000)
librknnrt.so => /home/firefly/workspace/rknpu2/examples/rknn_yolov5_demo/install/rknn_yolov5_demo_Linux/lib/librknnrt.so (0x0000007fbbfbc000)
librga.so => /lib/aarch64-linux-gnu/librga.so (0x0000007fbbf7e000)
libpthread.so.0 => /lib/aarch64-linux-gnu/libpthread.so.0 (0x0000007fbbf4d000)
libstdc++.so.6 => /lib/aarch64-linux-gnu/libstdc++.so.6 (0x0000007fbbd75000)
libm.so.6 => /lib/aarch64-linux-gnu/libm.so.6 (0x0000007fbbcca000)
libgcc_s.so.1 => /lib/aarch64-linux-gnu/libgcc_s.so.1 (0x0000007fbbca6000)
libc.so.6 => /lib/aarch64-linux-gnu/libc.so.6 (0x0000007fbbb30000)
/lib/ld-linux-aarch64.so.1 (0x0000007fbc84e000)

本帖最后由 资深搬砖人 于 2022-4-13 10:47 编辑

资深搬砖人 发表于 2022-4-13 10:41
linux-vdso.so.1 (0x0000007fbc87e000)
librknnrt.so => /home/firefly/workspace/rknpu2/examples/rkn …

/usr/lib/aarch64-linux-gnu/libdrm.so.2
/root-ro/usr/lib/aarch64-linux-gnu/libdrm.so.2

我和您的对比了一下,缺的这个动态库有,但是不知道为什么无法链接到

固件不一样,我的是 ubuntu 你的是 debian 11

我看了一下您提供的附件,下图没有修改,这个是根据交叉编译器选择的,如果没有改因为板子默认就是用 gcc/g++ 默认就会悬着了 armhf 32位的库

板蓝根 发表于 2022-4-13 10:54
固件不一样,我的是 ubuntu 你的是 debian 11

rknpu2官方文档里面写的是debian11,所以我就烧了debian11的固件,我之前担心Ubuntu的固件不能正常使用rknpu2。{:5_228:}

资深搬砖人 发表于 2022-4-13 11:04
rknpu2官方文档里面写的是debian11,所以我就烧了debian11的固件,我之前担心Ubuntu的固件不能正常使用rk …

我验证一下 debian11

板蓝根 发表于 2022-4-13 11:02
我看了一下您提供的附件,下图没有修改,这个是根据交叉编译器选择的,如果没有改因为板子默认就是用 gcc/g …

嗯嗯,附件是昨晚上传的,今天早上已经改过来了

板蓝根 发表于 2022-4-13 11:02
我看了一下您提供的附件,下图没有修改,这个是根据交叉编译器选择的,如果没有改因为板子默认就是用 gcc/g …

cmake_minimum_required(VERSION 3.4.1)

project(rknn_yolov5_demo)

set(CMAKE_C_FLAGS “${CMAKE_C_FLAGS} -Wl,–allow-shlib-undefined”)
set(CMAKE_CXX_FLAGS “${CMAKE_CXX_FLAGS} -std=c++11 -Wl,–allow-shlib-undefined”)

# install target and libraries
set(CMAKE_INSTALL_PREFIX ${CMAKE_SOURCE_DIR}/install/rknn_yolov5_demo_${CMAKE_SYSTEM_NAME})

set(CMAKE_SKIP_INSTALL_RPATH FALSE)
set(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE)
set(CMAKE_INSTALL_RPATH “${CMAKE_INSTALL_PREFIX}/lib”)

# rknn api
if(TARGET_SOC STREQUAL “rk356x”)
set(RKNN_API_PATH ${CMAKE_SOURCE_DIR}/../../runtime/RK356X/${CMAKE_SYSTEM_NAME}/librknn_api)
elseif(TARGET_SOC STREQUAL “rk3588”)
set(RKNN_API_PATH ${CMAKE_SOURCE_DIR}/../../runtime/RK3588/${CMAKE_SYSTEM_NAME}/librknn_api)
else()
message(FATAL_ERROR “TARGET_SOC is not set, ref value: rk356x or rk3588”)
endif()

if (CMAKE_SYSTEM_NAME STREQUAL “Android”)
set(RKNN_RT_LIB ${RKNN_API_PATH}/${CMAKE_ANDROID_ARCH_ABI}/librknnrt.so)
else()
#if (CMAKE_C_COMPILER MATCHES “aarch64”)
set(LIB_ARCH aarch64)
#else()
#set(LIB_ARCH armhf)
#endif()
set(RKNN_RT_LIB ${RKNN_API_PATH}/${LIB_ARCH}/librknnrt.so)
endif()
include_directories(${RKNN_API_PATH}/include)

# opencv
if (CMAKE_SYSTEM_NAME STREQUAL “Android”)
set(OpenCV_DIR ${CMAKE_SOURCE_DIR}/../3rdparty/opencv/OpenCV-android-sdk/sdk/native/jni/abi-${CMAKE_ANDROID_ARCH_ABI})
else()
if(LIB_ARCH STREQUAL “armhf”)
set(OpenCV_DIR ${CMAKE_SOURCE_DIR}/../3rdparty/opencv/opencv-linux-armhf/share/OpenCV)
else()
set(OpenCV_DIR ${CMAKE_SOURCE_DIR}/../3rdparty/opencv/opencv-linux-aarch64/share/OpenCV)
endif()
endif()
find_package(OpenCV REQUIRED)

#rga
if(TARGET_SOC STREQUAL “rk356x”)
set(RGA_PATH ${CMAKE_SOURCE_DIR}/../3rdparty/rga/RK356X)
elseif(TARGET_SOC STREQUAL “rk3588”)
set(RGA_PATH ${CMAKE_SOURCE_DIR}/../3rdparty/rga/RK3588)
else()
message(FATAL_ERROR “TARGET_SOC is not set, ref value: rk356x or rk3588”)
endif()
if (CMAKE_SYSTEM_NAME STREQUAL “Android”)
set(RGA_LIB ${RGA_PATH}/lib/Android/${CMAKE_ANDROID_ARCH_ABI}/librga.so)
else()
#if (CMAKE_C_COMPILER MATCHES “aarch64”)
set(LIB_ARCH aarch64)
#else()
#set(LIB_ARCH armhf)
#endif()
set(RGA_LIB ${RGA_PATH}/lib/Linux//${LIB_ARCH}/librga.so)
endif()
include_directories( ${RGA_PATH}/include)

# rknn_yolov5_demo
include_directories( ${CMAKE_SOURCE_DIR}/include)
add_executable(rknn_yolov5_demo
src/main.cc
src/postprocess.cc
)

target_link_libraries(rknn_yolov5_demo
${RKNN_RT_LIB}
${RGA_LIB}
${OpenCV_LIBS}
)

install(TARGETS rknn_yolov5_demo DESTINATION ./)
install(PROGRAMS ${RKNN_RT_LIB} DESTINATION lib)
install(DIRECTORY model DESTINATION ./)

板蓝根 发表于 2022-4-13 11:07
我验证一下 debian11

感谢您!{:5_228:}

Debian11 验证也没有问题, 请使用 v0.0.1c 版本验证 , v0.0.1a 有用户错乱的问题可能有影响

ITX-3588J_Debian11_v0.0.1c_220402.img

板蓝根 发表于 2022-4-13 11:45
Debian11 验证也没有问题, 请使用 v0.0.1c 版本验证 , v0.0.1a 有用户错乱的问题可能有影响

ITX-3588J …

好的,非常感谢,我试试