SenseCraft 部署模型到Grove Vision AI V2图像处理模块
摘要
今天教大家快速上手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 石头剪刀布分类模型测试
上代码
#includeSSCMA 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); } }}
接下来我们对代码进行简单分析:
-
先导入库函数
-
SSCAM库的主要目的是处理 Grove Vision AI 的数据流,而不涉及模型推理或图像处理。
-
初始化部分:
-
SSCMA AI;:创建一个名为AI的SSCMA对象,用于与Grove Vision AI进行通信。
-
void setup():在setup()函数中,首先使用AI.begin()初始化Grove Vision AI模块。然后,通过Serial.begin(9600)初始化串口通信,以便将结果输出到串口监视器。
-
主循环:
-
AI.points():获取推理结果中的所有关键点信息,并循环输出每个关键点的信息,包括目标、得分和位置(x, y)。
-
AI.classes():获取推理结果中的所有分类信息,并循环输出每个分类的信息,包括目标和得分。
-
AI.boxes():获取推理结果中的所有检测框,并循环输出每个检测框的信息,包括目标、得分、位置(x, y)和大小(w, h)。
-
AI.perf():获取推理过程的性能信息,包括预处理(prepocess)、推理(inference)和后处理(postprocess)的时间。
-
void loop():loop()函数会反复执行,主要用来不断调用Grove Vision AI进行推理,并输出结果。
-
if (!AI.invoke()):调用AI.invoke()进行推理,如果推理成功(即invoke()返回false),则开始处理推理结果。
-
性能信息输出:
-
检测框输出:
-
分类结果输出:
-
关键点输出:
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:表示边界框的宽度和高度





