支持的软件概述
有两种方法可以启用 Grove Vision AI 模块 V2:
使用 SenseCraft AI 无需编程快速入门
在本节中,我们将向您展示如何使用 SenseCraft AI 模型助手快速部署并观察结果,无需编写代码或使用其他开发板:
什么是 SenseCraft AI?

SenseCraft AI 使用户能够轻松地将大量公开可用的 AI 模型部署到他们的边缘设备上:
- reComputer (NVIDIA Jetson)
- Seeed Studio XIAO S3 板
- Vision AI 模块等
它提供了无缝且用户友好的体验,只需几次点击即可将公开的 AI 模型直接部署到您的边缘设备上。
它包括:
- 模型助手软件服务
- 设备工作空间软件服务
在本节中,我们将使用“模型助手”来启用模块。结合 SenseCraft AI 模型助手的功能,您可以轻松上传各种共创模型并直接观察结果。
使用 SenseCraft AI 模型助手快速入门
现在我们将快速使用 SenseCraft AI 启用模块,这只需要模块本身。
第一步:选择模型
首先,我们需要打开 SenseCraft AI 模型助手的主页面。
选择您想要部署的模型并点击进入。

您可以在此处查看该模型的描述,如果适合您,请点击右侧的 Deploy Model 按钮。

第二步:连接模块并上传合适的模型
请使用 Type-C 类型的线缆将 Grove Vision AI V2 连接到您的电脑,然后点击 Connect 按钮。

点击 Confirm 按钮。在页面左上角,您可以选择 USB Single Serial,然后点击 Connect 按钮。

请保持在此页面 1-2 分钟,直到模型成功上传。请注意,在此过程中切换到其他页面可能会导致上传失败(我们的团队正在积极解决此问题,很快将修复)。
第三步:观察结果
模型成功上传后,您将能够在左侧的预览中看到来自 Grove Vision AI V2 摄像头的实时画面。

我们可以看到在左侧的预览设置中,有两个可以更改的设置选项,用于优化模型的识别准确性。
- Confidence(置信度): 置信度是模型对其预测分配的确定性或概率水平。

- IoU(交并比): IoU 用于评估预测边界框与真实边界框的准确性。

:::提示
- Confidence(置信度): 置信度表示计算机视觉模型对其预测的确定程度。可以将其理解为百分比:置信度越高,模型越确定。
- IoU(交并比): IoU 衡量两个框之间的重叠程度。想象一下,您在图片中围绕一个物体画了一个框,而模型也画了一个框。IoU 告诉您两个框匹配的程度。IoU 越高,两个框越接近。 :::
在这一点上,您已经完成了模型上传并观察了结果。
使用 Seeed Studio XIAO 板连接 Arduino 编程
Arduino 库介绍
如果这是您第一次使用 Arduino,我们强烈建议您参考 Arduino 入门指南。
Grove Vision AI 使用 WiseEye2 HX6538 芯片,图像处理和模型推理均在 Grove Vision AI 本地完成,然后通过 IIC 或 UART 将结果输出到 XIAO。因此,该库的主要目的是处理 Grove Vision AI 的数据流,而不涉及模型推理或图像处理。该库的主要功能是处理 Grove Vision AI 的数据流,而不涉及模型推理或图像处理。
Grove Vision AI 通过 IIC 与 XIAO 通信,设备的 IIC 地址为 0x62
。图像信息通过 USB 串口传输。
功能
在开始开发代码之前,让我们先了解一下该库的可用功能。
-
bool begin(TwoWire *wire = &Wire, uint16_t address = I2C_ADDRESS, uint32_t wait_delay = 2, uint32_t clock = 400000)
—— 初始化 Grove Vision AI V2。输入参数:
TwoWire *wire
—— 指向 TwoWire 对象的指针,通常用于与 I2C 设备通信。uint16_t address
—— I2C 设备的地址,用于标识连接到 I2C 总线的特定设备。uint32_t wait_delay
—— 发送命令前等待响应的延迟时间(以毫秒为单位)。uint32_t clock
—— I2C 总线的时钟速率(以 Hz 为单位)。
返回值:
True
或False
。初始化成功返回 true,初始化失败返回 false。 -
int invoke(int times = 1, bool filter = 0, bool show = 0)
—— 用于向 Grove Vision AI V2 发送 INVOKE 命令,以启动模型调用、推理和识别。输入参数:
int times
—— 调用次数。fileter
—— 表示只有当最后结果与之前结果不同(通过几何和分数比较)时,事件回复才会发送。bool show
—— 表示只有当最后结果与之前结果不同(通过几何和分数比较)时,事件回复才会发送。
有关 Grove Vision AI 协议定义的更多信息,您可以阅读 协议文档。
返回值: CMD_OK
或 CMD_ETIMEDOUT
。如果模型成功启用,则返回 CMD_OK,否则返回 CMD_ETIMEDOUT。
-
int available()
—— 检查通过 IIC 从连接设备读取的数据字节数。输入参数: 无。
返回值: 可从设备读取的数据字节数。
-
int read(char *data, int length)
—— 通过 IIC 接口从 Grove Vision AI 读取数据。该函数的目的是将读取的数据填充到提供的数据指针指向的数组中。输入参数:
char *data
—— 用于存储数据的数组。int length
—— 要读取的数据长度。
返回值: 要读取的数据长度。
-
int write(const char *data, int length)
—— 通过 I2C 接口向指定设备写入数据。输入参数:
const char *data
—— 要写入的数据内容。int length
—— 要写入的数据长度。
返回值: 要写入的数据长度。
-
std::vector<boxes_t> &boxes() { return _boxes; }
—— 以框的形式输出结果。
typedef struct
{
uint16_t x; // 框中心的水平坐标
uint16_t y; // 框中心的垂直坐标
uint16_t w; // 识别框的宽度
uint16_t h; // 识别框的高度
uint8_t score; // 识别为目标的置信度
uint8_t target; // 目标
} boxes_t;
std::vector<classes_t> &classes() { return _classes; }
—— 以类别的形式输出结果。
typedef struct
{
uint8_t target; // 目标
uint8_t score; // 识别为目标的置信度
} classes_t;
std::vector<point_t> &points() { return _points; }
—— 以点的形式输出结果。
typedef struct
{
uint16_t x; // 识别点的水平坐标
uint16_t y; // 识别点的垂直坐标
uint16_t z; // 识别点的相对深度坐标
uint8_t score; // 识别为目标的置信度
uint8_t target; // 目标
} point_t;
这里的深度坐标是相对的,这并不意味着 Grove Vision AI 支持深度摄像头功能,而是算法计算了一个相对深度坐标,该坐标在某些模型中有效(例如,face-3d 模型)。
perf_t &perf() { return _perf; }
—— 图像处理和推理时间。
typedef struct
{
uint16_t prepocess; // 预处理时间
uint16_t inference; // 推理时间
uint16_t postprocess; // 后处理时间
} perf_t;
根据模型的不同,输出结果并不总是包含识别框和点的信息。
安装
既然您已经下载了 ZIP 库,请打开您的 Arduino IDE,点击 Sketch > Include Library > Add .ZIP Library。选择您刚刚下载的 ZIP 文件,如果库安装正确,您会在通知窗口中看到 Library added to your libraries,这意味着库已成功安装。

开始使用 Seeed Studio XIAO
如果您想要一个具有机器视觉功能的传感器原型,那么您可能需要考虑添加一个 XIAO。使用 XIAO 和 Grove Vision AI V2,您可以使用您想要的模型并快速将其部署到您的应用领域。
准备工作
步骤 1. 所需材料
在本教程中,我们将使用 XIAO ESP32S3 作为示例来介绍 Arduino 程序的使用。因此,我们建议您准备以下硬件。
Seeed Studio XIAO ESP32S3 | Grove Vision AI V2 | OV5647-62 FOV 摄像头模块 适用于 Raspberry Pi 3B+4B |
---|---|---|
![]() | ![]() | ![]() |
然后您需要通过排针连接 XIAO 和 Grove Vision AI V2(或者使用扩展板和 Grove 接口)。

请注意连接方向,Grove Vision AI 的 Type-C 接口应与 XIAO 的 Type-C 接口方向一致。
步骤 2. 启动 Arduino 应用程序。

步骤 3. 选择您的开发板型号并将其添加到 Arduino IDE。
以下是支持 Grove Vision AI V2 示例的开发板列表,您可以选择您想要使用的开发板来完成接下来的示例。在本教程中,将以 XIAO ESP32S3 为例。
-
如果您想使用 Seeed Studio XIAO SAMD21 进行后续操作,请参考 本教程 完成添加。
-
如果您想使用 Seeed Studio XIAO RP2040 进行后续操作,请参考 本教程 完成添加。
-
如果您想使用 Seeed Studio XIAO nRF52840 进行后续操作,请参考 本教程 完成添加。
-
如果您想使用 Seeed Studio XIAO ESP32C3 进行后续操作,请参考 本教程 完成添加。
-
如果您想使用 Seeed Studio XIAO ESP32S3 进行后续操作,请参考 本教程 完成添加。
-
如果您想使用 Seeeduino V4.3 进行后续操作,请参考 本教程 完成添加。
步骤 4. 安装 ArduinoJSON 库。
进入 Sketch 菜单,然后选择 Include Library > Manage Libraries...。这将打开库管理器。在库管理器顶部的搜索栏中输入 ArduinoJSON。搜索结果将列出 ArduinoJSON 库。库旁边会有一个安装按钮。点击安装按钮,Arduino IDE 将自动下载并安装该库到您的 Arduino 开发环境中。

