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

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

使用的开发板: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.mzph.cn/bicheng/53562.shtml

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

相关文章

【视频讲解】Python贝叶斯卷积神经网络分类胸部X光图像数据集实例

全文链接:https://tecdat.cn/?p37604 分析师:Yuanchun Niu 在人工智能的诸多领域中,分类技术扮演着核心角色,其应用广泛而深远。无论是在金融风险评估、医疗诊断、安全监控还是日常的交互式服务中,有效的分类算法都是…

科研绘图系列:R语言富集散点图(enrichment scatter plot)

介绍 富集通路散点图(Enrichment Pathway Scatter Plot)是一种数据可视化工具,用于展示基因集富集分析(Gene Set Enrichment Analysis, GSEA)的结果。 横坐标是对应基因名称,纵坐标是通路名称,图中的点表示该基因在某个通路下的qvalue,可以简单理解为不同环境下的贡献…

【全网最全】2024年数学建模国赛A题30页完整建模文档+17页成品论文+保奖matla代码+可视化图表等(后续会更新)

您的点赞收藏是我继续更新的最大动力! 一定要点击如下的卡片那是获取资料的入口! 【全网最全】2024年数学建模国赛A题30页完整建模文档17页成品论文保奖matla代码可视化图表等(后续会更新)「首先来看看目前已有的资料&#xff0…

【ACM独立出版|EI快检索-高录用|IEEE Fellow支持】2024年数字经济与计算机科学国际学术会议(DECS2024)

【ACM独立出版|EI快检索-高录用|IEEE Fellow支持】 2024年数字经济与计算机科学国际学术会议(DECS2024) *ACM独立出版,快检索,高录用 *见刊后1个月左右完成EI&Scopus检索 *国内211大学、世界QS名校…

系统架构师-ERP+集成

ERP 集成平台end:就懒得画新的页

MyBatis-MappedStatement什么时候生成?QueryWrapper如何做到动态生成了SQL?

通过XML配置的MappedStatement 这部分MappedStatement主要是由MybatisXMLMapperBuilder进行解析,核心逻辑如下: 通过注解配置的MappedStatement 核心逻辑就在这个里面了: 继承BaseMapper的MappedStatement 我们看看这个类,里…

Java项目——苍穹外卖(一)

Entity、DTO、VO Entity(实体) Entity 是表示数据库表的对象,通常对应数据库中的一行数据。它通常包含与数据库表对应的字段,并可能包含一些业务逻辑。 DTO(数据传输对象) 作用:DTO 是用于在…

【小沐学OpenGL】Ubuntu环境下glfw的安装和使用

文章目录 1、简介1.1 OpenGL简介1.2 glfw简介 2、安装glfw2.1 直接命令二进制安装2.2 源码安装 3、测试glfw3.1 测试1,glfwglew3.2 测试2,glfwglad3.3 测试3 结语 1、简介 1.1 OpenGL简介 OpenGL作为图形界的工业标准,其仅仅定义了一组2D和…

Vivado编译报错黑盒子问题

1 问题描述 “Black Box Instances: Cell **** of type ** has undefined contents and is considered a back box. The contents of this cell must be defined for opt_design to complete successfully.” 检查工程代码提示的模块,该模块为纯手写的Veril…

注册安全分析报告:熊猫频道

前言 由于网站注册入口容易被黑客攻击,存在如下安全问题: 暴力破解密码,造成用户信息泄露短信盗刷的安全问题,影响业务及导致用户投诉带来经济损失,尤其是后付费客户,风险巨大,造成亏损无底洞…

【论文阅读】CiteTracker: Correlating Image and Text for Visual Tracking

paper:[2308.11322] CiteTracker: Correlating Image and Text for Visual Tracking (arxiv.org) code:NorahGreen/CiteTracker: [ICCV23] CiteTracker: Correlating Image and Text for Visual Tracking (github.com) 简介 现有的视觉跟踪方法通常以…

前端:HTML、CSS、JS、Vue

1 前端 内容概要 了解前端三件套(HTML、CSS、JS)在前端所起的作用掌握HTML标签的功能,掌握重要标签(a标签,form标签)了解CSS了解JS的基础语法掌握Vue的基础语法重点掌握Vue项目怎么启动项目掌握前后端分离是什么。前端做什么事情,后端做什么…

视频监控系统布局策略:EasyCVR视频汇聚平台构建高效、全面的安全防线

随着科技的飞速发展,视频监控系统已成为现代社会安全防范的重要组成部分,广泛应用于公共场所、企业园区、住宅小区等各个领域。一个科学合理的视频监控系统布局与选型策略,不仅能够显著提升安全监控的效率和效果,还能在关键时刻提…

Pytest-@pytest.fixture夹具篇(一)

一、定义 在Python的pytest测试框架中,pytest.fixture是一个(不是唯一)装饰器,用于定义一个测试夹具。 二、简单实例 使用参数autouserTrue pytest.fixture(autouseTrue) def my_fixture():print("Setup: 准备测试环境&q…

计算机毕业设计 | SpringBoot+vue 游戏商城 steam网站管理系统(附源码)

1,项目背景 国家大力推进信息化建设的大背景下,城市网络基础设施和信息化应用水平得到了极大的提高和提高。特别是在经济发达的沿海地区,商业和服务业也比较发达,公众接受新事物的能力和消费水平也比较高。开展商贸流通产业的信息…

应用层协议HTTP

应用层协议中的 HTTP(超文本传输协议)。在互联网中,HTTP 协议是一个至关重要的一个协议,它定义了客户端与服务器之间如何进行通信,以交换或传输超文本。 本篇介绍了有关 URL 的相关知识,http 的报文格式&am…

Apache Pig

目录 一、配置说明1.本地模式2.集群模式 二、pig的数据模型三、pig的数据类型四、惰性执行五、pig的基本语法5.1语法说明5.2案例操作 六、pig的自定义函数 一、配置说明 1.本地模式 操作的是Linux系统文件 pig -x local关键日志 当前处于root目录下 2.集群模式 连接的是…

CentOS7单机环境安装k8s集群

目录 1、环境准备 2、安装依赖工具 3、配置 Kubernetes 的国内 Yum 源 4. 安装 Kubernetes 组件 5、初始化 Kubernetes 集群 1. 容器运行时没有正常运行 1.1. 可能的原因 1.2. 解决办法 2. 初始化拉取镜像卡住 2.1. 使用国内的镜像源(无法解决问题&#x…

AI绘画工具排行榜:探索最受欢迎的AI绘图软件特点与选择指南

AI绘画工具各有优势,从开放性到对特定语言和文化的支持,以及对图像细节和艺术性的不同关注点,根据具体需求选择合适的工具 MidJourney 图片品质卓越,充满独特创意,初期能够免费获取数十账高质量图片,整个生…

ImportError: cannot import name ‘print_log‘ from ‘logging‘

mmcv升级到2.后删除了很多 解决 查FAQ文档,找到 添加到mmcv.utils下即可