Grove Vision AI V2 图像处理模块开箱测评

摘要

今天教大家快速上手 Grove Vision AI V2 图像处理模块,我们将一起探讨如何利用 SenseCraft 部署 AI 模型,和如何通过 XIAO ESP32C3 调用这些模型,轻松实现智能视觉功能!

原文链接:

FreakStudio的博客

往期推荐:

学嵌入式的你,还不会面向对象??!

全网最适合入门的面向对象编程教程: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 并行计算

一文搞懂 CM3 单片机调试原理

肝了半个月,嵌入式技术栈大汇总出炉

电子计算机类比赛的“武林秘籍”

一个MicroPython的开源项目集锦:awesome-micropython,包含各个方面的Micropython工具库

Avnet ZUBoard 1CG开发板—深度学习新选择

正文部分

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);
}
}
}

接下来我们对代码进行简单分析:

  1. 先导入库函数 <Seeed_Arduino_SSCMA.h>

    • SSCAM 库的主要目的是处理 Grove Vision AI 的数据流,而不涉及模型推理或图像处理。
  2. 初始化部分

    • SSCMA AI;:创建一个名为 AI 的 SSCMA 对象,用于与 Grove Vision AI 进行通信。
    • void setup():在 setup() 函数中,首先使用 AI.begin() 初始化 Grove Vision AI 模块。然后,通过 Serial.begin(9600) 初始化串口通信,以便将结果输出到串口监视器。
  3. 主循环

    • 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 部署模型到Grove Vision AI V2图像处理模块的更多相关文章

  1. 经典分类CNN模型系列其五:Inception v2与Inception v3

    经典分类CNN模型系列其五:Inception v2与Inception v3 介绍 Inception v2与Inception v3被作者放在了一篇paper里面,因此我们也作为一篇blog来对其 ...

  2. SSIS2012 项目部署模型

    SSIS 2012 支持两种部署模型:项目部署模型和包部署模型. 使用项目部署模型可以将项目部署到 Integration Services 服务器,使用包部署模型可以将单独的包部署到Integrat ...

  3. SSIS 项目部署模型

    微软 BI 系列随笔 - SSIS 2012 基础 - SSIS 项目部署模型 关于部署 SSIS 2012 支持两种部署模型:项目部署模型和包部署模型. 使用项目部署模型可以将项目部署到 Integ ...

  4. 如何将同一云服务下的虚拟机从经典部署模型迁移到 Azure Resource Manager

    适用场景 用户希望将特定云服务下的所有虚拟机从经典部署模型(以下简称:ASM)迁移到 Azure Resource Manager(以下简称:ARM). Note 如果云服务下使用 VNET 也希望将 ...

  5. 如何将同一 VNET 下的虚拟机从经典部署模型迁移到 Azure Resource Manager

    本文内容 适用场景 解决方案 适用场景 用户拥有多个云服务但是在同一个 VNET 下,希望将这些虚拟机从经典部署模型(以下简称:ASM)迁移到 Azure Resource Manager(以下简称: ...

  6. 将 ExpressRoute 线路从经典部署模型转移到 Resource Manager 部署模型

    本文概述将 Azure ExpressRoute 线路从经典部署模型转移到 Azure Resource Manager 部署模型的效果. Azure 当前使用两种部署模型:Resource Mana ...

  7. SSIS教程:创建简单的ETL包 -- 6. 对项目部署模型使用参数(Using Parameters with the Project Deployment Model)

    在本课中,将修改在第 5 课: 添加包部署模型的包配置中创建的包,以便使用项目部署模型.您将使用一个参数替换该配置值,以便指定示例数据位置.还可以复制本教程附带的已完成的 Lesson 5 包. 使用 ...

  8. SSIS教程:创建简单的ETL包 -- 5. 添加包部署模型的包配置(Adding Package Configurations for the Package Deployment Model)

    包配置允许您从开发环境的外部设置运行时属性和变量. 配置允许您开发灵活且易于部署和分发的包.Microsoft Integration Services 提供了以下配置类型: XML 配置文件 环境变 ...

  9. 使用 Azure PowerShell 将 IaaS 资源从经典部署模型迁移到 Azure Resource Manager

    以下步骤演示了如何使用 Azure PowerShell 命令将基础结构即服务 (IaaS) 资源从经典部署模型迁移到 Azure Resource Manager 部署模型. 也可根据需要通过 Az ...

  10. 规划将 IaaS 资源从经典部署模型迁移到 Azure Resource Manager

    尽管 Azure 资源管理器提供了许多精彩功能,但请务必计划迁移,以确保一切顺利进行. 花时间进行规划可确保执行迁移活动时不会遇到问题. Note 以下指导的主要参与者为 Azure 客户顾问团队,以 ...

随机推荐

  1. SDL3 入门(3):三角形

    SDL3 提供了 SDL_RenderGeometry 函数绘制几何图形,用法和 OpenGL 差不多,先定义顶点数据,然后根据顶点数据绘制几何图形. 绘制三角形的代码如下: std::array&l ...

  2. 初学者必读:如何使用 Nuxt 中间件简化网站开发

    title: 初学者必读:如何使用 Nuxt 中间件简化网站开发 date: 2024/6/24 updated: 2024/6/24 author: cmdragon excerpt: 本文概述了N ...

  3. 实验8.Vlan Hybrid实验

    # 实验8.Vlan Hybrid实验 本实验用于测试华为独有的混合式接口类型hybrid 实验组 配置交换机 对交换机sw1与sw2做具体配置 SW1 vlan ba 10 20 100 int g ...

  4. [HTTP] GET请求的body能否携带数据?

    在与后端对接口的时候,有个GET分页接口,需要传pageSize,currentPage等参数,这种不敏感的数据其实直接拼接在url上面就好了,但是后端可能出于开发习惯就把接口的这些参数放在了body ...

  5. .net入行三年的感想回顾

    从21年毕业到现在,还差几天就三年了 工作后才知道,工作年限分为1年以下 .3~5年.5~10年.晋升老板,每段都有每段的故事和总结 回顾下我的前三年工作心路,思考下未来发展之路(emmm,我是觉得我 ...

  6. Unity 中关于SubMesh的拾取问题

    问题背景 最近在开发一个功能,钻孔功能,每一层(段)都需要单独拾取,显示不同的颜色,使用不同材质 问题分析 对于这个功能,由于上述需求,很容易想到用submesh实现,但是主要问题是在于对于Subme ...

  7. 微软账号密码修改后提示密码错误的解决方法(远程桌面&smb共享访问等)

    众所周知,自从微软将Microsoft账户与Windows账号强制绑定后,使用起来便一直有诸多困难,在Microsoft Support和搜索引擎长期搜索解决方案未果,今天偶然在一个佬的博客翻到了这个 ...

  8. node sass

    registry=https://registry.npmmirror.com/ sass_binary_site=https://cdn.npmmirror.com/mirrors/node-sas ...

  9. 当项目中使用到缓存,我们是选择 Redis 还是 Memcached ,为什么?

    举一些场景: 一.比如实现一个简单的日志收集功能或发送大量短信.邮件的功能,实现方式是先将数据收集到队列中,然后有一个定时任务去消耗队列,处理该做的事情. 直接使用 Redis 的 lpush,rpo ...

  10. [oeasy]python0078_变量部分总结_variable_summary

    删除变量 回忆上次内容 上次研究了变量的死 有生就有死 原本的死是在程序退出的时候自动执行的 也可以手动给变量执行死刑 del     del(a)之后 dir()就无法在当前作用域(scope)内观 ...