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

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

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

为了从周围环境收集信息,人工智能视觉传感器会拍摄当前所看到的图像。 它用指定的Visual Signature 标识的任何对象都会放入一个元组中,然后可以由其他函数使用。

拍摄快照

使用 take_snapshot 命令时,您需要创建一个变量来存储它创建的元组。 任何视觉签名 都需要先进行配置,然后才能用作参数。 使用该函数时,将签名参数指定为传感器名称、双下划线,后跟视觉签名名称。实用程序 exm.PNG

Vision_objects = ai_vision_6.take_snapshot(ai_vision_6__Blue)
Vision_objects = ai_vision_6.take_snapshot(ai_vision_6__Red)
Vision_objects = ai_vision_6.take_snapshot(ai_vision_6__Green)

当您开始输入括号的开头时,您的 Visual Signature 选项也将在 VEXcode 中自动填充。

例子

在此示例中,变量 Vision_objects 存储一个元组,其中包含从名为 ai_vision_6的 AI 视觉传感器检测到的 视觉签名。 它显示检测到的物体数量,并每 0.5 秒捕获一个新快照。

while True: 

# 拍摄快照以创建检测到的对象的元组
Vision_objects = ai_vision_6.take_snapshot(ai_vision_6__Blue)

Brain.screen.clear_screen()
Brain.screen.set_cursor(1, 1)

Brain.screen .print("对象计数:", len(vision_objects))
wait(0.5, 秒)

确定检测到多少个物体

len 命令可与元组一起使用。 这可用于查看 take_snapshot 命令在元组中存储了多少个对象。

最佳实践是始终确保在尝试从快照中提取任何信息之前已检测到对象。 为此,请使用 len 命令和存储元组的变量。

len(视觉对象) > 0

例子

在此示例中,变量 Vision_objects 存储一个元组,其中包含从名为 ai_vision_6的 AI 视觉传感器检测到的 视觉签名。 它显示检测到的物体数量,并每 0.5 秒捕获一个新快照。 但是,如果它检测到一个对象,它将打印检测到的对象数量。

while True: 
# 拍摄快照以创建检测到的对象的元组
Vision_objects = ai_vision_6.take_snapshot(ai_vision_6__Blue)

# 清除屏幕/重置,以便我们可以显示新信息
Brain.screen.clear_screen()
Brain. screen.set_cursor(1, 1)

if len(vision_objects) > 0:
# 打印找到了多少个物体
Brain.screen.next_row()
Brain.screen.print("object count:", len(vision_objects) ))
等待(0.5, 秒)

通过对元组使用 len 命令,您还可以查看检测到的对象数量。

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

有两种方法可以从元组中提取数据。 一种方法是使用 ai.vision.largest_object() 函数直接从最近使用 take_snapshot 命令中检测到的最大对象中检索信息。 另一种方法涉及指定特定变量和对象索引。

ai.vision.largest_object()

ai.vision.largest_object() 是一个辅助函数,用于访问元组中最大的对象,但仅适用于最新的快照。

while True: 
# 拍摄快照以创建检测到的对象的元组
Vision_objects = ai_vision_6.take_snapshot(ai_vision_6__Blue)

# 清除屏幕/重置,以便我们可以显示新信息
Brain.screen.clear_screen()
Brain. screen.set_cursor(1, 1)

# 拉取数据前检查对象是否存在
if len(vision_objects) > 0:
Brain.screen.print(Center X: ", ai_vision.largest_object().centerX)
else :
Brain.screen.print("无对象")
wait(0.5, 秒)

在此示例中,代码先检查对象是否存在,然后使用 ai.vision.largest_object() 函数返回检测到的最大对象的 .centerX 属性并打印它。

视觉对象[0]

从元组中提取数据的另一种方法是直接调用存储元组的变量。 在括号中,指定要从中提取数据的对象的索引。 返回的对象元组始终首先在索引 0 处列出最大的对象。 随后,对象按从最大到最小的顺序排列。

while True: 
# 拍摄快照以创建检测到的对象的元组
Vision_objects = ai_vision_6.take_snapshot(ai_vision_6__Blue)

# 清除屏幕/重置,以便我们可以显示新信息
Brain.screen.clear_screen()
Brain. screen.set_cursor(1, 1)

# 拉取数据前检查对象是否存在
if len(vision_objects) > 0:
Brain.screen.print(Center X: ", Vision_object[0].centerX)
else:
Brain.screen.print("无对象")
wait(0.5, SECONDS)

在此示例中,代码在使用 Vision_object[0] 函数返回 0 索引对象的 .centerX 属性并打印之前检查对象是否存在。

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

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

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

。高度

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

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

视觉对象[0].高度

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

。宽度

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

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

视觉对象[0].宽度

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

.centerX

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

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

视觉对象[0].centerX

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

.centerY

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

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

视觉对象[0].centerY

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

.originX

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

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

视觉对象[0].originX

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

.originY

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

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

视觉对象[0].originY

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

。角度

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

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

视觉对象[0].角度

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

.存在

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

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

while True: 
# 拍摄快照以创建检测到的对象的元组
Vision_objects = ai_vision_6.take_snapshot(ai_vision_6__Blue)
# 清除屏幕/重置以便我们可以显示新信息
Brain.screen.clear_screen()
Brain.screen .set_cursor(1, 1)

if Vision_objects[0].exists:
Brain.screen.print("x:", Vision_objects[0].centerX)
else:
Brain.screen.print("无对象" )
等待(0.1,秒)

在此示例中,代码检查 .exists 属性,如果返回 true,则会将 .centerX 属性值打印到 Brain。 如果 .exists 属性返回 false,则会打印不存在对象。

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

Last Updated: