SenseCraft 部署模型到Grove Vision AI V2图像处理模块
Grove Vision AI V2 图像处理模块开箱测评
摘要
今天教大家快速上手 Grove Vision AI V2 图像处理模块,我们将一起探讨如何利用 SenseCraft 部署 AI 模型,和如何通过 XIAO ESP32C3 调用这些模型,轻松实现智能视觉功能!
原文链接:
往期推荐:
全网最适合入门的面向对象编程教程:00 面向对象设计方法导论
全网最适合入门的面向对象编程教程:01 面向对象编程的基本概念
全网最适合入门的面向对象编程教程:02 类和对象的 Python 实现-使用 Python 创建类
全网最适合入门的面向对象编程教程:03 类和对象的 Python 实现-为自定义类添加属性
全网最适合入门的面向对象编程教程:04 类和对象的Python实现-为自定义类添加方法
全网最适合入门的面向对象编程教程:05 类和对象的Python实现-PyCharm代码标签
全网最适合入门的面向对象编程教程:06 类和对象的Python实现-自定义类的数据封装
全网最适合入门的面向对象编程教程:07 类和对象的Python实现-类型注解
全网最适合入门的面向对象编程教程:08 类和对象的Python实现-@property装饰器
全网最适合入门的面向对象编程教程:09 类和对象的Python实现-类之间的关系
全网最适合入门的面向对象编程教程:10 类和对象的Python实现-类的继承和里氏替换原则
全网最适合入门的面向对象编程教程:11 类和对象的Python实现-子类调用父类方法
全网最适合入门的面向对象编程教程:12 类和对象的Python实现-Python使用logging模块输出程序运行日志
全网最适合入门的面向对象编程教程:13 类和对象的Python实现-可视化阅读代码神器Sourcetrail的安装使用
全网最适合入门的面向对象编程教程:全网最适合入门的面向对象编程教程:14 类和对象的Python实现-类的静态方法和类方法
全网最适合入门的面向对象编程教程:15 类和对象的 Python 实现-__slots__魔法方法
全网最适合入门的面向对象编程教程:16 类和对象的Python实现-多态、方法重写与开闭原则
全网最适合入门的面向对象编程教程:17 类和对象的Python实现-鸭子类型与“file-like object“
全网最适合入门的面向对象编程教程:18 类和对象的Python实现-多重继承与PyQtGraph串口数据绘制曲线图
全网最适合入门的面向对象编程教程:19 类和对象的 Python 实现-使用 PyCharm 自动生成文件注释和函数注释
全网最适合入门的面向对象编程教程:20 类和对象的Python实现-组合关系的实现与CSV文件保存
全网最适合入门的面向对象编程教程:21 类和对象的Python实现-多文件的组织:模块module和包package
全网最适合入门的面向对象编程教程:22 类和对象的Python实现-异常和语法错误
全网最适合入门的面向对象编程教程:23 类和对象的Python实现-抛出异常
全网最适合入门的面向对象编程教程:24 类和对象的Python实现-异常的捕获与处理
全网最适合入门的面向对象编程教程:25 类和对象的Python实现-Python判断输入数据类型
全网最适合入门的面向对象编程教程:26 类和对象的Python实现-上下文管理器和with语句
全网最适合入门的面向对象编程教程:27 类和对象的Python实现-Python中异常层级与自定义异常类的实现
全网最适合入门的面向对象编程教程:28 类和对象的Python实现-Python编程原则、哲学和规范大汇总
全网最适合入门的面向对象编程教程:29 类和对象的Python实现-断言与防御性编程和help函数的使用
全网最适合入门的面向对象编程教程:30 Python的内置数据类型-object根类
全网最适合入门的面向对象编程教程:31 Python的内置数据类型-对象Object和类型Type
全网最适合入门的面向对象编程教程:32 Python的内置数据类型-类Class和实例Instance
全网最适合入门的面向对象编程教程:33 Python的内置数据类型-对象Object和类型Type的关系
全网最适合入门的面向对象编程教程:34 Python的内置数据类型-Python常用复合数据类型:元组和命名元组
全网最适合入门的面向对象编程教程:35 Python的内置数据类型-文档字符串和__doc__属性
全网最适合入门的面向对象编程教程:36 Python的内置数据类型-字典
更多精彩内容可看:
给你的 Python 加加速:一文速通 Python 并行计算
一个MicroPython的开源项目集锦:awesome-micropython,包含各个方面的Micropython工具库
正文部分
1.硬件设备介绍
首先,让我们快速了解一下我们即将使用的硬件设备。
我们使用的视觉处理模块为 Grove Vision AI V2 图像处理模块,具有如下特点:
Grove Vision AI 模块会本地处理图像并执行模型推理,然后将结果通过 IIC 或 UART 发送到 XIAO。XIAO 需要接收并解析来自 Grove Vision AI 的数据,根据这些结果执行相应的操作,如控制 LED、驱动电机或触发其他外设。这使得 XIAO 成为系统的执行单元,响应 Grove Vision AI 传递的检测结果。
2.SenseCraft 部署模型
2.1 SenseCraft 平台简介
Seeed SenseCraft Model Assistant(或简称 SSCMA)是一个专注于嵌入式 AI 的开源项目。针对真实场景优化了 OpenMMLab 的优秀算法,使实现更加人性化,在嵌入式设备上实现更快、更准确的推理。
目前支持以下方向的算法:
SenseCraft AI 提供了无缝且用户友好的体验,可以帮助用户轻松地将大量公开可用的 AI 模型部署到他们的边缘设备上。
2.2 部署流程
使用 USB 链接模块和电脑,然后在 SenseCraft 网站上进行部署:
2.3 预览模型识别效果
2.4 SenseCraft 平台优势
- 降低 AI 入门门槛:SenseCraft 的平台设计简化了 AI 模型开发的复杂性,使得初学者也能快速上手
- 广泛的硬件兼容性:支持多种 Seeed 硬件产品,用户可以根据项目需求选择适合的设备
- 边缘计算:本地推理能力减少了对网络的依赖,提高了应用的实时性和安全性
2.5 石头剪刀布分类模型测试
上代码
#include <Seeed_Arduino_SSCMA.h>
SSCMA AI;
void setup()
{
AI.begin();
Serial.begin(9600);
}
void loop()
{
if (!AI.invoke())
{
Serial.println("invoke success");
Serial.print("perf: prepocess=");
Serial.print(AI.perf().prepocess);
Serial.print(", inference=");
Serial.print(AI.perf().inference);
Serial.print(", postpocess=");
Serial.println(AI.perf().postprocess);
for (int i = 0; i < AI.boxes().size(); i++)
{
Serial.print("Box[");
Serial.print(i);
Serial.print("] target=");
Serial.print(AI.boxes()[i].target);
Serial.print(", score=");
Serial.print(AI.boxes()[i].score);
Serial.print(", x=");
Serial.print(AI.boxes()[i].x);
Serial.print(", y=");
Serial.print(AI.boxes()[i].y);
Serial.print(", w=");
Serial.print(AI.boxes()[i].w);
Serial.print(", h=");
Serial.println(AI.boxes()[i].h);
}
for (int i = 0; i < AI.classes().size(); i++)
{
Serial.print("Class[");
Serial.print(i);
Serial.print("] target=");
Serial.print(AI.classes()[i].target);
Serial.print(", score=");
Serial.println(AI.classes()[i].score);
}
for (int i = 0; i < AI.points().size(); i++)
{
Serial.print("Point[");
Serial.print(i);
Serial.print("] target=");
Serial.print(AI.points()[i].target);
Serial.print(", score=");
Serial.print(AI.points()[i].score);
Serial.print(", x=");
Serial.print(AI.points()[i].x);
Serial.print(", y=");
Serial.println(AI.points()[i].y);
}
}
}
接下来我们对代码进行简单分析:
先导入库函数 <Seeed_Arduino_SSCMA.h>
- SSCAM 库的主要目的是处理 Grove Vision AI 的数据流,而不涉及模型推理或图像处理。
初始化部分:
SSCMA AI;
:创建一个名为AI
的 SSCMA 对象,用于与 Grove Vision AI 进行通信。void setup()
:在setup()
函数中,首先使用AI.begin()
初始化 Grove Vision AI 模块。然后,通过Serial.begin(9600)
初始化串口通信,以便将结果输出到串口监视器。
主循环:
void loop()
:loop()
函数会反复执行,主要用来不断调用 Grove Vision AI 进行推理,并输出结果。if (!AI.invoke())
:调用AI.invoke()
进行推理,如果推理成功(即invoke()
返回false
),则开始处理推理结果。- 性能信息输出:
AI.perf()
:获取推理过程的性能信息,包括预处理(prepocess
)、推理(inference
)和后处理(postprocess
)的时间。
- 检测框输出:
AI.boxes()
:获取推理结果中的所有检测框,并循环输出每个检测框的信息,包括目标、得分、位置(x, y)和大小(w, h)。
- 分类结果输出:
AI.classes()
:获取推理结果中的所有分类信息,并循环输出每个分类的信息,包括目标和得分。
- 关键点输出:
AI.points()
:获取推理结果中的所有关键点信息,并循环输出每个关键点的信息,包括目标、得分和位置(x, y)。
2.6 串口输出消息解析
invoke success
:这行表明 AI.invoke()
方法调用成功,即图像识别过程已经完成。
perf: prepocess=7, inference=80, postpocess=0
:这行显示了识别过程中的三个关键性能指标:
Box[0] target=1, score=81, x=209, y=161, w=63, h=114
:这行表示检测到的第一个边界框(box)的信息:
网站链接:
SenseCraft 平台:https://sensecraft.seeed.cc/ai/#/model
SenseCraft 部署模型到Grove Vision AI V2图像处理模块的更多相关文章
- 经典分类CNN模型系列其五:Inception v2与Inception v3
经典分类CNN模型系列其五:Inception v2与Inception v3 介绍 Inception v2与Inception v3被作者放在了一篇paper里面,因此我们也作为一篇blog来对其 ...
- SSIS2012 项目部署模型
SSIS 2012 支持两种部署模型:项目部署模型和包部署模型. 使用项目部署模型可以将项目部署到 Integration Services 服务器,使用包部署模型可以将单独的包部署到Integrat ...
- SSIS 项目部署模型
微软 BI 系列随笔 - SSIS 2012 基础 - SSIS 项目部署模型 关于部署 SSIS 2012 支持两种部署模型:项目部署模型和包部署模型. 使用项目部署模型可以将项目部署到 Integ ...
- 如何将同一云服务下的虚拟机从经典部署模型迁移到 Azure Resource Manager
适用场景 用户希望将特定云服务下的所有虚拟机从经典部署模型(以下简称:ASM)迁移到 Azure Resource Manager(以下简称:ARM). Note 如果云服务下使用 VNET 也希望将 ...
- 如何将同一 VNET 下的虚拟机从经典部署模型迁移到 Azure Resource Manager
本文内容 适用场景 解决方案 适用场景 用户拥有多个云服务但是在同一个 VNET 下,希望将这些虚拟机从经典部署模型(以下简称:ASM)迁移到 Azure Resource Manager(以下简称: ...
- 将 ExpressRoute 线路从经典部署模型转移到 Resource Manager 部署模型
本文概述将 Azure ExpressRoute 线路从经典部署模型转移到 Azure Resource Manager 部署模型的效果. Azure 当前使用两种部署模型:Resource Mana ...
- SSIS教程:创建简单的ETL包 -- 6. 对项目部署模型使用参数(Using Parameters with the Project Deployment Model)
在本课中,将修改在第 5 课: 添加包部署模型的包配置中创建的包,以便使用项目部署模型.您将使用一个参数替换该配置值,以便指定示例数据位置.还可以复制本教程附带的已完成的 Lesson 5 包. 使用 ...
- SSIS教程:创建简单的ETL包 -- 5. 添加包部署模型的包配置(Adding Package Configurations for the Package Deployment Model)
包配置允许您从开发环境的外部设置运行时属性和变量. 配置允许您开发灵活且易于部署和分发的包.Microsoft Integration Services 提供了以下配置类型: XML 配置文件 环境变 ...
- 使用 Azure PowerShell 将 IaaS 资源从经典部署模型迁移到 Azure Resource Manager
以下步骤演示了如何使用 Azure PowerShell 命令将基础结构即服务 (IaaS) 资源从经典部署模型迁移到 Azure Resource Manager 部署模型. 也可根据需要通过 Az ...
- 规划将 IaaS 资源从经典部署模型迁移到 Azure Resource Manager
尽管 Azure 资源管理器提供了许多精彩功能,但请务必计划迁移,以确保一切顺利进行. 花时间进行规划可确保执行迁移活动时不会遇到问题. Note 以下指导的主要参与者为 Azure 客户顾问团队,以 ...
随机推荐
- SDL3 入门(3):三角形
SDL3 提供了 SDL_RenderGeometry 函数绘制几何图形,用法和 OpenGL 差不多,先定义顶点数据,然后根据顶点数据绘制几何图形. 绘制三角形的代码如下: std::array&l ...
- 初学者必读:如何使用 Nuxt 中间件简化网站开发
title: 初学者必读:如何使用 Nuxt 中间件简化网站开发 date: 2024/6/24 updated: 2024/6/24 author: cmdragon excerpt: 本文概述了N ...
- 实验8.Vlan Hybrid实验
# 实验8.Vlan Hybrid实验 本实验用于测试华为独有的混合式接口类型hybrid 实验组 配置交换机 对交换机sw1与sw2做具体配置 SW1 vlan ba 10 20 100 int g ...
- [HTTP] GET请求的body能否携带数据?
在与后端对接口的时候,有个GET分页接口,需要传pageSize,currentPage等参数,这种不敏感的数据其实直接拼接在url上面就好了,但是后端可能出于开发习惯就把接口的这些参数放在了body ...
- .net入行三年的感想回顾
从21年毕业到现在,还差几天就三年了 工作后才知道,工作年限分为1年以下 .3~5年.5~10年.晋升老板,每段都有每段的故事和总结 回顾下我的前三年工作心路,思考下未来发展之路(emmm,我是觉得我 ...
- Unity 中关于SubMesh的拾取问题
问题背景 最近在开发一个功能,钻孔功能,每一层(段)都需要单独拾取,显示不同的颜色,使用不同材质 问题分析 对于这个功能,由于上述需求,很容易想到用submesh实现,但是主要问题是在于对于Subme ...
- 微软账号密码修改后提示密码错误的解决方法(远程桌面&smb共享访问等)
众所周知,自从微软将Microsoft账户与Windows账号强制绑定后,使用起来便一直有诸多困难,在Microsoft Support和搜索引擎长期搜索解决方案未果,今天偶然在一个佬的博客翻到了这个 ...
- node sass
registry=https://registry.npmmirror.com/ sass_binary_site=https://cdn.npmmirror.com/mirrors/node-sas ...
- 当项目中使用到缓存,我们是选择 Redis 还是 Memcached ,为什么?
举一些场景: 一.比如实现一个简单的日志收集功能或发送大量短信.邮件的功能,实现方式是先将数据收集到队列中,然后有一个定时任务去消耗队列,处理该做的事情. 直接使用 Redis 的 lpush,rpo ...
- [oeasy]python0078_变量部分总结_variable_summary
删除变量 回忆上次内容 上次研究了变量的死 有生就有死 原本的死是在程序退出的时候自动执行的 也可以手动给变量执行死刑 del del(a)之后 dir()就无法在当前作用域(scope)内观 ...