瑞芯微RV1126部署YOLOv8全流程:环境搭建、pt-onnx-rknn模型转换、C++推理代码、错误解决、优化、交叉编译第三方库

目录

1 环境搭建

2 交叉编译opencv

3 模型训练

4 模型转换

4.1 pt模型转onnx模型

4.2 onnx模型转rknn模型

4.2.1 安装rknn-toolkit

4.2.2 onn转成rknn模型

5 升级npu驱动

6 C++推理源码demo

6.1 原版demo

6.2 增加opencv读取图片的代码

7 交叉编译x264 ffmepg和opencv

7.1 交叉编译x264

 7.1.1 下载源码

7.2.2 配置、编译、安装

7.2 交叉编译ffmpeg

7.2.1 下载源码

7.2.2 配置、编译、安装

 7.2.3 测试ffmpeg命令

7.3 交叉编译opencv 

7.3.1 修改cmake文件

7.3.2 配置和cmake 

7.3.3 编译、安装

8 读取视频文件以及获取摄像头视频进行推理

8.1 读取视频进行推理

8.2 获取摄像头视频进行推理

9 模型预编译

10 利用瑞芯微的SDK获取摄像头视频进行推理

参考文献:


1 环境搭建

安装adb,安装交叉编译工具链,安装rknn_toolkit等方法步骤见我的另一篇博客。

RV1109_RV1126 EVB开发板环境搭建及使用总结_rv1109开发板-CSDN博客

2 交叉编译opencv

交叉编译opencv的方法见我的另一篇博客

ubuntu交叉编译opencv-CSDN博客

3 模型训练

模型训练首先下载GitHub - ultralytics/ultralytics: Ultralytics YOLO11 🚀

然后具体的训练方法网上资源很多,我这篇博客重点介绍模型转换和部署,至于模型训练不再展开。

4 模型转换

4.1 pt模型转onnx模型

瑞芯微的C++示例代码是针对瑞芯微修改后的模型结构进行推理的,所以在转模型的时候需要用瑞芯微修改后的工程进行模型转换,下载下面的工程

https://github.com/airockchip/ultralytics_yolov8

然后需要安装必要的库,其实前面训练yolov8的时候搭建了环境,那么这里转模型就用一样的环境就行,瑞芯微的这个ultralytics_yolov8相比官方的yolov8,只是在导出模型的时候进行了一些修改,对于训练模型,他和官方的ultralytics仓库是一样的。

按照上面的步骤就可以转出onnx模型。

4.2 onnx模型转rknn模型

4.2.1 安装rknn-toolkit

·首先安装rknn-toolkit,去这个网址下载

Releases · rockchip-linux/rknn-toolkit · GitHub

然后

conda create -n rv1126_1.7.5_chw python=3.8
conda activate  rv1126_1.7.5_chw
tar xzvf rknn-toolkit-v1.7.5-packages.tar.gz
cd packages
pip install rknn_toolkit-1.7.5-cp38-cp38-linux_x86_64.whl

然后可以用下面的命令测试是否安装成功

python
from rknn.api import RKNN

4.2.2 onn转成rknn模型

下载GitHub - airockchip/rknn_model_zoo

然后

conda activate rv1126_1.7.5_chw
cd examples/yolov8/python
python convert.py ../model/dugong_20250212.onnx rv1126

报错

