OrangePi AIpro小试牛刀-目标检测(YoloV5s)

非常高兴参加本次香橙派AI Pro,香橙派联合华为昇腾打造的一款AI推理开发板评测活动,以前使用树莓派Raspberry Pi4B 8G版本,这次有幸使用国产嵌入式开发板。

一窥芳容

img

img

这款开发板搭载的芯片是和华为昇腾的Atlas 200I DK A2同款的处理器,功耗低至8W

默认AI CPU和Control CPU 比例1:3,

芯片名称

310B1:表示芯片算力规格为20T。
310B4:表示芯片算力规格为8T

orangepi AI pro之后会推出20TOPS AI算力版本开发板

ubuntu系统构建

本次测评基于ubuntu系统烧写,linux镜像脚本编译,usb摄像头yolov5目标检测编写文章。

基于PC主机烧写Ubuntu22.04

烧写步骤
  1. 准备TF读卡器,32G或者更大的TF卡,Ubuntu官方镜像

  2. 镜像下载地址,选择ubuntu镜像

  3. 使用官方工具中的balenaEtcher烧写工具,使用portable版

选择32的磁盘

img

烧写速度15M/s,烧写完成之后会进行30min的校验。也可取消校验

  1. 插卡,启动开发板
登录方式

使用串口登录

软件MobaXterm,新建Session,选择Serial,CH340USB驱动,波特率115200

img

使用账户:HwHiAiUser ,密码:Mind@123

Linux镜像编译脚本的使用

前言

目前linux镜像编译脚本只在Ubuntu22.04的x64电脑上测试过,请保证自己ubuntu版本为22.04.

本次使用VMware Workstation 的ubuntu22.04虚拟机镜像编译脚本,虚拟机镜像磁盘最小为50G,软件源替换为清华源

镜像编译脚本压缩包

1.在下载页面选择Linux源码

img

2.然后下载image.build.tar.gz压缩包,使用filezilla传到ubuntu22.04 目录/opt下

3.解压

tar -zxf image-builder.tar.gz

4.进入src目录下会有3种镜像,必须先制作minimal镜像

模块名称**模块目录功能简介
最小镜像src/minimal可以在开发板上启动但缺少部分依赖的镜像
完整镜像src/complete完整依赖镜像
压缩扩容镜像src/compress带有压缩扩容功能的完整依赖镜像
制作最小镜像

1.将ubuntu language设置为English(UK)

2.tf读卡器插入电脑,usb口,vmware会弹出窗口将硬盘接入虚拟机

img

3.切换root用户,安装依赖包

su -i
apt-get install -y qemu-system qemu-user qemu-user-static binfmt-support

4.然后将emmc-head文件依赖的库文件拷贝到ubuntu22.04的/usr/lib64,库文件在==linux源码====library文件夹==

img

使用filezilla上传

img

5.运行emmc-head命令,输出以下内容,表示lib安装成功

img

6.进入sr/minimal,ubuntu预装进开发板的软件包deb可以放在

ubuntu/22.04/download

7.使用fdish -l查看硬盘挂载情况

找到32G tf卡所在挂载路径

img

8.执行以下命令,开始制作最小镜像

bash base.sh ubuntu/22.04/ /dev/sdb ubuntu/22.04/download/

img

9.最终输出,制作成功

Minimal image build successful!

查看磁盘分区,被划分成5个分区

img

TF插入主板,会重启一次,重启之后可以使用串口登录

YoloV5s目标检测

前言

使用usb摄像头,加orangepi AI pro开发板。

执行准备

确定具有桌面的镜像,使用HDMI0连接显示器、

HwHiAiUser用户登录开发板

切换到root用户

cd /opt/opi_testcd ResnetPicture/scriptsbash sample_run.sh

如果你是orangepi aipro ubuntu 22.04镜像 -> 安装ACClite

2.安装依赖

Sapt-get install ffmpeg libavcodec-dev libswscale-dev libavdevice-dev

检查ffmepg是否安装成功

dpkg -S ffmpeg

3.安装步骤:

# 拉取ACLLite仓库,并进入目录
git clone https://gitee.com/ascend/ACLLite.git
cd ACLLite# 设置环境变量,其中DDK_PATH中/usr/local请替换为实际CANN包的安装路径
export DDK_PATH=/usr/local/Ascend/ascend-toolkit/latest
export NPU_HOST_LIB=$DDK_PATH/runtime/lib64/stub# 安装,编译过程中会将库文件安装到/lib目录下,所以会有sudo命令,需要输入密码
bash build_so.sh
样例下载

