瑞芯微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
由于我这个模型没有预编译&#
相关文章:
瑞芯微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和op…...
【ISO 14229-1:2023 UDS诊断(会话控制0x10服务)测试用例CAPL代码全解析⑤】
ISO 14229-1:2023 UDS诊断【会话控制0x10服务】_TestCase05 作者:车端域控测试工程师 更新日期:2025年02月15日 关键词:UDS诊断、0x10服务、诊断会话控制、ECU测试、ISO 14229-1:2023 TC10-005测试用例 用例ID测试场景验证要点参考条款预期…...
python-leetcode 35.二叉树的中序遍历
给定一个二叉树的根节点root,返回它的中序遍历。 方法一:递归 二叉树的中序遍历:按照访问左子树——根节点——右子树的方式遍历这棵树,而在访问左子树或者右子树的时候我们按照同样的方式遍历,直到遍历完整棵树。因此整个遍历过…...
glob 用法技巧
目录 处理大量文件节省内存 匹配多个文件扩展名 遍历多种格式文件 遍历某一个文件: 查找当前目录和子目录 6. 排除特定文件 7. 大小写不敏感匹配 8. 获取绝对路径 9. 处理特殊字符 处理大量文件节省内存 技巧:用 iglob 替代 glob,逐…...
CodeGPT 使用教程(适用于 VSCode)
CodeGPT 使用教程(适用于 VSCode) CodeGPT 是一个 VSCode 插件,可以让你在代码编辑器中直接调用 GPT 进行代码补全、优化、调试等操作。以下是详细的安装和使用步骤: 1. 安装 CodeGPT 方式 1:从 VSCode 插件市场安装…...
以下是MySQL中常见的增删改查语句
以下是MySQL中常见的增删改查语句: 增加数据(INSERT) 基本语法: INSERT INTO table_name (column1, column2,...) VALUES (value1, value2,...); 示例:向名为 students 的表中插入一条学生记录, id 为1&am…...
Vue3 与 TypeScript 实战:核心细节与最佳实践
引言 Vue3 的 Composition API 与 TypeScript 的强类型支持完美契合,极大提升了代码的可维护性和开发体验。本文将深入探讨 Vue3 TypeScript 的关键细节,并通过实际代码示例展示如何高效结合二者。 一、组合式 API 与类型推导 Vue3 的 setup 函数与 T…...
23种设计模式 - 解释器模式
模式定义 解释器模式(Interpreter Pattern)是一种行为型设计模式,用于为特定语言(如数控系统的G代码)定义文法规则,并构建解释器来解析和执行该语言的语句。它通过将语法规则分解为多个类,实现…...
常用的 React Hooks 的介绍和示例
目录 1. useState2. useEffect3. useContext4. useReducer5. useCallback6. useMemo7. useRef8. useImperativeHandle9. useLayoutEffect10. useDebugValue 常用的 React Hooks 的介绍和示例: 1. useState useState 是一个用于在函数组件中添加状态的 Hook。 impo…...
ChatGLM-6B模型
ChatGLM-6B 是由 清华大学人工智能研究院(THU AI) 和 智源研究院(BAAI) 开发的一款中文对话生成大语言模型。它是ChatGLM系列的一个版本,其核心特点是基于GLM(General Language Model)架构&…...
编译安装php
前置准备 这里的可能不全,每个人安装的模块不一致,依赖也不不相同,按实际情况调整 yum install libxml2 -y yum install libxml2-devel -y yum install openssl-devel -y yum install sqlite-devel -y yum install libcurl-devel -yyum ins…...
【JavaEE进阶】Spring MVC(3)
欢迎关注个人主页:逸狼 创造不易,可以点点赞吗 如有错误,欢迎指出~ 返回响应 返回静态页面 //RestController Controller RequestMapping("/response") public class ResponseController {RequestMapping("/returnHtmlPage&…...
30 款 Windows 和 Mac 下的复制粘贴软件对比
在日常电脑操作中,复制粘贴是极为高频的操作,一款好用的复制粘贴软件能极大提升工作效率。以下为你详细介绍 30 款 Windows 和 Mac 下的复制粘贴软件,并对比它们的优缺点,同时附上官网下载地址,方便大家获取软件。 Pa…...
【LLAMA】羊驼从LLAMA1到LLAMA3梳理
every blog every motto: Although the world is full of suffering, it is full also of the overcoming of it 0. 前言 LLAMA 1到3梳理 1. LLAMA 1 论文: LLaMA: Open and Efficient Foundation Language Models 时间: 2023.02 1.1 前言…...
【OS安装与使用】part3-ubuntu安装Nvidia显卡驱动+CUDA 12.4
文章目录 一、待解决问题1.1 问题描述1.2 解决方法 二、方法详述2.1 必要说明2.2 应用步骤2.2.1 更改镜像源2.2.2 安装NVIDIA显卡驱动:nvidia-550(1)查询显卡ID(2)PCI ID Repository查询显卡型号(3…...
【蓝桥杯集训·每日一题2025】 AcWing 6123. 哞叫时间 python
6123. 哞叫时间 Week 1 2月18日 农夫约翰正在试图向埃尔茜描述他最喜欢的 USACO 竞赛,但她很难理解为什么他这么喜欢它。 他说「竞赛中我最喜欢的部分是贝茜说 『现在是哞哞时间』并在整个竞赛中一直哞哞叫」。 埃尔茜仍然不理解,所以农夫约翰将竞赛以…...
JAVA中常用类型
一、包装类 1.1 包装类简介 java是面向对象的语言,但是八大基本数据类型不符合面向对象的特征。因此为了弥补这种缺点,为这八中基本数据类型专门设计了八中符合面向面向对象的特征的类型,这八种具有面向对象特征的类型,就叫做包…...
【办公类-90-02】】20250215大班周计划四类活动的写法(分散运动、户外游戏、个别化综合)(基础列表采用读取WORD表格单元格数据,非采用切片组合)
背景需求: 做了中班的四类活动安排表,我顺便给大班做一套 【办公类-90-01】】20250213中班周计划四类活动的写法(分散运动、户外游戏、个别化(美工室图书吧探索室))-CSDN博客文章浏览阅读874次࿰…...
求矩阵对角线元素的最大值
求主对角线元素的最大值时,让指针指向A[N-1][N-1],指针以(N1)为单位递增,就可以指向对角线每个元素; 求次对角线元素的最大值时,让指针指向A[0][N-1],指针以(N-1)为单位递增,就可以指向副对角线…...
NoSQL之redis数据库
案例知识 关系与分关系型数据库 关系型数据库:Oracle,MySQL,SQL Server 非关系型数据库:Redis,MongDB Redis文件路径 配置文件:/etc/redis/6379.conf 日志文件:/var/log/redis_6379.log 数据文…...
铭豹扩展坞 USB转网口 突然无法识别解决方法
当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…...
Opencv中的addweighted函数
一.addweighted函数作用 addweighted()是OpenCV库中用于图像处理的函数,主要功能是将两个输入图像(尺寸和类型相同)按照指定的权重进行加权叠加(图像融合),并添加一个标量值&#x…...
定时器任务——若依源码分析
分析util包下面的工具类schedule utils: ScheduleUtils 是若依中用于与 Quartz 框架交互的工具类,封装了定时任务的 创建、更新、暂停、删除等核心逻辑。 createScheduleJob createScheduleJob 用于将任务注册到 Quartz,先构建任务的 JobD…...
cf2117E
原题链接:https://codeforces.com/contest/2117/problem/E 题目背景: 给定两个数组a,b,可以执行多次以下操作:选择 i (1 < i < n - 1),并设置 或,也可以在执行上述操作前执行一次删除任意 和 。求…...
Qemu arm操作系统开发环境
使用qemu虚拟arm硬件比较合适。 步骤如下: 安装qemu apt install qemu-system安装aarch64-none-elf-gcc 需要手动下载,下载地址:https://developer.arm.com/-/media/Files/downloads/gnu/13.2.rel1/binrel/arm-gnu-toolchain-13.2.rel1-x…...
基于stm32F10x 系列微控制器的智能电子琴(附完整项目源码、详细接线及讲解视频)
注:文章末尾网盘链接中自取成品使用演示视频、项目源码、项目文档 所用硬件:STM32F103C8T6、无源蜂鸣器、44矩阵键盘、flash存储模块、OLED显示屏、RGB三色灯、面包板、杜邦线、usb转ttl串口 stm32f103c8t6 面包板 …...
Android屏幕刷新率与FPS(Frames Per Second) 120hz
Android屏幕刷新率与FPS(Frames Per Second) 120hz 屏幕刷新率是屏幕每秒钟刷新显示内容的次数,单位是赫兹(Hz)。 60Hz 屏幕:每秒刷新 60 次,每次刷新间隔约 16.67ms 90Hz 屏幕:每秒刷新 90 次,…...
解密鸿蒙系统的隐私护城河:从权限动态管控到生物数据加密的全链路防护
摘要 本文以健康管理应用为例,展示鸿蒙系统如何通过细粒度权限控制、动态权限授予、数据隔离和加密存储四大核心机制,实现复杂场景下的用户隐私保护。我们将通过完整的权限请求流程和敏感数据处理代码,演示鸿蒙系统如何平衡功能需求与隐私安…...
DriveGPT4: Interpretable End-to-end Autonomous Driving via Large Language Model
一、研究背景与创新点 (一)现有方法的局限性 当前智驾系统面临两大核心挑战:一是长尾问题,即系统在遇到新场景时可能失效,例如突发交通状况或非常规道路环境;二是可解释性问题,传统方法无法解释智驾系统的决策过程,用户难以理解车辆行为的依据。传统语言模型(如 BERT…...
Go爬虫开发学习记录
Go爬虫开发学习记录 基础篇:使用net/http库 Go的标准库net/http提供了完善的HTTP客户端功能,是构建爬虫的基石: package mainimport ("fmt""io""net/http" )func fetchPage(url string) string {// 创建自定…...
