尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

RKNPU2 Android部署实战:YOLOv5 APK Demo从NDK编译到打包运行一次讲清

RKNPU2 Android部署实战:YOLOv5 APK Demo从NDK编译到打包运行一次讲清 RKNPU2 Android部署实战YOLOv5 APK Demo从NDK编译到打包运行一次讲清【免费下载链接】rknpu2项目地址: https://gitcode.com/gh_mirrors/rk/rknpu2本文带你用 RKNPU2瑞芯微 RKNN 运行时库在 RK3566/RK3568、RK3562、RK3588 平台上完成一次完整的YOLOv5 目标检测 Android APK 部署从用 Android Studio NDK 编译 C 推理代码到把 .rknn 模型打进 APK再到真机运行并修复两个最常见的编译报错。全程基于官方示例 rknn_yolov5_android_apk_demo零基础也能跟着走通。这个 Demo 能做什么打开 APK 后摄像头画面会实时显示检测框识别出行人、车辆等 80 类 COCO 目标并显示 FPS。整个链路是Java 层com.rockchip.gpadc.demo包读取 Camera 数据通过 JNI 触发推理并把结果画回预览画面JNI/Native 层C 代码调用librknnrt.soRKNN 运行时驱动 NPU 完成 YOLOv5s 推理RGA 加速用 RGARockchip Graphic Acceleration做图像缩放预处理避免 CPU 参与像素搬运上图即模型自带的测试图片bus.jpg640x640包含行人和公交车是验证 YOLOv5 检测效果的标准素材也用在桌面端示例 rknn_yolov5_demo 中。工程结构速览先认识 5 个关键文件路径作用app/CMakeLists.txtNDK 编译入口构建librknn4j.soapp/src/main/cpp/native-lib.ccJNI 接口navite_init/native_run/native_post_processapp/src/main/java/com/rockchip/gpadc/demo/yolo/InferenceWrapper.javaJava 侧推理封装加载模型并预留输出缓冲区app/src/main/res/raw/模型文件yolov5s_rk3588.rknn、yolov5s_rk3566.rknn、yolov5s_rk3562.rknnapp/src/main/jniLibs/arm64-v8a/预编译库librknnrt.so、librga.so、libopencv_java3.so模型yolov5s.rknn由 RKNN Toolkit2 将yolov5s.onnx转换而来转换时把 SiLU 激活替换成了 ReLUNPU 更友好转换脚本可参考 convert_rknn_demo/yolov5/onnx2rknn.py。一键编译步骤Android Studio 打开即编选择Android Studio 2021.2.1Windows或2021.3.1Linux/macOS版本太新容易踩坑File → Open选择rknn_yolov5_android_apk_demo目录等待 Gradle 与 NDK 同步连接 RK 开发板/手机开启 USB 调试点击 Run 即可打包安装模型文件放在res/raw下会随 APK 分发。运行时 CameraPreviewActivity.java 会根据当前芯片自动挑选对应平台的.rknn文件并拷贝到存储目录再调用mInferenceWrapper.initModel(...)加载。NDK 编译原理CMakeLists.txt 做了什么app/CMakeLists.txt 的核心逻辑只有三步非常适合作为 NDK 入门范例用add_library把native-lib.cc、post_process.cc、yolo_image.cc及object_tracker/源码编译成共享库rknn4j通过find_library找到系统日志库logtarget_link_libraries把rknn4j链接到jniLibs/${ANDROID_ABI}/librknnrt.so、librga.so和 log 库编译完成后Java 侧只需System.loadLibrary(rknn4j)就能调用 NPU 能力——这正是 InferenceWrapper.java 静态块里干的事。从 Java 到 NPU一条完整的调用链initModel(640, 640, 3, modelPath)JNI 进入 C 执行create()向 NPU 加载.rknn模型同时按 YOLOv5s 的三级特征图尺寸预分配输出缓冲区255×80×80、255×40×40、255×20×20run(byte[] inData)每帧摄像头数据经 RGA 缩放后交给native_runNPU 推理完成postProcess(...)native_post_process完成解码置信度过滤 框坐标还原Java 拿到不超过 64 个目标的 id、score、box直接画框想深入 C 接口细节可查官方头文件 runtime/RK3588/Linux/librknn_api/include/rknn_api.h。运行注意权限与分辨率权限AndroidManifest.xml 已声明CAMERA、READ/WRITE_EXTERNAL_STORAGE首次启动记得授予预览分辨率APK 默认预览尺寸需被板子摄像头支持两个高频报错的修复方法报错一2 files found with path lib/arm64-v8a/librga.so这是jniLibs目录和 CMake IMPORTED target 同时提供了同名.so导致的冲突。修复方法在app/build.gradle中添加android { sourceSets.main.jniLibs.srcDirs [libs] }报错二E/SurfaceView: Exception configuring surface原因是 App 设置的预览分辨率当前摄像头不支持。打开 HALDefine.java把CAMERA_PREVIEW_WIDTH/CAMERA_PREVIEW_HEIGHT改成日志中列出的支持分辨率即可例如 1280x720。进阶阅读桌面端对照示例rknn_yolov5_demo同一模型的命令行版含视频输入与 MPP 编解码动态 Shape 用法RKNN_Dynamic_Shape_Usage.mdRK3588 NPU SRAM 优化RK3588_NPU_SRAM_usage.md官方 API 文档Rockchip_RKNPU_User_Guide_RKNN_API_V1.5.2_CN.pdf按以上步骤走完你就已经掌握了 RKNPU2 在 Android 端部署的完整闭环NDK 编译、模型打包、JNI 调用、NPU 推理与常见报错修复 【免费下载链接】rknpu2项目地址: https://gitcode.com/gh_mirrors/rk/rknpu2创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表