在 VEXcode V5 C++ 中使用 AI 视觉传感器

本文概述了可在 Python 中使用 AI 视觉传感器的函数,以及如何使用它们的简单说明。 您将学习使用AI视觉传感器过程中的四个步骤:获取数据、查看获取的对象数量、从数据中选择要使用的对象以及从对象中提取哪些数据。

使用AI视觉传感器获取视觉数据

为了从周围环境收集信息,人工智能视觉传感器会拍摄当前所看到的图像。 它用指定的视觉签名 识别的任何对象都存储在 AI 视觉传感器内部,然后可供其他功能使用。

.takeSnapshot

任何 视觉签名 都需要先进行配置,然后才能用作参数。 使用该方法时,将签名参数指定为传感器的名称,双下划线,后跟 视觉签名的 名称。

实用程序 exm.PNG

AIVision6.takeSnapshot(AIVision6__Blue)
AIVision6.takeSnapshot(AIVision6__Red)
AIVision6.takeSnapshot(AIVision6__Green)

例子

在此示例中,采用 方法来搜索与“Blue” Visual Signature对应的任何对象。 然后,代码将显示为该 视觉签名找到的对象的计数。

int main() {
while (true) {
// 拍摄快照以检查检测到的对象
AIVision6.takeSnapshot(Blue);

// 清除屏幕/重置,以便我们可以显示新信息
Brain.Screen.clearScreen();
Brain.Screen.setCursor(1, 1);

// 打印检测到的物体数量
Brain.Screen.print("object count: %d", AIVision6.objectCount);

等待(0.5,秒);
}
}

确定检测到多少个物体

由于 .takeSnapshot 方法可以一次检测具有相同 Visual Signature 的多个对象,因此您可以使用 .objectCount 属性了解已检测到的对象数量。

Brain.Screen.Print(“%d”,AIVision1.objectCount)

例子

在此示例中, .objectCount 属性用于检查在上一个快照中是否至少检测到 1 Visual Signature ,然后如果检测到对象则打印 true 或 false。 如果检测到物体,它会打印检测到的物体总数。

int main() {
while (true) {
// 拍摄快照以检查检测到的对象
AIVision6.takeSnapshot(Blue);

// 清除屏幕/重置,以便我们可以显示新信息
Brain.Screen.clearScreen();
Brain.Screen.setCursor(1, 1);

// 如果找到对象,则打印数量
if (AIVision6.objectCount > 0) {
Brain.Screen.newLine();
Brain.Screen.print("对象数量: %d", AIVision6.objectCount);
}

等待(0.5,秒);
}
}

选择要从中获取数据的对象

有两种方法可以从 AI 视觉传感器中提取数据。 一种方法是使用 AIVision.largestObject 属性直接从最近使用 .takeSnapshot 方法时检测到的最大对象中检索信息。 另一种方法使用 AIVision.objects[] 属性并指定对象索引。

AIVision.largestObject

ai.vision.largest_object() 是访问最大对象的属性。

int main() {
while (true) {
// 拍摄快照以检查检测到的对象
AIVision6.takeSnapshot(BlueBox);

// 清除屏幕/重置,以便我们可以显示新信息
Brain.Screen.clearScreen();
Brain.Screen.setCursor(1, 1);

// 如果找到物体,则打印位置
if (AIVision6.objects[0].exists) {
Brain.Screen.print("Center X: %d, AIVision6.largestObject[0].centerX);
} else {
Brain.Screen.print("无对象");
}

wait(0.5, 秒);
}
}

AIVision.objects

提取数据的另一种方法是指定要从中提取数据的对象的索引。 快照返回检测到的对象,其中最大对象首先位于索引 0 处,并按从最大到最小的顺序对对象进行排序。

int main() {
while (true) {
// 拍摄快照以检查检测到的对象
AIVision6.takeSnapshot(BlueBox);

// 清除屏幕/重置,以便我们可以显示新信息
Brain.Screen.clearScreen();
Brain.Screen.setCursor(1, 1);

// 如果找到物体,则打印位置
if (AIVision6.objects[0].exists) {
Brain.Screen.print("Center X: %d, AIVision6.objects[0].centerX);
} else {
Brain.Screen.print("无对象");
}

wait(0.5, 秒);
}
}

选择要从对象中提取哪些数据

每个对象有八个可以调用的属性。

  • 。高度
  • 。宽度
  • .centerX
  • .centerY
  • .originX
  • .originY
  • 。角度
  • .存在

。高度

.height 属性返回检测到的对象的高度(以像素为单位)。

使用此代码返回 .height 属性:

AIVision6.objects[0].height

.height 属性将返回 0 到 240 像素之间的值。

。宽度

.width 属性返回检测到的对象的宽度(以像素为单位)。

使用以下代码返回 .width 属性:

AIVision6.objects[0].width

.width 属性将返回 0 到 320 之间的值。

.centerX

.centerX 属性报告检测到的 视觉签名中心的 X 坐标。

使用以下代码返回 .centerX 属性:

AIVision6.objects[0].centerX

.centerX 属性将返回 0 到 320 之间的数字。

.centerY

.centerY 属性报告检测到的 视觉签名中心的 Y 坐标。

使用以下代码返回 .centerY 属性:

AIVision6.objects[0].centerY

.centerY属性 将返回 0 到 240 之间的数字。

.originX

.originX 属性报告检测到的 视觉签名的最左上角的 X 坐标。

使用此代码返回 .originX 属性:

AIVision6.objects[0].originX

.originX属性将返回 0 到 320 之间的数字。

.originY

.originY 属性报告检测到的 视觉签名的最左上角的 Y 坐标。

使用此代码返回 .originY 属性:

AIVision6.objects[0].originY

.originY属性将返回 0 到 240 之间的数字。

。角度

.angle 属性返回 颜色代码的 角度值。

使用以下代码返回 .angle 属性:

AIVision6.objects[0].angle

.angle 属性返回检测到的 颜色代码的 方向,范围从 0 到 359.99 度。

.存在

.exists 是一个布尔属性,如果它是有效对象,则返回 true。 

如果对象无效,例如使用负整数,它将返回 false。 如果某个对象无效,则所有其他属性将返回 0 作为其值。

int main() {
while (true) {
// 拍摄快照以检查检测到的对象
AIVision6.takeSnapshot(BlueBox);

// 清除屏幕/重置,以便我们可以显示新信息
Brain.Screen.clearScreen();
Brain.Screen.setCursor(1, 1);

// 如果找到物体,则打印位置
if (AIVision6.objects[0].exists) {
Brain.Screen.print("Center X: %d, AIVision6.objects[0].centerX);
} else {
Brain.Screen.print("无对象");
}

wait(0.5, 秒);
}
}

For more information, help, and tips, check out the many resources at VEX Professional Development Plus

Last Updated: