Firefly开源社区

标题: 开发板编译rknn_yolov5_demo报错 [打印本页]

作者: 资深搬砖人    时间: 2022-4-12 23:06
标题: 开发板编译rknn_yolov5_demo报错
本帖最后由 资深搬砖人 于 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, 下载次数: 3, 下载积分: 灯泡 -1 , 经验 -1


作者: 板蓝根    时间: 2022-4-13 09:23
我测试没有问题。

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

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



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



作者: 资深搬砖人    时间: 2022-4-13 10:06
板蓝根 发表于 2022-4-13 09:23
我测试没有问题。

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

你好,谢谢回复,我有一个问题是,开发板是否可以直接编译项目?在Ubuntu主机上编译.sh文件,然后把可执行文件和相关数据push到开发板上没有问题,但是直接在开发板上编译然后运行可执行文件就报了错误。
作者: 板蓝根    时间: 2022-4-13 10:07
可以,修改交叉编译器就可以了。报错的话提供 log
作者: 资深搬砖人    时间: 2022-4-13 10:18
板蓝根 发表于 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
作者: 板蓝根    时间: 2022-4-13 10:18
我这边验证可以,你可以参考我的修改


作者: 板蓝根    时间: 2022-4-13 10:23
建议你把整个 rknpu2 push 到板子再编译,我这边用的是 rknpu2 的库,example 里面的 rknn 已经转好的,应该是要版本对应的


作者: 资深搬砖人    时间: 2022-4-13 10:35
板蓝根 发表于 2022-4-13 10:23
建议你把整个 rknpu2 push 到板子再编译,我这边用的是 rknpu2 的库,example 里面的 rknn 已经转好的,应 ...



作者: 资深搬砖人    时间: 2022-4-13 10:38
资深搬砖人 发表于 2022-4-13 10:35

我是直接把整个rknpu2 克隆到板子上的,修改了build.sh文件和cmakelist.txt文件后,编译是可以过,但是还是报那个错误
作者: 资深搬砖人    时间: 2022-4-13 10:41
板蓝根 发表于 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:45
本帖最后由 资深搬砖人 于 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


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

作者: 板蓝根    时间: 2022-4-13 10:54
固件不一样,我的是 ubuntu 你的是 debian 11
作者: 板蓝根    时间: 2022-4-13 11:02
我看了一下您提供的附件,下图没有修改,这个是根据交叉编译器选择的,如果没有改因为板子默认就是用 gcc/g++ 默认就会悬着了 armhf 32位的库


作者: 资深搬砖人    时间: 2022-4-13 11:04
板蓝根 发表于 2022-4-13 10:54
固件不一样,我的是 ubuntu 你的是 debian 11

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

我验证一下 debian11
作者: 资深搬砖人    时间: 2022-4-13 11:08
板蓝根 发表于 2022-4-13 11:02
我看了一下您提供的附件,下图没有修改,这个是根据交叉编译器选择的,如果没有改因为板子默认就是用 gcc/g ...

嗯嗯,附件是昨晚上传的,今天早上已经改过来了
作者: 资深搬砖人    时间: 2022-4-13 11:16
板蓝根 发表于 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:20
板蓝根 发表于 2022-4-13 11:07
我验证一下 debian11

感谢您!
作者: 板蓝根    时间: 2022-4-13 11:45
Debian11 验证也没有问题, 请使用 v0.0.1c 版本验证 , v0.0.1a 有用户错乱的问题可能有影响

ITX-3588J_Debian11_v0.0.1c_220402.img
作者: 资深搬砖人    时间: 2022-4-13 21:34
板蓝根 发表于 2022-4-13 11:45
Debian11 验证也没有问题, 请使用 v0.0.1c 版本验证 , v0.0.1a 有用户错乱的问题可能有影响

ITX-3588J ...

好的,非常感谢,我试试
作者: kaaier    时间: 2022-4-13 22:52
您好,可以共享下3588的技术资料吗....  目前只有一块空板子 不知如何下手
作者: 板蓝根    时间: 2022-4-14 09:01
可以通过购买渠道获取 SDK 资料
作者: 资深搬砖人    时间: 2022-4-15 11:08
kaaier 发表于 2022-4-13 22:52
您好,可以共享下3588的技术资料吗....  目前只有一块空板子 不知如何下手

https://www.t-firefly.com/doc/download/161.html
在这里下载
作者: kaaier    时间: 2022-4-18 17:12
您好,请问开发手册提供的gcc-buildroot-9.3.0-2020.03-x86_64_aarch64-rockchip-linux-gnu编译器下载地址为何有误,能麻烦您提供下最新的交叉编译下载地址吗???
作者: kaaier    时间: 2022-4-18 17:20
资深搬砖人 发表于 2022-4-15 11:08
https://www.t-firefly.com/doc/download/161.html
在这里下载


您好,请问开发手册提供的gcc-buildroot-9.3.0-2020.03-x86_64_aarch64-rockchip-linux-gnu编译器下载地址为何有误,能麻烦您提供下最新的交叉编译下载地址吗???
作者: 799959745    时间: 2022-4-19 09:32
kaaier 发表于 2022-4-18 17:20
您好,请问开发手册提供的gcc-buildroot-9.3.0-2020.03-x86_64_aarch64-rockchip-linux-gnu编译器下载 ...

sdk 里面有这个工具,把 sdk 源代码下载下来就可以了
作者: kaaier    时间: 2022-4-19 15:15
799959745 发表于 2022-4-19 09:32
sdk 里面有这个工具,把 sdk 源代码下载下来就可以了

已经下载了,但是在里面没找到编译工具,是objects/下的pack包吗
作者: 799959745    时间: 2022-4-21 09:06
kaaier 发表于 2022-4-19 15:15
已经下载了,但是在里面没找到编译工具,是objects/下的pack包吗

工具路径:
sdk/prebuilts/gcc/linux-x86/aarch64/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu/




欢迎光临 Firefly开源社区 (https://dev.t-firefly.com/) Powered by Discuz! X3.1