香橙派转换模型以及在开发板上部署

news2024/9/17 8:19:25

新手小白记录一下自己使用香橙派模型转换以及在开发板上运行的过程,防止后面忘记。

使用的开发板:Orange Pi 5 Plus(rk3588)

官方的一些资料在(主要参考用户手册):Orange Pi - Orangepiicon-default.png?t=O83Ahttp://www.orangepi.cn/html/hardWare/computerAndMicrocontrollers/service-and-support/Orange-Pi-5-plus.html

虚拟机:ubuntu20.04

前提:1、在自己笔记本上已经安装好虚拟机 (ubuntu20.04)

           2、开发板已经烧录好镜像(可以正常开机使用)

一、自己笔记本虚拟机端的环境配置:

1、查看python的版本:

python3 --version

这里我的虚拟机是完全新装的一个,里面没有额外装任何东西。

2、安装RKNN-Tookl2的依赖包:

sudo apt-get update

sudo apt-get install libxslt1-dev zlib1g-dev libglib2.0 libsm6 libgl1-mesa-glx libprotobuf-dev gcc

然后我这里报错:报错:E: 无法获取 dpkg 前端锁 (/var/lib/dpkg/lock-frontend),是否有其他进程正占用它?

解决办法(参考:https://www.cnblogs.com/while19/p/16197099.html):

sudo rm /var/cache/apt/archives/lock
sudo rm /var/lib/dpkg/lock
sudo rm /var/lib/dpkg/lock-frontend

接着继续使用上面的命令安装依赖,安装完成之后如下图:

3、安装rknn-toolkit2:

git clone https://github.com/rockchip-linux/rknn-toolkit2 -b v1.5.2

正常应该都是可以正常下载的,我也不知道为什么报了那么多错误,这里报错:

 报错:fatal: 无法访问 'https://github.com/rockchip-linux/rknn-toolkit2/':GnuTLS recv error (-110): The TLS connection was non-properly terminated.

解决办法:https://www.cnblogs.com/forforever/p/16451444.html

按照上面的方法,一开始我还是不能正常下载,然后我重启了一下虚拟机之后就可以了,还是我的网络问题。

4、安装rknn-toolkit2需要的环境:

pip3 install -r rknn-toolkit2/doc/requirements_cp38-1.5.2.txt -i https://mirror.baidu.com/pypi/simple

如果报错没有pip命令的话,根据提示安装一下即可:

如果这里使用百度的镜像源下载不了报错的话,可以更换一下镜像源(更换方法:将 -i 后面的网址换掉即可),下面是常用的几个镜像源:

1. 清华大学镜像站:https://pypi.tuna.tsinghua.edu.cn/simple/
2. 阿里云镜像站:https://mirrors.aliyun.com/pypi/simple/
3. 中科大镜像站:https://pypi.mirrors.ustc.edu.cn/simple/
4. 中国科技大学镜像站:https://pypi.mirrors.ustc.edu.cn/simple/
5. 中国科学技术大学镜像站:https://pypi.mirrors.ustc.edu.cn/simple/
6. 华中科技大学镜像站:https://pypi.hustunique.com/

如果有个别的库下载不下来的话,可以再重新换个镜像源单独安装。

5、安装 RKNN-Toolkit2 软件包

pip3 install rknn-toolkit2/packages/rknn_toolkit2-1.5.2+b642f30c-cp38-cp38-linux_x86_64.whl

 安装完成之后,可以使用里面给出的样例测试一下:

cd rknn-toolkit2/examples/onnx/yolov5/
python3 test.py

结果如下:

在这个文件夹下可以看到输出的结果以及转换的rknn模型。

二、使用ADB功能连接开发板和虚拟机:

我是参考用户手册里面的使用type-c数据线连接adb的部分,打开开发板之后,用一根数据线连接开发板和虚拟机。

1、开发板端设置

将type-c接口设置为device模式:

sudo set_device.sh

 确认adbd已经启动:

ps -ax | grep "adbd"

会输出两行类似下面的信息:

2、虚拟机端:

(1)要确认设备是连接在虚拟机上面的,可以通过虚拟机选项的可移动设备上面查看,有一个rk3588的设备,要连接到虚拟机,不能连接到主机。

(2)在虚拟机上面安装adb:

sudo apt-get update
sudo apt-get install -y adb

安装完成如下: 

(3)测试一下能不能识别到:

adb devices

正常时输出下面的结果,这里得到的那一串device_id后面是需要用到的。

但是我这里很容易出问题,一开始老是检测不到设备,可以多拔几次重新插试试。

三、在ubuntu端使用开发板的NPU运行模型:

1、更新开发板的rknn_server 和 librknnrt.so

(1)更新开发板的rknn_server:

adb push rknpu2/runtime/RK3588/Linux/rknn_server/aarch64/usr/bin/* /usr/bin

(2)更新开发板的librknnrt.so:

adb push rknpu2/runtime/RK3588/Linux/librknn_api/aarch64/librknnrt.so /usr/lib

(3)虚拟机端通过adb打开开发板的终端:

adb shell

可以看到已经进入了开发板的终端。

(4)打开rknn_server服务:

restart_rknn.sh

(5)可以再使用下面检查一下是否有进程id

pgrep rknn_server

2、生成对应的模型,并调用开发板的NPU推理

(1)切换到官方给的测试代码:

cd rknn-toolkit2/examples/onnx/yolov5/

(2)打开test.py文件修改相关参数,这里有两种方式:第一种是直接打开test.py文件在里面修改并保存,第二种方式是使用vim编辑器从终端打开test.py文件进行修改,这里我直接打开test.py文件修改保存。

在241行和270行,添加平台rk3588和device_id,其中device_id是通过前面的adb device命令得到的。

注意如果用第二种方式(使用vim编辑器在终端打开test.py文件)的话,需要先按 i 键进入插入模式,然后修改参数,修改完成之后,按esc退出插入模式,再直接敲 :wq 保存退出(注意在vim模式下,想要输入命令得先输入一个 : 才能输入命令),使用vim的命令如下(如果之前没有安装过vim,会报错,根据提示安装一下即可):

vim test.py

(3)在虚拟机端使用python运行示例:

python3 test.py

正常检测。

3、调用C接口部署RKNN模型到开发板上运行

(1)由于虚拟机端用的是x86,而开发板用的是arrch64,所以需要在虚拟机端安装交叉编译链:

git clone https://github.com/airockchip/gcc-buildroot-9.3.0-2020.03-x86_64_aarch64-rockchip-linux-gnu

(2)修改编译工具的路径:

#进入rknn_yolov5_demo文件夹
cd ~/rknpu2/examples/rknn_yolov5_demo

#使用vim打开build-linux_RK3588.sh并修改
vim build-linux_RK3588.sh

键盘敲 i 键进入插入模式,然后按照下图设置TOOL_CHAIN值:

export TOOL_CHAIN=~/gcc-buildroot-9.3.0-2020.03-x86_64_aarch64-rockchip-linux-gnu

这里需要注意一下,如果只修改了TOOL_CHAIN的值,后面编译生成可用程序的时候会报错:

CMake Error at /usr/share/cmake-3.16/Modules/CMakeDetermineCCompiler.cmake:49 (message):
  Could not find compiler set in environment variable CC:

  aarch64-linux-gnu-gcc.

所以建议一起修改GCC_COMPILER的值:

GCC_COMPILER=~/gcc-buildroot-9.3.0-2020.03-x86_64_aarch64-rockchip-linux-gnu/bin/aarch64-rockchip-linux-gnu

修改完成之后按esc退出插入模式,然后输入:wq保存退出。

(3)编译生成可用程序:

./build-linux_RK3588.sh

如果报错未找到cmake命令的话,就使用下面命令安装一下:

sudo apt-get install -y cmake

 编译生成完成之后,会在该文件夹下生成一个install的文件夹,里面有一个rknn_yoov5_demo_Linux文件夹,里面就是我们需要的文件。使用 ls install命令可以看到:

(4)将编译生成的文件上传到开发板:

adb push install/rknn_yolov5_demo_Linux /data/rknn_yolov5_demo_Linux

 (5)进入开发板的文件系统:

adb shell
cd /data/rknn_yolov5_demo_Linux/
ls

(6)在开发板上进行推理:

./rknn_yolov5_demo ./model/RK3588/yolov5s-640-640.rknn ./model/bus.jpg

推理完成之后可以使用 ls 命令查看生成的文件目录。

(7)使用adb pull将结果拉到虚拟机内

adb pull /data/rknn_yolov5_demo_Linux/out.jpg ~/yolo_output

这里的yolo_output是我事先在虚拟机里面建好的一个文件夹,用来存放推理出来的结果,这里的路径可以修改。 

 打开虚拟机里面的yolo_output文件夹,可以看到拉出来的结果图片:

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

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

相关文章

价格适中超微小间距P1.8全彩LED显示屏广泛应用于COB会议一体机

随着科技的不断进步与市场需求的日益多样化,价格适中且具备超微小间距P1.8技术的全彩LED显示屏,在COB(Chip On Board)会议一体机领域的应用正逐步深化,引领着现代会议展示的新风尚。这种显示屏不仅以其细腻的画质和卓越…

单片机DMA原理及应用详解(下篇)(附工程源码)

这篇文章详细介绍单片机的DMA原理和应用范例。希望我的分享能给你带来不一样的收获! 关于DMA的原理,可以看上一篇文章: 单片机DMA原理及应用详解(上篇)(附工程源码)-CSDN博客 目录 一、STM32单片…

黑龙江IBM Storwize v3700存储故障维修

中国黑龙江省佳木斯IBM Storwize v3700存储控制器故障维修案例: 报修单位:黑龙江佳木斯某某医院 存储型号:联想或IBM v3700 存储故障:无法正常访问存储磁盘,无法进存储web管理界面,可以进存储服务助手界…

《C++ 中的左值与右值》

在 C 的世界里,左值和右值是两个重要的概念,理解它们对于掌握 C 语言的精髓至关重要。 首先,我们来认识左值。左值,即 “locator value”,可以理解为有明确存储位置且可以被取地址的表达式。简单来说,一个可…

Linux之MySQL主从复制

概述 MySQL的主从复制(Master-Slave Replication)是一种数据复制解决方案,将主数据库的DDL(数据定义语言)和DML(数据操纵语言)操作通过二进制日志传到从库服务器中,然后在从库上对这…

自动驾驶ADAS算法--使用MATLBA和UE4生成测试视频

原文参考:金书世界 环境搭建参考:用MATLAB2020b和虚拟引擎(Unreal Engine)联合仿真输出AVM全景测试视频----Matlab环境搭建 matlab参考: https://ww2.mathworks.cn/help/driving/ug/simulate-a-simple-driving-sce…

Vue2电商项目(二) Home模块的开发;(还需要补充js节流和防抖的回顾链接)

文章目录 一、Home模块拆分1. 三级联动组件TypeNav2. 其余组件 二、发送请求的准备工作1. axios的二次封装2. 统一管理接口API----跨域3. nprogress进度条 三、 vuex模块开发四、TypeNav三级联动组件开发1. 动态展示三级联动数据2. 三级联动 动态背景(1)、方式一:CS…

CAS概念、性质、优缺点 | 乐观锁、悲观锁是什么?

前言: 今天在深入了解HashMap时,看到这句话:“concurrentHashMap,在 JDK 1.7 中采用 分段锁的方式;JDK 1.8 中直接采用了CAS(无锁算法) synchronized。” 哦~~这个CAS好像之前接触过&#xff0c…

VSCode拉取远程项目

天行健,君子以自强不息;地势坤,君子以厚德载物。 每个人都有惰性,但不断学习是好好生活的根本,共勉! 文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。…

2024年测评7款最佳AI论文修改润色平台

在2024年,AI论文修改润色平台的测评和推荐成为学术界和研究者们关注的热点。本文将详细评测并推荐7款最佳AI论文修改润色平台,包括千笔-AIPassPaper,并结合我搜索到的资料进行分析。 一、千笔-AIPassPaper 千笔-AIPassPaper是一款集论文大纲…

芯旺微,车规级32位MCU KF32A芯片简介

文章目录 1. 产品功能特点2. 行业应用3. 开发环境(IDE)4. 开发资源5. KungFu 内核参考1. 产品功能特点 2. 行业应用 汽车照明汽车车窗控制汽车空调面板汽车控制器3. 开发环境(IDE)

营养方案调整执行流程 第十篇

追踪调整方案 疾病诊断≠营养诊断 出健康管理建议应考虑地域习惯等特点,因人而异

HarmonyOS应用开发( Beta5.0)一杯冰美式的时间“拿捏Grid组件”

常见情形 在很多手机商城的页面中会出现类似网格状一样的情况,例如: 京东 ​这里呢是采用Grid组件中的控制滚动,里面的rowsTemplate属性为一行且不对列的行数属性进行操作,这样的话就可以控制水平滑动了。 2.淘宝 ​ 这里就是极其简单的2*…

Google Play结算防掉单方案

我们公司的产品主要是出海产品,使用的是Google Play支付,但是在上线以后,经常有客诉,说支付以后,权益没有到账,于是对整个Google支付体系做了研究了一下。 我们的整个支付流程图大概如下: 其中后端参考的文档地址为: https://developers.google.com/android-publishe…

Springboot中基于X509完成SSL检验的原理与实践

前言 各位对HTTPS不陌生吧?几乎涉及安全的领域,均要求通过HTTPS协议进行数据传输。而在传输过程中,又涉及到了SSL证书的使用。既然提到了SSL证书,那咱们先了解了解什么是SSL证书: SSL证书通过在客户端浏览器和Web服务…

生信代码入门:从零开始掌握生物信息学编程技能

少走弯路,高效分析;了解生信云,访问 【生信圆桌x生信专用云服务器】 : www.tebteb.cc 介绍 生物信息学是一个高度跨学科的领域,结合了生物学、计算机科学和统计学。随着高通量测序技术的发展,海量的生物数据需要通过编程来进行处理和分析。因此&#x…

如何使用云服务器AutoDL进行炼丹

如何使用云服务器进行炼丹 文章目录 如何使用云服务器进行炼丹1、选择平台2、学生认证3、租用新实例1)创建实例2)选择镜像3)注意事项 4、文件传输1)下载XFTP,用来传输文件2)XFTP连接 5、pycharm远程连接1&a…

【Github项目推荐】DataLoom

项目推荐 - DataLoom 项目背景 在数据驱动的时代,越来越多的企业和个人用户需要从复杂的数据中提取出高价值的信息。然而,传统的数据处理和分析流程复杂且耗时,需要技术人员的深度参与。那么,有没有一种工具能够简化这一过程&am…

Linux:归档及压缩

tar命令 • tar 集成备份工具 – -c:创建归档 – -x:释放归档 – -f:指定归档文件名称,必须在所有选项的最后 – -z、-j、-J:调用 .gz、.bz2、.xz 格式工具进行处理 – -t:显示归档中的文件清单 – -C:指定…

十年多空局

我收到的有关大洋彼岸的推送: 微信和头条上的长者们, 讲着他们小时候没有的GPU和生物技术, 看多 B站上的年轻人, 谈着他们一知半解的制度设计和宏观经济, 看空 十年尺度的看空与看多