==切换用户到HwHiAiUser==

下载源码,从gitee上clone

git clone https://gitee.com/ascend/EdgeAndRobotics.git

切换到样例目录

cd EdgeAndRobotics/Samples/YOLO5USBCamera
cd model
运行样例

1.使用usb摄像头,直接从外设使用opencv读取图片帧处理

2.获取PyTorch框架的Yolov5模型(*.onnx),并转换为昇腾AI处理器能识别的模型(*.om)

  • 当设备内存小于8G时,可设置如下两个环境变量减少atc模型转换过程中使用的进程数,减小内存占用。

    export TE_PARALLEL_COMPILER=1
    export MAX_COMPILE_CORE_NUMBER=1
    
  • 原始模型下载及模型转换命令

    cd ../model
    wget https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/003_Atc_Models/yolov5s/yolov5s.onnx --no-check-certificate
    wget https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/003_Atc_Models/yolov5s/aipp.cfg --no-check-certificate
    atc --model=yolov5s.onnx --framework=5 --output=yolov5s --input_shape="images:1,3,640,640"  --soc_version=Ascend310B4  --insert_op_conf=aipp.cfg
    
    • atc命令中各参数的解释如下,详细约束说明请参见《ATC模型转换指南》
      • --model:Yolov5网络的模型文件的路径。
      • --framework:原始框架类型。5表示ONNX。
      • --output:yolov5s.om模型文件的路径。请注意,记录保存该om模型文件的路径,后续开发应用时需要使用。
      • --input_shape:模型输入数据的shape。
      • --soc_version:昇腾AI处理器的版本。version = Ascend310B4

3.编译源码

~/EdgeAndRobotics/Samples/YOLOVSUSBCamera/models$ cd ../scripts
ls
sample_run.bash sample_build.sh
编译样例源码
bash sample_build.sh

4.运行样例

在直连电脑场景,执行以下脚本运行样例。此时会以结果打屏的形式呈现推理效果。

bash sample_run.sh stdout

最后终于成功

img

img

总结错误

bash sample_build.sh

  1. 文件无法写入问题

权限,之前转换模型时使用的root

img

img

解决

sudo chown -R HwHiAiUser:HwHiAiUser buildsudo chown -R HwHiAiUser:HwHiAiUser out
  1. ACLLite库没安装错误

sudo bash sample_build.sh
[sudo] password for HwHiAiUser:
[INFO] Sample preparation
-- The C compiler identification is GNU 11.4.0
-- The CXX compiler identification is GNU 11.4.0
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /usr/bin/cc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/g++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- set default INC_PATH: /usr/local/Ascend/ascend-toolkit/latest
-- set default LIB_PATH: /usr/local/Ascend/ascend-toolkit/latest/runtime/lib64/stub
-- Found OpenCV: /usr (found version "4.5.4")
-- Configuring done
-- Generating done
-- Build files have been written to: /home/HwHiAiUser/EdgeAndRobotics/Samples/YOLOV5USBCamera/build/intermediates/host

img

解决方法在上面 安装ACLLite

  1. 模型加载失败

原因是转换模型时root用户,生成的yolov5s.om模型是root用户

img

img

解决方法:

sudo chown -R HwHiAiUser:HwHiAiUser yolov5s.om

4.** cv::Exception**
我在串口执行sample_run.sh时

terminate called after throwing an instance of 'cv::Exception'
what(): OpenCV(4.5.4) ./modules/highgui/src/window_gtk.cpp:635: error: (-2:Unspecified error) Can't initialize GTK backend in function 'cvInitSystem'

sample_run.sh: line 5: 19325 Aborted (core dumped) ./main $1
[INFO] The program runs failed

将其切换到桌面系统,因为要启动一个输出图像页面

img

其他样例

使用AscendCL显示不同功能

样例功能样例名称
“Hello World” For AscendCLsampleResnetQuickStart以ResNet50网络模型为例进行模型推理,实现对物体进行分类,并给出TOP5类别置信度和相应类别信息
Object Detection with Acllite Acllite目标检测sampleYOLOV7以YOLOV7网络模型为例,使能Acllite对图片进行预处理,并通过模型转换使能静态AIPP功能,使能AIPP功能后,YUV420SP_U8格式图片转化为RGB,然后减均值和归一化操作,并将该信息固化到转换后的离线模型中,对YOLOV7网络执行推理,对图片进行物体检测和分类,并给出标定框和类别置信度。

具体学习可参考-> samples: CANN Samples (gitee.com)

参考资料

[1]深圳市迅龙软件有限公司. (2024). OrangePi AI Pro 昇腾用户手册 V0.3.1[用户手册]. 深圳: 深圳市迅龙软件有限公司.

[2]华为技术有限公司. (2024). EdgeAndRobotics[源代码]. Gitee平台. https://gitee.com/ascend/EdgeAndRobotics

深圳迅龙科技有限公司. (2024). Orange Pi AI Pro产品介绍与技术支持[EB/OL]. 橙派官网, http://www.orangepi.cn/html/hardWare/computerAndMicrocontrollers/service-and-support/Orange-Pi-AIpro.html.

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

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

相关文章

Vue3中的常见组件通信之$attrs

Vue3中的常见组件通信之$attrs 概述 ​ 在vue3中常见的组件通信有props、mitt、v-model、 r e f s 、 refs、 refs、parent、provide、inject、pinia、slot等。不同的组件关系用不同的传递方式。常见的撘配形式如下表所示。 组件关系传递方式父传子1. props2. v-model3. $re…

[Linux]内网穿透nps

文章目录 基础文件下载项目地址下载地址 客户端安装解压文件客户端启动客户端注册到linux系统服务客户端注册到windows系统服务windows bat 一键管理员注册windows bat 一键管理员取消 基础文件下载 项目地址 https://github.com/ehang-io/nps 下载地址 Releases ehang-io…

微服务第二轮

学习文档 背景 由于每个微服务都有不同的地址或端口,入口不同 请求不同数据时要访问不同的入口,需要维护多个入口地址,麻烦 前端无法调用nacos,无法实时更新服务列表 单体架构时我们只需要完成一次用户登录、身份校验&#xff…

想在VBA软件中做个登录验证会员授权,用什么云服务器好?

想在VBA中做个登录验证会员授权,用什么服务器好? 腾讯云99起,百度云50元起,不过也不知道到底是一整个虚拟机服务器, 装了WIN2012系统的,还是只是一个虚拟网站只给你一个文件夹可以上传PHP,ASP网页后台。 价…

多维vector定义

多维vector定义 CSP 考试需要定义多维矩阵&#xff0c;我发现我不会定义和初始化&#xff0c;遭罪了。 1. 定义一个 n 维 vector vector<int>a(n, 0) 相当于 int a[n] {0} 2. 定义一个 a * b * c 维度的vector vector<vector<vector<int>>> x(a, ve…

【运维】如何更换Ubuntu默认的Python版本,update-alternatives如何使用

update-alternatives 是一个在 Debian 及其衍生发行版中&#xff08;包括 Ubuntu&#xff09;用于管理系统中可替代项的命令。它可以用于在系统中设置默认的软件版本&#xff0c;例如在不同版本的软件之间进行切换&#xff0c;比如不同的 Python 版本。 要在 Ubuntu 中使用 up…

贪心算法 之 股票 跳跃游戏1and2

第一题&#xff1a; 给你一个整数数组 prices &#xff0c;其中 prices[i] 表示某支股票第 i 天的价格。 在每一天&#xff0c;你可以决定是否购买和/或出售股票。你在任何时候 最多 只能持有 一股 股票。你也可以先购买&#xff0c;然后在 同一天 出售。 返回 你能获得的 最…

6、组件通信详解(父子、兄弟、祖孙)

一、父传子 1、props 用法&#xff1a; &#xff08;1&#xff09;父组件用 props绑定数据&#xff0c;表示为 v-bind:props"数据" &#xff08;v-bind:简写为 : &#xff0c;props可以任意命名&#xff09; &#xff08;2&#xff09;子组件用 defineProps([props&…

Java 编译报错:找不到符号? 手把手教你排查解决!

Java 编译报错&#xff1a;找不到符号&#xff1f; 手把手教你排查解决&#xff01; 在 Java 开发过程中&#xff0c;我们经常会遇到编译器抛出 "找不到符号" 错误。这个错误提示意味着编译器无法在它所理解的范围内找到你所引用的类、变量或方法。这篇文章将带你一步…

一文学习yolov5 实例分割:从训练到部署