示例 1. 使用 XIAO 获取识别结果
以下步骤是一个简单的示例,帮助您获取并解析 Grove Vision AI V2 报告的识别信息。
#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);
}
}
}
步骤说明
此 Arduino 程序使用 Seeed_Arduino_SSCMA 库与 Grove Vision AI V2 模块进行交互。在 setup()
函数中,初始化 AI 模块并启动串行通信。
在 loop()
函数中,程序反复调用 invoke()
方法,使用 Grove Vision AI V2 模块内置算法进行推理。推理成功后,程序会将性能指标打印到串行监视器,包括预处理、推理和后处理时间。
程序处理并打印推理结果的详细信息,包括:
- 边界框 (
boxes()
):标识检测到的对象的位置和尺寸,以 x 和 y 坐标、宽度和高度的形式表示。 - 分类 (
classes()
):标识检测到的对象类别及其置信度分数。 - 点 (
points()
):表示检测到的对象的特定特征或关键点,以及它们的 x 和 y 坐标及置信度分数。
这些结果提供了 AI 模块检测到的对象、它们的位置、大小以及每次检测或分类的置信度级别的洞察。输出结果打印到串行监视器以供进一步分析或调试。
效果
我们仍然使用手势检测模型。在上传应用程序后,请打开串行监视器并将串行监视器的波特率设置为 9600。请准备好您的“石头-剪刀-布”手势,并将其对准摄像头的识别区域,串行监视器将输出识别结果。

示例 2. 通过 XIAO 发送控制命令
Grove Vision AI V2 支持通过 UART 协议进行通信,并且通过使用内置协议,可以操作 Grove Vision AI V2 的 Himax WE2 芯片。以下示例程序展示了如何使用 XIAO 通过串口与 Grove Vision AI V2 进行通信。
#include <Arduino.h>
#include <Wire.h>
#include <Seeed_Arduino_SSCMA.h>
SSCMA AI;
void setup()
{
// put your setup code here, to run once:
Wire.begin();
Serial.begin(115200);
while (!Serial)
delay(1000);
Serial.println("Proxy start");
}
char buf[512];
void loop()
{
int s_len = Serial.available();
if (s_len)
{
int len = Serial.readBytes((char *)buf, s_len);
AI.write(buf, len);
}
int t_len = AI.available();
if (t_len)
{
if (t_len > 512)
{
t_len = 512;
}
AI.read(buf, t_len);
Serial.write(buf, t_len);
}
}
步骤说明
此 Arduino 程序通过串行控制台与 Grove Vision AI V2 模块建立通信接口,利用 Seeed Studio 机器学习框架 SSCMA。程序设计用于通过串行命令向 Grove Vision AI V2 模块传递数据并接收数据。
以下是程序的详细说明:
在 setup()
函数中:
- 使用
Wire.begin()
初始化 I2C 通信协议,以便与 Grove Vision AI V2 模块通信。 - 设置串行通信的波特率为 115200。
- 程序等待串行连接激活后,向串行监视器输出 "Proxy start",表示代理通信通道已准备好。
在 loop()
函数中:
- 程序通过
Serial.available()
检查是否有传入的串行数据。如果有数据,则将其读取到名为buf
的缓冲区中。 - 收集到的数据随后通过
AI.write()
方法发送到 Grove Vision AI V2 模块。 - 接下来,程序通过
AI.available()
检查 Grove Vision AI V2 模块是否有数据返回。 - 如果 Grove Vision AI V2 模块发送了数据,程序使用
AI.read()
将数据读取到缓冲区buf
中,并确保数据不会超过 512 字节的缓冲区大小。 - 最后,从 Grove Vision AI V2 模块接收到的数据通过
Serial.write()
发送回串行控制台,完成串行接口与 Vision AI 模块之间的双向通信。
此设置允许与 Grove Vision AI V2 模块进行交互式通信,使用户能够通过串行连接向模块发送指令并接收数据。
资源
故障排查
问题1:为什么在使用 XIAO ESP32C3 成功上传 Demo1 的代码后,我在端口上看不到识别结果?
如果您使用的是 Arduino IDE 1.xx 版本,请在按下 C3 的复位键后重新打开串行监视器以查看结果。如果您使用的是 Arduino 2.xx 版本,按下复位键后消息会在串行监视器中刷新。
技术支持与产品讨论
感谢您选择我们的产品!我们为您提供多种支持渠道,以确保您在使用我们的产品时获得顺畅的体验。我们提供多种沟通方式,以满足不同的偏好和需求。