当前位置:首页 > 物联网 > Freak嵌入式

摘要

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

正文部分

1.硬件设备介绍

首先,让我们快速了解一下我们即将使用的硬件设备。

我们使用的视觉处理模块为Grove Vision AI V2 图像处理模块,具有如下特点:

  • 强大的 AI 处理能力:采用 WiseEye2 HX6538 处理器,配备双核 Arm Cortex-M55 和集成 Arm Ethos-U55 神经网络单元

  • 多功能 AI 模型支持:轻松部署 SenseCraft AI 的现成或自定义 AI 模型,包括 Mobilenet V1、V2、Efficientnet-lite、Yolo v5 和 v8。支持 TensorFlow 和 PyTorch 框架

  • 丰富的外设设备:包括 PDM 麦克风、SD 卡插槽、Type-C、Grove 接口和其他外设

  • 高兼容性:兼容XIAO系列、Arduino、Raspberry Pi、ESP开发板,便于进一步开发

  • 完全开源:所有代码、设计文件和原理图均可供修改和使用

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 的优秀算法,使实现更加人性化,在嵌入式设备上实现更快、更准确的推理。

目前支持以下方向的算法:

  • 异常检测:在现实世界中,异常数据往往很难识别,即使可以识别,也需要非常高的成本。异常检测算法以低成本的方式收集正常数据,正常数据之外的任何内容都被视为异常

  • 计算机视觉:例如目标检测、图像分类、图像分割和姿态估计。SSCMA优化了这些计算机视觉算法,并在低端设备中实现良好的运行速度和精度

  • 特定场景:SSCMA针对特定的生产环境提供定制场景,如模拟乐器的识别、传统数字仪表的识别、音频分类等

SenseCraft AI提供了无缝且用户友好的体验,可以帮助用户轻松地将大量公开可用的AI模型部署到他们的边缘设备上。

2.2 部署流程

使用USB链接模块和电脑,然后在SenseCraft网站上进行部署:

2.3 预览模型识别效果

2.4 SenseCraft平台优势

  • 降低AI入门门槛:SenseCraft的平台设计简化了AI模型开发的复杂性,使得初学者也能快速上手

  • 广泛的硬件兼容性:支持多种Seeed硬件产品,用户可以根据项目需求选择适合的设备

  • 边缘计算:本地推理能力减少了对网络的依赖,提高了应用的实时性和安全性

2.5 石头剪刀布分类模型测试

上代码

#include  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. 先导入库函数

    1. SSCAM库的主要目的是处理 Grove Vision AI 的数据流,而不涉及模型推理或图像处理。

  2. 初始化部分

    1. SSCMA AI;:创建一个名为AI的SSCMA对象,用于与Grove Vision AI进行通信。

    2. void setup():在setup()函数中,首先使用AI.begin()初始化Grove Vision AI模块。然后,通过Serial.begin(9600)初始化串口通信,以便将结果输出到串口监视器。

  3. 主循环

    • AI.points():获取推理结果中的所有关键点信息,并循环输出每个关键点的信息,包括目标、得分和位置(x, y)。

    • AI.classes():获取推理结果中的所有分类信息,并循环输出每个分类的信息,包括目标和得分。

    • AI.boxes():获取推理结果中的所有检测框,并循环输出每个检测框的信息,包括目标、得分、位置(x, y)和大小(w, h)。

    • AI.perf():获取推理过程的性能信息,包括预处理(prepocess)、推理(inference)和后处理(postprocess)的时间。

    1. void loop():loop()函数会反复执行,主要用来不断调用Grove Vision AI进行推理,并输出结果。

    2. if (!AI.invoke()):调用AI.invoke()进行推理,如果推理成功(即invoke()返回false),则开始处理推理结果。

    3. 性能信息输出

    4. 检测框输出

    5. 分类结果输出

    6. 关键点输出

2.6 串口输出消息解析

invoke success:这行表明AI.invoke()方法调用成功,即图像识别过程已经完成。

perf: prepocess=7, inference=80, postpocess=0:这行显示了识别过程中的三个关键性能指标:

  • prepocess:表示预处理阶段的时间

  • inference:表示推理(即识别)阶段的时间

  • postprocess:表示后处理阶段的时间。

Box[0] target=1, score=81, x=209, y=161, w=63, h=114:这行表示检测到的第一个边界框(box)的信息:

  • target=1:表示检测到的目标类别

  • score=81:表示检测到的目标的可信度(分数)

  • x=209, y=161:表示边界框的左上角坐标

  • w=63, h=114:表示边界框的宽度和高度


本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
关闭