一文学习yolov5 实例分割&#xff1a;从训练到部署 1.模型介绍1.1 YOLOv5结构1.2 YOLOv5 推理时间 2.构建数据集2.1 使用labelme标注数据集2.2 生成coco格式label2.3 coco格式转yolo格式 3.训练3.1 整理数据集3.2 修改配置文件3.3 执行代码进行训练 4.使用OpenCV进行c部署参考文…

手写kNN算法的实现-用欧几里德空间来度量距离

kNN的算法思路&#xff1a;找K个离预测点最近的点&#xff0c;然后让它们进行投票决定预测点的类型。 step 1: kNN存储样本点的特征数据和标签数据step 2: 计算预测点到所有样本点的距离&#xff0c;关于这个距离&#xff0c;我们用欧几里德距离来度量&#xff08;其实还有很多…

苍穹外卖笔记-07-菜品管理-增加、删除、修改、查询分页还有菜品起售或停售状态

菜品管理 1 新增菜品1.1 需求分析与设计1.2 代码开发文件上传新增菜品实现 1.3 功能测试 2 菜品分页查询2.1 需求分析和设计2.2 代码开发设计DTO类设计VO类Controller层Service层Mapper层 2.3 功能测试 3 删除菜品3.1 需求分析和设计3.2 代码开发Controller层Service层Mapper层…

机器学习——卷积神经网络

卷积神经网络CNN 多层感知机MLP的层数足够&#xff0c;理论上可以用其提取出二位特征&#xff0c;但是毕竟复杂&#xff0c;卷积神经网络就可以更合适的来提取高维的特征。 而卷积其实是一种运算 二维离散卷积的公式 可以看成g是一个图像的像素点&#xff0c;f是每个像素点对…

2024前端面试准备4-Vue相关

Vue2.0 1. 双向绑定原理 Vue是采用数据劫持发布订阅模式的方式&#xff0c;通过Object.defienProperty()来劫持各个属性的setter\getter,在数据发送变动时发布消息给订阅者&#xff0c;触发相应的监听回调。主要分为以下几个步骤&#xff1a; observe的数据对象进行递归遍历&a…

正态分布公式

正态分布&#xff08;也称为高斯分布&#xff09;的概率密度函数&#xff08;PDF&#xff09;公式如下&#xff1a; 对于均值为 (\mu) &#xff0c;标准差为 (\sigma) 的正态分布&#xff0c;其概率密度函数为&#xff1a; f ( x ) 1 2 π σ 2 e − ( x − μ ) 2 2 σ 2 f(…

【计网复习】应用层总结(不含HTTP和错题重点解析)

应用层总结&#xff08;不含HTTP和错题重点解析&#xff09; 应用层简介 应用层的主要功能常见的应用层协议小林对于应用层通常的解释 网络应用模型 客户端-服务器模型&#xff08;Client-Server Model, C/S&#xff09; 特点优点缺点应用场景 对等网络模型&#xff08;Peer-to…

算法 | 用贪心求解背包动态规划、回溯、分支限界法求解0-1背包

背包问题 普通背包&#xff1a; 贪心时间复杂度:O(nlogn) 首先计算每种物品单位重量的价值Vi/Wi&#xff0c;然后&#xff0c;依贪心 选择策略&#xff0c;将尽可能多的单位重量价值最高的物品装入背包。若 将这种物品全部装入背包后&#xff0c;背包内的物品总重量未超过C&a…

IO流字符流(FileReader与FileWriter)

目录 FileReader 空参read方法 带参read方法&#x1f447; FileWriter void write(intc) 写出一个字符 void write(string str) 写出一个字符串 void write(string str,int off,int len) 写出一个字符串的一部分 void write(char[] cbuf) …

Web前端伯乐在线:探索技术的深度与广度

Web前端伯乐在线&#xff1a;探索技术的深度与广度 在浩瀚的互联网海洋中&#xff0c;Web前端技术犹如一艘航行在波涛汹涌的海洋中的巨轮&#xff0c;承载着无数的创新与可能。而在这个领域里&#xff0c;伯乐在线就像一座灯塔&#xff0c;照亮着前行者的道路&#xff0c;引领…

备战 清华大学 上机编程考试-冲刺前50%,倒数第5天

T1&#xff1a;多项式求和 小K最近刚刚习得了一种非常酷炫的多项式求和技巧&#xff0c;可以对某几类特殊的多项式进行运算。非常不幸的是&#xff0c;小K发现老师在布置作业时抄错了数据&#xff0c;导致一道题并不能用刚学的方法来解&#xff0c;于是希望你能帮忙写一个程序…