From 4317aa00dab6314c6edd53dcd7662e2e61abe9ec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=AE=A4=E7=9F=A5=E6=99=BA=E8=83=BD?= <2386089024@qq.com> Date: Mon, 17 Mar 2025 20:16:36 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=8A=E4=BC=A0=E6=96=87=E4=BB=B6=E8=87=B3?= =?UTF-8?q?=20/?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CMakeLists.txt | 156 +++++++++++++++++++++++++++++++++++++++++++++++++ README.md | 64 ++++++++++++++++++++ build.sh | 47 +++++++++++++++ 3 files changed, 267 insertions(+) create mode 100644 CMakeLists.txt create mode 100644 README.md create mode 100644 build.sh diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..f2d7ae4 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,156 @@ +cmake_minimum_required(VERSION 3.8) + +project(rknn_yolo_demo_linux) +set(CMAKE_CXX_STANDARD 11) +add_definitions(-g -O0 -ggdb -gdwarf -funwind-tables -rdynamic) +add_definitions(-Wno-write-strings -Wno-return-type) + + +set(TOOLCHAIN_DIR /opt/atk-dlrv1126-toolchain) +set(CMAKE_CXX_COMPILER ${TOOLCHAIN_DIR}/usr/bin/arm-linux-gnueabihf-g++) +set(CMAKE_C_COMPILER ${TOOLCHAIN_DIR}/usr/bin/arm-linux-gnueabihf-gcc) +set(SYSROOT ${TOOLCHAIN_DIR}/arm-buildroot-linux-gnueabihf/sysroot/usr/include) +set(CMAKE_SYSROOT ${TOOLCHAIN_DIR}/arm-buildroot-linux-gnueabihf/sysroot) + +set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS}") +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -pthread") + +# for linux +if (CMAKE_C_COMPILER MATCHES "aarch64") + set(LIB_ARCH lib64) +else() + set(LIB_ARCH lib) +endif() + +# # for android +# if (${TARGET_SOC} STREQUAL "RK3399PRO") +# set(LIB_ARCH lib64) +# endif() + +# rga +set(RGA_DIR ${MZ_ROOT}/libs/rklibs/rknpu-1.7.3/rknn/rknn_api/examples/3rdparty/rga) +include_directories(${RGA_DIR}/include) + +# drm +set(DRM_DIR ${MZ_ROOT}/libs/common/drm) +include_directories(${DRM_DIR}/include) +include_directories(${DRM_DIR}/include/libdrm) + +#stb +set(STB_DIR ${MZ_ROOT}/libs/common/) +include_directories(${STB_DIR}) + +# rknn api +if (${TARGET_SOC} STREQUAL "RK3399PRO") + set(RKNN_API_PATH ${MZ_ROOT}/libs/rklibs/RK3399Pro_npu/rknn-api/librknn_api) + include_directories(${RKNN_API_PATH}/include) + set(RKNN_API_LIB ${RKNN_API_PATH}/${CMAKE_SYSTEM_NAME}/${LIB_ARCH}/librknn_api.so) +else() + set(RKNN_API_PATH ${MZ_ROOT}/libs/rklibs/rknpu-1.7.3/rknn/rknn_api/librknn_api) + include_directories(${RKNN_API_PATH}/include) + set(RKNN_API_LIB ${RKNN_API_PATH}/${LIB_ARCH}/librknn_api.so) +endif() + +# libjpeg +set(LIBJPEG_DIR ${MZ_ROOT}/libs/platform/${TARGET_SOC}/libjpeg) +include_directories(${LIBJPEG_DIR}/include) +set(LIBJPEG_LIB ${LIBJPEG_DIR}/lib/${CMAKE_SYSTEM_NAME}/libjpeg.a) + +# libpng +set(LIBPNG_DIR ${MZ_ROOT}/libs/platform/${TARGET_SOC}/libpng) +include_directories(${LIBPNG_DIR}/include) +set(LIBPNG_LIB ${LIBPNG_DIR}/lib/${CMAKE_SYSTEM_NAME}/libpng.a) + +# zlib(used by libpng) +set(ZLIB_DIR ${MZ_ROOT}/libs/platform/${TARGET_SOC}/zlib) +include_directories(${ZLIB_DIR}/include) +set(ZLIB_LIB ${ZLIB_DIR}/lib/${CMAKE_SYSTEM_NAME}/libz.a) + +# #curl +include_directories(${CMAKE_SOURCE_DIR}/include) +# set(CURL_LIB /opt/atk-dlrv1126-toolchain/arm-buildroot-linux-gnueabihf/sysroot/usr/lib/libcurl.so) + +set(libs + jes_bas + jes_upgrade + jes_user + jes_network + jes_mss + jes_isp + jes_mcs + jes_spk + jes_record + jes_recsnap + jes_replay + jes_storage + jlinux + jbus + jbuffer + dbus-1 + jvbase + arch + utility + cjson + ${LIBINTL}) + +link_directories(/opt/atk-dlrv1126-toolchain/arm-buildroot-linux-gnueabihf/sysroot/usr/lib) +find_package(CURL REQUIRED) +include_directories(${CURL_INCLUDE_DIR}) +message("CURL_LIBRARIES: ${CURL_LIBRARIES}") +message("CURL_INCLUDE_DIR: ${CURL_INCLUDE_DIR}") +find_package(OpenCV REQUIRED) +find_package(OpenSSL REQUIRED) + +set(OPENCV_LIBS opencv_core opencv_imgcodecs opencv_imgproc opencv_features2d opencv_flann opencv_highgui opencv_freetype) +set(RKNN_LIBS easymedia rga rkaiq sample_common_isp) + +link_directories(include lib) +link_directories(include ./include/librtsp) +link_directories(/home/developer/sysroot/usr/lib) +link_directories(/home/developer/sysroot/lib) + +include_directories(/home/developer/sysroot/usr/include/) +include_directories(${SYSROOT}) +include_directories(${SYSROOT}/rga) +include_directories(${SYSROOT}/easymedia) +include_directories(${SYSROOT}/rkaiq/uAPI) +include_directories(${SYSROOT}/rkaiq/xcore) +include_directories(${SYSROOT}/rkaiq/algos) +include_directories(${SYSROOT}/rkaiq/common) +include_directories(${SYSROOT}/rkaiq/iq_parser) +include_directories(./include/librtsp) +include_directories(./include/nlohmann) + + +set(CMAKE_INSTALL_RPATH "lib") + +add_executable(yolov5-JES + src/drm_func.c + src/rga_func.c + src/main.cpp + src/yolov5_detect_postprocess.cpp + src/yolov5_detect.cpp + ) + +target_link_libraries(yolov5-JES + ${RKNN_API_LIB} + ${LIBJPEG_LIB} + ${LIBPNG_LIB} + ${ZLIB_LIB} + ${OPENCV_LIBS} + ${CURL_LIBRARIES} + librtsp.a + ${RKNN_LIBS} + dl + ${libs} + OpenSSL::Crypto + OpenSSL::SSL +) +add_definitions(-DRKAIQ) +# install target and libraries +set(CMAKE_INSTALL_PREFIX ${CMAKE_SOURCE_DIR}/install/yolov5-JES) +install(TARGETS yolov5-JES DESTINATION ./) +install(PROGRAMS ${RKNN_API_LIB} DESTINATION lib ) + + + diff --git a/README.md b/README.md new file mode 100644 index 0000000..583fe8d --- /dev/null +++ b/README.md @@ -0,0 +1,64 @@ +# rknn_yolo_EAI_pic +#### 简要说明 + +用于跑EAI提供仓库训练出来的yolov5模型的视频检测例程。 +集成了从串口读取红外温度数据,到达阈值后报警并运行rknn模型 + +需注意运行该例程需要将npu驱动更新为1.7.3版本 + +本项目只适用于EAI-YOLOV5 +详情请参考EAI官网:https://www.easy-eai.com/document_details/3/342 + + +## 准备工作 +根据EAI给出的教程训练、转化得到rknn模型 +有两类检测模型:火焰检测和烟雾检测 + + + +## 安装(install) + +通过adb连接设备并将编译结果推送至板端,执行以下命令推送,这里板端默认使用/userdata路径 + +``` +adb push install/rknn_yolo_demo /userdata/ +``` + +将前面准备好的RKNN模型推送至板端,这里假设模型名字为 yolov5s_u8.rknn + +``` +adb push ./yolov5s_u8.rknn /userdata/rknn_yolo_demo/model/yolov5s_u8.rknn +``` + + + +## 单图测试执行 +详情请了解官网:9.模型部署实例 + +进入EAI环境之后编译,将编译文件放置到可执行程序,假设是first_yolov5_detect_demo +用下列命令将可执行程序推送到开发板端 + +``` +cp first_yolov5_detect_demo/ /mnt/userdata/ -rf +``` + +进入办卡运行环境 + +``` +adb shell +``` + +定位到指定位置后,运行程序 + +``` +./rknn_yolo_EAI +``` + + +## 编译(build) + +在项目文件中,根据设备,调整 GCC_COMPILER 参数,终端执行下面命令进行编译 + +``` +./build.sh +``` diff --git a/build.sh b/build.sh new file mode 100644 index 0000000..da176e8 --- /dev/null +++ b/build.sh @@ -0,0 +1,47 @@ +#!/bin/bash + +set -e + +rm build -rf +mkdir build + +RV1109_TOOL_CHAIN="/opt/atk-dlrv1126-toolchain" + + +# for rv1109/rv1126 armhf +GCC_COMPILER=${RV1109_TOOL_CHAIN}/usr/bin/arm-linux-gnueabihf + +ROOT_PWD=$( cd "$( dirname $0 )" && cd -P "$( dirname "$SOURCE" )" && pwd ) + +# model_zoo_path root path +MZ_ROOT=$(pwd | sed 's/\(rknn_model_zoo-main\).*/\1/g') +echo "MZ_ROOT:" +echo $MZ_ROOT +# 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++ \ + -DMZ_ROOT=${MZ_ROOT} \ + -DTARGET_SOC=RV1109_1126 \ + -DCMAKE_SYSTEM_NAME=Linux +make -j4 +make install +cd .. + +cd ${BUILD_DIR} +cmake .. \ + -DCMAKE_C_COMPILER=${GCC_COMPILER}-gcc \ + -DCMAKE_CXX_COMPILER=${GCC_COMPILER}-g++ \ + -DMZ_ROOT=${MZ_ROOT} \ + -DTARGET_SOC=RV1109_1126 \ + -DCMAKE_SYSTEM_NAME=Linux +make -j4 +make install +