W rknn-toolkit version: 1.7.5
Traceback (most recent call last):File "convert.py", line 41, in <module>rknn = RKNN(verbose=False)File "/root/anaconda3/envs/rv1126_1.7.5_chw/lib/python3.8/site-packages/rknn/api/rknn.py", line 78, in __init__self.config()File "/root/anaconda3/envs/rv1126_1.7.5_chw/lib/python3.8/site-packages/rknn/api/rknn.py", line 753, in configreturn self.rknn_base.config(args)File "rknn/api/rknn_base.py", line 73, in rknn.api.rknn_base.RKNNBase.configFile "/root/anaconda3/envs/rv1126_1.7.5_chw/lib/python3.8/site-packages/rknn/base/acuitylib/__init__.py", line 1, in <module>from acuitylib.optimize.optimizer import OptimizerFile "/root/anaconda3/envs/rv1126_1.7.5_chw/lib/python3.8/site-packages/rknn/base/acuitylib/__init__.py", line 1, in <module>from acuitylib.optimize.optimizer import OptimizerFile "rknn/base/acuitylib/optimize/optimizer.py", line 128, in init rknn.base.acuitylib.optimize.optimizerFile "rknn/base/acuitylib/optimize/rules/high_performance/model_pruning.py", line 3, in init rknn.base.acuitylib.optimize.rules.high_performance.model_pruningFile "/root/anaconda3/envs/rv1126_1.7.5_chw/lib/python3.8/site-packages/torch/__init__.py", line 29, in <module>from .torch_version import __version__ as __version__File "/root/anaconda3/envs/rv1126_1.7.5_chw/lib/python3.8/site-packages/torch/torch_version.py", line 3, in <module>from pkg_resources import packaging  # type: ignore[attr-defined]
ImportError: cannot import name 'packaging' from 'pkg_resources' (/root/anaconda3/envs/rv1126_1.7.5_chw/lib/python3.8/site-packages/pkg_resources/__init__.py)

 解决方法

pip install --upgrade setuptools

5 升级npu驱动

我转模型的时候用的rknn-toolkit 1.7.5,那么板子的驱动我也升级为1.7.5吧,升级方法

https://github.com/rockchip-linux/rknpu/tree/master

