香橙派OrangePi AIpro上手笔记——之USB摄像头目标检测方案测试(三)
整期笔记索引
香橙派OrangePi AIpro上手笔记——之USB摄像头目标检测方案测试(一)
香橙派OrangePi AIpro上手笔记——之USB摄像头目标检测方案测试(二)
香橙派OrangePi AIpro上手笔记——之USB摄像头目标检测方案测试(三)
本章前言
在测试笔记(一)中,我们已经掌握并搭建了板卡的初步调试环境。
在测试笔记(二)中,我们开始逐步上手官方的Demo,进行跑测,首先测试的是Camera图像获取(USB接口)样例。
今天,我们将要跑测:目标检测(USB接口)样例。
官方Demo跑测——02 目标检测(YoloV5s)
【目标检测(USB接口)样例 链接】
Ascend/EdgeAndRobotics - Gitee.comhttps://gitee.com/ascend/EdgeAndRobotics/tree/master/Samples/YOLOV5USBCamera
【样例描述】
通过USB接口连接Camera与开发板,从Camera获取视频,基于yolov5s模型对输入视频中的物体做实时检测,将推理结果信息使用imshow方式显示。
YOLOv5是一种单阶段目标检测器算法
YOLOv5s是YOLOv5系列中较为轻量的网络模型,适合在边缘设备部署,进
行实时目标检测。
1、设置环境变量
PS:以HwHiAiUser用户登录开发板。
运行记录:(此处我使用的是命令行方式)
(base) HwHiAiUser@orangepiaipro:~$ export DDK_PATH=/usr/local/Ascend/ascend-toolkit/latest(base) HwHiAiUser@orangepiaipro:~$ export NPU_HOST_LIB=$DDK_PATH/runtime/lib64/stub
2、安装ACLLite库
此处可以参考ACLLite仓安装ACLLite库。
ACLLite链接:
Ascend/ACLLitehttps://gitee.com/ascend/ACLLite
【ACLLite库描述】
通过USB接口连接Camera与开发板,从Camera获取视频,基于yolov5s模型对输入视频中的物体做实时检测,将推理结果信息使用imshow方式显示。
- CANN版本要求: 7.0及以上社区版本。
命名空间 | 模块 | 说明 |
acllite | common | 资源管理及公共函数模块 |
DVPPLite | DVPP高阶封装模块 | |
OMExecute | 离线模型执行高阶封装模块 | |
Media | 媒体功能高阶封装模块 |
- 安装依赖
- 安装CANN:
参考社区文档安装CANN
- 安装ffmpeg
(1)通过如下命令查询OS版本
lsb_release -a
此处显示我的操作系统为Ubuntu 22.04
(2)根据版本选择安装方式
根据查询结果选择安装方式此处我选择的是Ubuntu 22.04及以上版本的安装方式:apt安装
apt-get install ffmpeg libavcodec-dev libswscale-dev libavdevice-dev
- 安装步骤
# 拉取ACLLite仓库,并进入目录
git clone https://gitee.com/ascend/ACLLite.gitcd 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
3、样例下载
可以使用以下两种方式下载,请选择其中一种进行源码准备。
- 命令行方式下载(下载时间较长,但步骤简单)。
- 压缩包方式下载(下载时间较短,但步骤稍微复杂)。
运行记录:
# 登录开发板,HwHiAiUser用户命令行中执行以下命令下载源码仓
cd ${HOME}git clone https://gitee.com/ascend/EdgeAndRobotics.git
# 切换到样例目录cd EdgeAndRobotics/Samples/YOLOV5USBCamera
PS:所有运行均以HwHiAiUser用户登录开发板,切换到当前样例目录。
4、准备测试视频
请从以下链接获取该样例的测试视频,放在data目录下。
cd datawget https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/003_Atc_Models/yolov5s/test.mp4 --no-check-certificate
PS:若需更换测试视频,则需自行准备测试视频,并将测试视频放到data目录下。
5、获取PyTorch框架的Yolov5模型(*.onnx)
获取模型,并转换为昇腾AI处理器能识别的模型(*.om)
- 先设置两个环境变量减少atc模型转换过程中使用的进程数,减小内存占用。
export TE_PARALLEL_COMPILER=1
export MAX_COMPILE_CORE_NUMBER=1
- 然后直接给出原始模型下载及模型转换命令。
cd ../modelwget https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/003_Atc_Models/yolov5s/yolov5s.onnx --no-check-certificatewget 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处理器的版本。
PS:这一步骤时间较长,同时可以看到下图在运行该步骤时,CPU运行占比较高。
完成后,信息显示如下:
6、编译样例源码
执行以下命令编译样例源码
cd ../scriptsbash sample_build.sh
7、运行样例
- 在HDMI连接屏幕场景,执行以下脚本运行样例。此时会以画面的形式呈现推理效果。
bash sample_run.sh imshow
HDMI的屏幕上显示如图:
- 在直连电脑场景,执行以下脚本运行样例。此时会以结果打屏的形式呈现推理效果。
bash sample_run.sh stdout
8、对比查看运行时的cpu和系统状态
运行前,系统状态如图 | 运行时,系统状态如图 |
| |
官方Demo跑测——03 体验AI应用样例(运行目标检测)
【样例介绍】
在样例中已经包含转换后的om模型和测试视频、图片
在JupyterLab中运行样例
运行样例文件夹中共有 9 个文件夹和 1 个 shell 文件
分别对应 9 个 AI 应用样例和Jupyter Lab
1、切换到样例目录
(base) HwHiAiUser@orangepiaipro:~$ cd samples/notebooks/
2、启动脚本
(base) HwHiAiUser@orangepiaipro:~/samples/notebooks$ ./start_notebook.sh
start_notebook.sh脚本,会自动启动 Jupyter Lab
3、执行该脚本
终端会出现如下打印信息
PS:打印信息中会有登录 Jupyter Lab 的网址链接
4、打开火狐浏览器,访问log中的网页
- 首先在jupyterlab界面双击“01-yolov5”,进入到该目录下。
- 双击打开main.ipynb,在右侧窗口中会显示main.ipynb文件中的内容。
其中mian.ipynb是在JupyterLab中运行该样例的文件
- 在main.ipynb文件中infer_mode的值可赋值为image、video和camera,分别对应对图片、视频、USB摄像头中的内容进行目标检测,默认值为video。
- 单击 按钮运行样例,在弹出的对话框中单击“Restart”按钮,此时该样例开始运行。
infer_mode设为image变量时:
infer_mode设为video变量时:
infer_mode设为camera变量时:
附:硬件链接方案:
- 左侧:两个USB接口,一个是摄像头,另一个是USB扩展器(连接键盘鼠标)
- 中间:HDMI屏幕显示
- 右侧:电源连接线
结语
至此,我们的Demo 系列就完成了。
demo 1,我们调通了香橙派调用USB摄像头的环境。
demo 2,我们针对目标检测YoloV5s进行了跑测。
demo 3,我们深入体验板载的AI应用,针对视频、图片和摄像头的目标检测方案,进行了分步跑测。
从系统状态的角度来看,当前目标检测的小demo,并未用尽板子的性能,甚至连一半还没有用到。足可见得,当前开发板的性能对于yolo的一些简单项目来说,是足够使用的。
对于一些AI入门级选手,可以考虑入手,边学习边深入应用。
相关文章:

香橙派OrangePi AIpro上手笔记——之USB摄像头目标检测方案测试(三)
整期笔记索引 香橙派OrangePi AIpro上手笔记——之USB摄像头目标检测方案测试(一) 香橙派OrangePi AIpro上手笔记——之USB摄像头目标检测方案测试(二) 香橙派OrangePi AIpro上手笔记——之USB摄像头目标检测方案测试(…...

【git】常用命令
删除 删除本地分支: // 删除本地分支 git branch -d localBranchName 删除远程仓库分支 git push origin --delete <branch_name> 验证远程分支是否删除 git fetch -p //会清理已经删除的远端分支的引用 git branch -r //列出所有远端分支࿰…...

JavaWeb_MySQL数据库
数据库: MySQL数据模型: MySQL是关系型数据库。 SQL: 简介 分类: 数据库设计-DDL 对数据库操作: 表操作: 小练习: 创建下表 SQL代码: create table tb_user (id int primar…...

中国BI步入增长大周期,腾讯云ChatBI加速AI+BI融合
过去十年,大数据技术的快速发展,让数据消费前进一大步,数据价值得到一定程度的挖掘与释放,真正开启了“用数”的大时代。但数据分析繁杂的技术栈、复杂的处理过程以及程式化的交互方式,让“数据消费”的门槛始终降不下…...

揭秘Python:下划线的特殊用法,你绝对想不到!
在Python编程中,下划线(underscore)是一个常见而又强大的工具。它不仅仅是一个普通的字符,而是具有特殊含义和用法的符号。今天,我们就来揭开Python下划线的神秘面纱,探索它的各种妙用。 下划线的基本用法…...

深入探索Java世界中的Jackson魔法:玩转JsonNode
哈喽,大家好,我是木头左! 揭秘Jackson库:JSON处理的瑞士军刀 在Java的世界里,处理JSON数据就像是一场探险。幸运的是,Jackson库就像一把多功能的瑞士军刀,为提供了强大而灵活的工具来解析和操作…...

为什么要使用动态代理IP?
一、什么是动态代理IP? 动态代理IP是指利用代理服务器来转发网络请求,并通过不断更新IP地址来保护访问者的原始IP,从而达到匿名访问、保护隐私和提高访问安全性的目的。动态代理IP在多个领域中都有广泛的应用,能够帮助用户…...

【PB案例学习笔记】-09滚动条使用
写在前面 这是PB案例学习笔记系列文章的第8篇,该系列文章适合具有一定PB基础的读者。 通过一个个由浅入深的编程实战案例学习,提高编程技巧,以保证小伙伴们能应付公司的各种开发需求。 文章中设计到的源码,小凡都上传到了gitee…...

C++中常见的构造函数类别
目录 摘要 默认构造函数(Default Constructor): 带参数的构造函数(Parameterized Constructor): 拷贝构造函数(Copy Constructor): 移动构造函数(Move C…...

万界星空科技MES系统功能介绍
制造执行系统或MES 是一个全面的动态软件系统,用于监视、跟踪、记录和控制从原材料到成品的制造过程。MES在企业资源规划(ERP) 和过程控制系统之间提供了一个功能层,为决策者提供了提高车间效率和优化生产所需的数据。 万界星空科技MES 系统基础功能&am…...

炸裂的开源AI语音生成模型ChatTTS
今天看到GitHub上开源了一个非常厉害的AI语音生成模型ChatTTS,可以生成和人类声音非常接近的语音,而且有语气、语调、可以停顿和发出笑声,再也没有了以前的AI味道 体验地址:https://colab.research.google.com/drive/1MYep5f0-BJ…...

Mac逆向Electron应用
工具库 解压asar文件 第一步 找到应用文件夹位置 打开活动监视器: 搜索相关应用 用命令行打开刚才复制的路径即可 open Applications/XXX.app/Contents/Resources/app第二步 解压打包文件 解压asar文件...

(三)MobaXterm、VSCode、Pycharm ssh连接服务器并使用
背景:根据前两篇文章操作完成后, 手把手教学,一站式安装ubuntu及配置服务器-CSDN博客 手把手教学,一站式教你实现服务器(Ubuntu)Anaconda多用户共享-CSDN博客 课题组成员每人都有自己的帐号了࿰…...

【Linux】初识信号及信号的产生
初始信号 初始信号什么是信号站在应用角度的信号查看Linux系统定义的信号列表 信号的常见处理方式信号的产生通过终端按键产生信号什么是core dump?如何开启core dump?core dump有什么用?为什么默认关闭core dump?设置了core文件大小但是没有产生core文…...

故障诊断 | 基于 KAN、KAN卷积的轴承故障诊断模型
研究背景: 轴承是机械设备中常见的关键部件之一,其工作状态直接影响设备的性能和可靠性。因此,轴承故障的早期诊断对于设备的正常运行和维护具有重要意义。近年来,基于振动信号的轴承故障诊断成为了研究的热点之一。KAN: Kolmogorov-Arnold Network 是一种有效的处理方法。…...

【设计模式】JAVA Design Patterns——Factory Method(虚拟构造器模式)
🔍目的 为创建一个对象定义一个接口,但是让子类决定实例化哪个类。工厂方法允许类将实例化延迟到子类 🔍解释 真实世界例子 铁匠生产武器。精灵需要精灵武器,而兽人需要兽人武器。根据客户来召唤正确类型的铁匠。 通俗描述 它为类…...

Spring——依赖项
文章目录 依赖注入基于构造函数的依赖注入基于 Setter 的依赖注入依赖解析过程依赖注入的示例 依赖关系和配置详细信息直接值(原语、字符串等)idref标签References to Other Beans (对其他 Bean的引用)Inner Beans(内部…...

C语言 | Leetcode C语言题解之第119题杨辉三角II
题目: 题解: int* getRow(int rowIndex, int* returnSize) {*returnSize rowIndex 1;int* row malloc(sizeof(int) * (*returnSize));row[0] 1;for (int i 1; i < rowIndex; i) {row[i] 1LL * row[i - 1] * (rowIndex - i 1) / i;}return row…...

深入分析 Android Service (一)
文章目录 深入分析 Android Service (一)1. Android Service 设计说明1.1. Service 的类型1.2. Service 的生命周期1.3. 创建和启动 Service1.4. 绑定 Service1.5. ServiceConnection1.6. 前台 Service1.7. IntentService示例:创建和使用 IntentService 2. Service …...

英飞凌24GHz毫米波雷达-BGT24LTR11N16家用机器人应用
BGT24LTR11N16基础描述: 关于BGT24LTR11N16,它是一款用于信号生成和接收的硅锗雷达MMlC,工作频率为24.00GHz至24.25GHz ISM频段。它基于24GHz基本电压控制振荡器(VCO)。 这颗芯片是属于1T1R,也就是一发一收…...

17.js字符串
字符串创建 1.字面量创建 var 字符串名字符串 2.内部构造函数创建 var 字符串名new String(字符串) length属性 只能读取不能设置 var strabcdfegfglconsole.log(str.length) //10str.length5 console.log(str) //不能写 abcdfegfgl index属性 只能读不能设置 var strab…...

JS-51-Node.js10-yarn
一、yarn的简介 Yarn 是一款 JavaScript 的包管理工具(npm的代替方案),是 Facebook, Google, Exponent 和 Tilde 开发的一款新的 JavaScript 包管理工具。 正如 Yarn 官网的介绍,Yarn 的具有速度快 、安全 、可靠 的优点&#x…...

idea项目一直在build
IDEA项目一直在build的原因可能包括构建进程堆大小过小、缓存问题、依赖包下载缓慢或网络问题。12 构建进程堆大小过小:如果IDEA的构建进程堆大小设置得不够大,可能会导致构建过程缓慢或卡顿。解决方法是将构建进程堆大小参数扩大,例如将700…...

SpringBoot六种API请求参数读取方式
SpringBoot六种API请求参数读取方式 同步请求和异步请求 同步: 指单线程依次做几件事异步: 指多线程同时做几件事 同步请求: 指客户端浏览器只有一个主线程, 此线程负责页面的渲染和发出请求等操作, 如果此主线程发出请求的话则停止渲染而且会清空页面显示的内容 直到服务器响…...

WSDM2024推荐系统和LLM相关论文整理(二)
WSDM 2024接收的论文已经公布,全部收录的论文可前往地址 网址:https://www.wsdm-conference.org/2024/accepted-papers/ 其中推荐系统相关论文三十余篇,下文列举了部分论文的标题以及摘要,更多内容欢迎关注公众号【深度学习推荐算…...

Mybatis 查询TypeHandler使用,转译查询数据(逗号分隔转List)
创建自定义的Hanndler /*** Package: com.datalyg.common.core.handler* ClassName: CommaSeparatedStringTypeHandler* Author: dujiayu* Description: 用于mybatis 解析逗号拼接字符串* Date: 2024/5/29 10:03* Version: 1.0*/ public class CommaSeparatedStringTypeHandle…...

易查分小程序|如何开启个人密钥功能?
一般情况下发布查询,用姓名和手机尾号等作为查询条件就足够了,如果查询需要的私密性要求很高,可以使用易查分的【个人密钥】功能,下面就来教大家如何制作吧。 🔑个人密钥功能的特点: ✅学生家长可以自主修…...

NoSQL是什么?NoSQL数据库存在SQL注入攻击?
一、NoSQL是什么? NoSQL(Not Only SQL)是一种非关系型数据库的概念。与传统的关系型数据库不同,NoSQL数据库使用不同的数据模型来存储和检索数据。NOSQL数据库通常更适合处理大规模的非结构化和半结构化数据,且能够…...

成功解决“ImportError: cannot import name ‘mapping‘ from ‘collections‘”错误的全面指南
成功解决“ImportError: cannot import name ‘mapping’ from ‘collections’”错误的全面指南 成功解决“ImportError: cannot import name ‘mapping’ from ‘collections’”错误的全面指南 一、引言 在Python编程中,当我们尝试从某个模块中导入某个名称时&…...

apexcharts数据可视化之圆环柱状图
apexcharts数据可视化之圆环柱状图 有完整配套的Python后端代码。 本教程主要会介绍如下图形绘制方式: 基础圆环柱状图多组数据圆环柱状图图片背景自定义角度渐变半个圆环图虚线圆环图 基础圆环图 import ApexChart from react-apexcharts;export function Cir…...