adb push drivers/linux-armhf-puma/*   /
adb push drivers/npu_ko/galcore_puma.ko /lib/modules/galcore.ko

6 C++推理源码demo

6.1 原版demo

C++推理demo也在

https://github.com/airockchip/rknn_model_zoo/tree/main

然后找到rknn_model_zoo-main/examples/yolov8

具体编译方法在github上也有,这里为了方便我又写了个脚本build.sh

#!/bin/bash: <<'COMMENT'
./build-linux.sh -t <target> -a <arch> -d <build_demo_name> [-b <build_type>] [-m]-t : target (rk356x/rk3588/rk3576/rv1106/rk1808/rv1126)-a : arch (aarch64/armhf)-d : demo name-b : build_type(Debug/Release)-m : enable address sanitizer, build_type need set to Debug
Note: 'rk356x' represents rk3562/rk3566/rk3568, 'rv1106' represents rv1103/rv1106, 'rv1126' represents rv1109/rv1126# Here is an example for compiling yolov5 demo for 64-bit Linux RK3566.
./build-linux.sh -t rk356x -a aarch64 -d yolov5
...
COMMENT./build-linux.sh -t rv1126 -a armhf -d yolov8

然后直接sh build.sh就可以编译了,不用每次都去敲命令。

编译完之后用xftp把install整个文件夹传到rv1126开发板,然后执行

./rknn_yolov8_demo  ./model/yolov8.rknn  ./model/bus.jpg

由于我这个模型没有预编译&#

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/896078.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Python爬虫(32)】从单飞 to 团战:Python多线程爬虫进化史

【Python爬虫】专栏简介&#xff1a;本专栏是 Python 爬虫领域的集大成之作&#xff0c;共 100 章节。从 Python 基础语法、爬虫入门知识讲起&#xff0c;深入探讨反爬虫、多线程、分布式等进阶技术。以大量实例为支撑&#xff0c;覆盖网页、图片、音频等各类数据爬取&#xff…

C#初级教程(1)——C# 与.NET 框架:探索微软平台编程的强大组合

图片来源&#xff1a; https://www.lvhang.site/docs/dotnettimeline 即梦AI - 一站式AI创作平台 一、历史发展脉络 在早期的微软平台编程中&#xff0c;常用的编程语言有 Visual Basic、C、C。到了 20 世纪 90 年代末&#xff0c;Win32 API、MFC&#xff08;Microsoft Found…

【接口封装】——13、登录窗口的标题栏内容设置

解释&#xff1a; 1、封装内容&#xff1a;图标、文本内容、宽度 2、ui.iconLabel&#xff1a;在UI文件中的自定义命名 3、引入头文件&#xff1a;#include<qpixmap.h> 函数定义&#xff1a; #pragma once#include <QWidget> #include "ui_TitleBar.h"cl…

DeepSeek全生态接入指南:官方通道+三大云平台

DeepSeek全生态接入指南&#xff1a;官方通道三大云平台 一、官方资源入口 1.1 核心交互平台 &#x1f5a5;️ DeepSeek官网&#xff1a; https://chat.deepseek.com/ &#xff08;体验最新对话模型能力&#xff09; 二、客户端工具 OllamaChatboxCherry StudioAnythingLLM …

web安全:跨站请求伪造 (CSRF)

跨站请求伪造 (CSRF) ​ 跨站请求伪造&#xff08;CSRF&#xff0c;Cross-Site Request Forgery&#xff09; 是一种网络攻击方式&#xff0c;攻击者诱使受害者在未经其授权的情况下执行特定操作。CSRF 利用受害者已登录的身份和浏览器自动发送的认证信息&#xff08;如 Cooki…

前端ES面试题及参考答案

目录 let/const 与 var 的区别?TDZ 是什么? 箭头函数与普通函数的区别?箭头函数能否作为构造函数? 模板字符串的嵌套表达式和标签模板用法? 解构赋值的应用场景及对象 / 数组解构差异? 函数参数默认值的生效条件及暂时性死区问题? 展开运算符(...)在数组 / 对象中…

Windows 图形显示驱动开发-查询 WDDM(3.2) 功能支持和启用

查询 Windows 显示驱动程序模型 (WDDM) 功能的支持和启用。 其中介绍了&#xff1a; 用户模式和内核模式显示驱动程序&#xff08;UMD 和 KMD&#xff09;如何查询 OS&#xff0c;以确定 WDDM 功能在系统上是否受支持和已启用。 OS 如何确定驱动程序是否支持特定的 WDDM 功能…

MySQL InnoDB 存储引擎的索引详解

在 MySQL 中&#xff0c;InnoDB 是最常用的存储引擎&#xff0c;它支持事务、行级锁和外键约束等功能&#xff0c;而索引则是提升数据库查询性能的关键。在 InnoDB 存储引擎中&#xff0c;索引不仅仅是提高查询速度的工具&#xff0c;还是数据库的核心组成部分之一。本文将详细…

基于Spring Boot的RabbitMQ延时队列技术实现

文章目录 基于Spring Boot的RabbitMQ延时队列技术实现延时队列应用场景基本概念实现延时队列添加依赖基础配置配置类设计消息生产者消息消费者 两种TTL设置方式 订单超时关闭实例订单服务消息处理 延迟消息插件安装插件配置延迟交换机 基于Spring Boot的RabbitMQ延时队列技术实…

毕业项目推荐:基于yolov8/yolov5/yolo11的番茄成熟度检测识别系统(python+卷积神经网络)

文章目录 概要一、整体资源介绍技术要点功能展示&#xff1a;功能1 支持单张图片识别功能2 支持遍历文件夹识别功能3 支持识别视频文件功能4 支持摄像头识别功能5 支持结果文件导出&#xff08;xls格式&#xff09;功能6 支持切换检测到的目标查看 二、数据集三、算法介绍1. YO…

【智能客服】ChatGPT大模型话术优化落地方案

本文原创作者:姚瑞南 AI-agent 大模型运营专家,先后任职于美团、猎聘等中大厂AI训练专家和智能运营专家岗;多年人工智能行业智能产品运营及大模型落地经验,拥有AI外呼方向国家专利与PMP项目管理证书。(转载需经授权) 目录 一、项目背景 1.1 行业背景 1.2 业务现…

STM32的HAL库开发---单通道ADC采集(DMA读取)实验

一、实验简介 正常单通道ADC采集顺序是先开启ADC采集&#xff0c;然后等待ADC转换完成&#xff0c;也就是判断EOC位置1&#xff0c;然后再读取数据寄存器的值。 如果配置了DMA功能&#xff0c;在EOC位被硬件置1后&#xff0c;自动产生DMA请求&#xff0c;然后DMA进行数据搬运…

编译原理基础(1)

1.什么是ASCII码&#xff1f; ASCII码即美国信息交换标准代码&#xff0c;是基于拉丁字母的电脑编码系统&#xff0c;用于显示现代英语和部分西欧语言。其7位编码范围0-127&#xff0c;8位扩展到0-255。字符集含控制字符&#xff08;0-31、127&#xff0c;用于控制设备或表示通…

基于 Highcharts 实现 Vue 中的答题统计柱状图组件

在现代 Web 开发中&#xff0c;数据可视化是一个重要的组成部分&#xff0c;而 Highcharts 是一个广泛使用的 JavaScript 图表库&#xff0c;可以帮助开发者在 Web 页面上轻松地绘制丰富的图表。在本文中&#xff0c;我们将基于 Highcharts 创建一个用于答题统计的柱状图&#…

SQLAlchemyError: A transaction is already begun on this Session.

资料 sqlalchemy 事务 - 简书 在 SQLAlchemy 中&#xff0c;事务是通过会话来管理的。当你开始一个事务&#xff08;例如使用 async with db.begin()&#xff09;&#xff0c;它会开启一个新的事务&#xff0c;并在事务块结束时自动提交或回滚。如果在同一个会话中&#xff0c…

Java Web开发实战与项目——Spring Boot与Redis实现缓存管理

缓存技术在现代Web开发中至关重要&#xff0c;尤其是在高并发的环境中&#xff0c;缓存能够有效减少数据库访问压力、提高系统性能。Redis作为最流行的内存数据存储系统之一&#xff0c;常用于缓存管理。本节将讲解如何在Spring Boot项目中集成Redis&#xff0c;实现缓存管理&a…

C语言学习【1】C语言关于寄存器的封装

目录 1.封装寄存的C语言的语法volatile&#xff1a;unsigned int:*pGpiobOdrvolatile unsigned int * 2.进一步C语言的封装 在嵌入式中&#xff0c;底层一定是操作寄存器&#xff0c;我有一个理念&#xff0c;凡事一定要想清楚&#xff0c;把任何知识点融入自己的理解之中&…

#渗透测试#批量漏洞挖掘#畅捷通T+远程命令执行漏洞

免责声明 本教程仅为合法的教学目的而准备,严禁用于任何形式的违法犯罪活动及其他商业行为,在使用本教程前,您应确保该行为符合当地的法律法规,继续阅读即表示您需自行承担所有操作的后果,如有异议,请立即停止本文章读。 目录 一、漏洞概况 二、攻击特征 三、应急处置…

ollama 学习笔记

1. 参考博客&#xff1a;1. Ollama完整教程&#xff1a;本地LLM管理、WebUI对话、Python/Java客户端API应用&#xff1a;https://blog.csdn.net/python122_/article/details/1409457202. https://gitee.com/ai-big-model/ollama/tree/main --》REST APIollama 离线安装包 ollam…

ARM Linux平台下 OpenCV Camera 实验

一、硬件原理 1. OV2640 1.1 基本功能 OV2640 是一款低功耗、高性能的图像传感器&#xff0c;支持以下功能&#xff1a; 最高分辨率&#xff1a;200 万像素&#xff08;1600x1200&#xff09;。 输出格式&#xff1a;JPEG、YUV、RGB。 内置图像处理功能&#xff1a;自动曝…