ИИ-зрение#

Введение#

Датчик визуального восприятия с искусственным интеллектом робота-программиста VEX AIM обнаруживает и отслеживает объекты, цвета и идентификаторы AprilTag. Это позволяет роботу анализировать окружающую среду, следовать за объектами и реагировать на основе обнаруженных визуальных данных.

Датчик AI Vision имеет разрешение 320×240 пикселей. Начало координат (0, 0) расположено в верхнем левом углу, а центр датчика находится в точке (160, 120), как показано на схеме ниже:

Диаграмма, показывающая разрешение датчика AIM AI Vision Sensor, с координатами 0, 0 в верхнем левом углу, 320, 0 в верхнем правом углу и 0, 240 в нижнем левом углу, а также 160, 120 точно в центре.

Ниже приведён список всех методов и свойств:

Действия — Показать или скрыть видеопоток с камеры AI Vision.

  • show_aivision — Отображает видеопоток AI Vision на экране робота.

  • hide_aivision — Скрывает изображение AI Vision с экрана.

  • tag_detection — Включает или выключает обнаружение идентификаторов AprilTag.

Геттеры — определяют, держит ли робот какой-либо предмет.

  • get_data — Возвращает кортеж обнаруженных объектов для конкретной сигнатуры.

  • has_sports_ball — Возвращает значение, указывающее, есть ли у робота спортивный мяч.

  • has_any_barrel — Возвращает значение, указывающее, есть ли у робота бочка какого-либо типа.

  • has_blue_barrel — Возвращает значение, указывающее, есть ли у робота синяя бочка.

  • has_orange_barrel — Возвращает значение, указывающее, есть ли у робота оранжевая бочка.

Свойства — Данные объекта, возвращаемые из get_data.

  • exists — Существует ли объект в текущем обнаружении в виде логического значения.

  • width — Ширина обнаруженного объекта.

  • height — Высота обнаруженного объекта.

  • centerX — X-координата центра объекта.

  • centerY — Положение центра объекта по оси Y.

  • bearing — Горизонтальный угол относительно передней части робота.

  • rotation — Ориентация объекта.

  • originX — X-позиция верхнего левого угла объекта.

  • originY — Положение по оси Y верхнего левого угла объекта.

  • id — Классификация или идентификатор тега объекта.

  • score — Показатель достоверности для классификаций ИИ.

  • type — Возвращает тип объекта (AI, Tag, Color или Code).

Конструкторы — определяют цветовые сигнатуры и коды.

Действия#

show_aivision#

show_aivision отображает поток данных с датчика AI Vision на экране робота. Поток данных будет перекрывать любые другие изображения или текст на экране.

Примечание: На экране не будут отображаться никакие другие изображения или текст, если не используется hide_aivision для скрытия ленты.

Usage:
robot.screen.show_aivision()

Параметры

Описание

Этот метод не имеет параметров.

# Watch the AI Vision Sensor detect AI Classifications
# and AprilTag IDs as you move the robot
robot.screen.show_aivision()

hide_aivision#

hide_aivision удаляет поток данных в реальном времени с датчика AI Vision Sensor с экрана робота.

Usage:
robot.screen.hide_aivision()

Параметры

Описание

Этот метод не имеет параметров.

# View the AI Vision Sensor's feed for five seconds
robot.screen.show_aivision()
wait(5, SECONDS)
robot.screen.hide_aivision()

tag_detection#

Параметр tag_detection включает или отключает определение идентификатора AprilTag, где state — логическое значение.

Датчик способен распознавать метки AprilTag с идентификаторами от 0 до 36 из семейства Circle21h7.

Usage:
robot.vision.tag_detection(state)

Параметры

Описание

state

Возможные значения: True— включает определение идентификатора AprilTag, или False— отключает определение идентификатора AprilTag.

robot.screen.set_font(PROP30)

# Cut off AprilTag ID detection after 5 seconds
while True:
    if timer.time(SECONDS) > 5:
        robot.vision.tag_detection(False)

    robot.screen.clear_screen()
    robot.screen.set_cursor(3, 1)
    apriltags = robot.vision.get_data(ALL_TAGS)

    if apriltags[0].exists:
        robot.screen.print("AprilTag ID detected!")
    else:
        robot.screen.print("Nothing detected!")

    wait(0.1, SECONDS)

Геттеры#

get_data#

get_data фильтрует данные из кадра AI Vision Sensor в единую сигнатуру — сохраненное описание чего-либо, что датчик может распознать, например, предварительно обученный объект, идентификатор AprilTag или настроенную цветовую сигнатуру или цветовой код — и возвращает кортеж.

Цветовые сигнатуры и Цветовые коды необходимо предварительно настроить в утилите AI Vision, прежде чем их можно будет использовать с этим методом.

The tuple stores objects ordered from largest to smallest by width, starting at index 0. Each object’s properties can be accessed using its index. An empty tuple is returned if no matching objects are detected.

Usage:
robot.vision.get_data(signature, count)

Параметры

Описание

signature

Фильтрует набор данных, чтобы включить только данные с заданной подписью. Доступные сигнатуры:

  • ALL_VISION - Спортивные мячи, бочки, кодирующие роботы VEX AIM, идентификаторы AprilTag, цвета и цветовые коды
  • ALL_CARGO - Спортивные мячи и бочки
  • ALL_TAGS - Все идентификаторы AprilTag
  • ALL_COLORS - Все настроенные цветовые сигнатуры и цветовые коды
  • SPORTS_BALL - Только спортивные мячи
  • BLUE_BARREL - Только синие бочки
  • ORANGE_BARREL - Только оранжевые бочки
  • AIM_ROBOT - Все кодирующие роботы VEX AIM
  • TAG0 TAG37 - Один AprilTag ID от 0 до 37
  • NAME - Цветовая сигнатура или цветовой код, где NAME - имя, настроенное в утилите AI Vision.

count

Необязательный параметр. Задает максимальное количество объектов, которые могут быть возвращены, от 1 до 24 (по умолчанию: 8).

Примечание: Идентификаторы AprilTag с 5 по 37 можно получить, используя распечатанные идентификаторы AprilTag из AIM Printables.

# Move forward if a sports ball is detected
while True:
    ball = robot.vision.get_data(SPORTS_BALL)
    if ball[0].exists:
        robot.move_for(10, 0)
    wait(50, MSEC)

Примечание: Возвращаемый кортеж можно отсортировать по любому свойству, а не только по ширине, используя функцию Python sorted Например, сортировка по ID AprilTag:

# Print each detected AprilTag ID in ascending order by ID
while True:
    apriltags = sorted(robot.vision.get_data(ALL_TAGS), key=id)
    for tag in apriltags:
        print(tag.id)
    wait(1, SECONDS)

Или сортировка по высоте:

# Print each detected AprilTag ID in ascending order by height
while True:
    apriltags_by_height = sorted(robot.vision.get_data(ALL_TAGS), key=lambda tag: tag.height)
    for tag in apriltags_by_height:
        print(tag.height)
    wait(1, SECONDS)

Просмотр данных#

Вывод кортежа, возвращаемого функцией get_data ( get_data в выводе списка всех свойств всех обнаруженных объектов:

# Display properties of all detected AprilTag IDs
while True:
    vision_data = robot.vision.get_data(ALL_TAGS)

    if vision_data[0].exists:
        break

    wait(0.25, SECONDS)

print(vision_data)

Скриншот окна консоли, отображающего отладочный вывод для обнаруженных идентификаторов AprilTag. Текст содержит «Объект №0» с полями, такими как exists: True, type: AprilTag ID, id: 2, centerX: 223, centerY: 54, originX: 210, originY: 42, width: 27, height: 23, bearing: 14.1 и rotation: 0.0, за которыми следует разделительная линия и начало «Объекта №1» с exists: True, type: AprilTag ID, id: 4 и centerX: 122.

Классификации ИИ#

Датчик AIM AI Vision Sensor способен распознавать следующие классификации ИИ:

Идентификационный номер

Классификация ИИ

Подпись

0

Мяч

SPORTS_BALL

1

Синяя бочка

BLUE_BARREL

2

Оранжевая бочка

ORANGE_BARREL

3

Робот AIM

AIM_ROBOT

Цветовые сигнатуры#

Цветовая сигнатура — это уникальный цвет, который может распознать датчик AI Vision. Эти сигнатуры позволяют датчику обнаруживать и отслеживать объекты на основе их цвета. После настройки цветовой сигнатуры датчик может идентифицировать объекты с этим конкретным цветом в своем поле зрения. Цветовые сигнатуры используются с get_data для обработки и обнаружения цветных объектов в реальном времени.

Утилита AI Vision демонстрирует подключенный датчик зрения, обнаруживающий два цветных объекта. Слева отображается видеопоток с камеры в реальном времени: слева — синий прямоугольник, справа — красный, каждый обведен белыми рамками. Черные метки отображают их названия, координаты и размеры. Справа находятся настройки цветовой сигнатуры с ползунками для регулировки оттенка и насыщенности как для красного, так и для синего прямоугольников. Внизу расположены кнопки для добавления цветов, остановки видео, копирования и сохранения изображения, а в правом нижнем углу — кнопка закрытия.

# Display if any objects match the Red_Box signature
while True:
    robot.screen.set_cursor(1, 1)
    robot.screen.clear_row(1)
    # Change to any configured Color Signature
    ai_objects = robot.vision.get_data(Red_Box)
    if ai_objects[0].exists:
        robot.screen.print("Color signature detected!")

Цветовые коды#

Цветовой код — это структурированный шаблон, состоящий из 2–4 цветовых сигнатур, расположенных в определенном порядке. Эти коды позволяют датчику искусственного интеллекта распознавать предопределенные цветовые схемы. Цветовые коды полезны для идентификации сложных объектов или создания уникальных маркеров для автономной навигации.

Интерфейс AI Vision Utility отображает подключенный датчик зрения, обнаруживающий два смежных объекта: синий прямоугольник слева и красный прямоугольник справа, объединенных в один белый ограничивающий прямоугольник с надписью BlueRed. Информация об обнаружении включает угол (A:11°), координаты (X:143, Y:103), ширину (W:233) и высоту (H:108). На правой панели указаны три цветовые сигнатуры: Red_Box, Blue_Box и BlueRed, с регулируемыми диапазонами оттенка и насыщенности. Сигнатура BlueRed объединяет Blue_Box и Red_Box. Под видеопотоком расположены кнопки с надписями Freeze Video, Copy Image, Save Image и Close.

# Display if any objects match the BlueRed code
while True:
    robot.screen.set_cursor(1, 1)
    robot.screen.clear_row(1)
    # Change to any configured Color Code
    ai_objects = robot.vision.get_data(BlueRed)
    if ai_objects[0].exists:
        robot.screen.print("Color code detected!")

has_sports_ball#

has_sports_ball` возвращает логическое значение, указывающее, есть ли у робота в данный момент спортивный мяч.

  • True — У робота есть спортивный мяч.

  • False — У робота нет спортивного мяча.

Usage:
robot.has_sports_ball()

Параметры

Описание

Этот метод не имеет параметров.

# Kick when the robot has a sports ball
while True:
    if robot.has_sports_ball():
        robot.kicker.kick(MEDIUM)

    wait(50, MSEC)

has_any_barrel#

has_any_barrel` возвращает логическое значение, указывающее, есть ли у робота в данный момент бочка какого-либо типа.

  • True — У робота есть бочка.

  • False — У робота нет бочки.

Usage:
robot.has_any_barrel()

Параметры

Описание

Этот метод не имеет параметров.

# Push a barrel away when detected
while True:
    if robot.has_any_barrel():
        robot.kicker.place()

    wait(50, MSEC)

has_blue_barrel#

has_blue_barrel` возвращает логическое значение, указывающее, есть ли у робота в данный момент синяя бочка.

  • True — У робота синяя бочка.

  • False — У робота нет синей бочки.

Usage:
robot.has_blue_barrel()

Параметры

Описание

Этот метод не имеет параметров.

# Push a blue barrel away when detected
while True:
    if robot.has_blue_barrel():
        robot.kicker.place()

    wait(50, MSEC)

has_orange_barrel#

Функция has_orange_barrel возвращает логическое значение, указывающее, есть ли у робота в данный момент оранжевая бочка.

  • True — У робота есть оранжевая бочка.

  • False — У робота нет оранжевой бочки.

Usage:
robot.has_orange_barrel()

Параметры

Описание

Этот метод не имеет параметров.

# Push an orange barrel away when detected
while True:
    if robot.has_orange_barrel():
        robot.kicker.place()

    wait(50, MSEC)

Характеристики#

После использования метода robot.vision.get_data каждый объект, хранящийся в кортеже, включает двенадцать свойств.

Все значения свойств, кроме .id, .scoreи .type , описывают положение, размер, ориентацию или направление обнаруженного объекта в момент использования robot.vision.get_data Эти значения измеряются в пикселях или градусах, исходя из разрешения датчика 320 на 240 пикселей.

В центре рамки находится синяя бочка с оранжевой полосой, окруженная черным ограничивающим прямоугольником. Оси x и y обозначены цифрами от 0 до 320 слева направо по верхнему краю и от 0 до 240 сверху вниз по левому краю соответственно.

.exists#

.exists возвращает логическое значение, указывающее, существует ли индекс в кортеже или нет.

  • True — Индекс существует.

  • False — Индекс не существует.

# Check if at least two objects are detected
while True:
    robot.screen.clear_screen()
    robot.screen.set_cursor(1, 1)
    ai_objects = robot.vision.get_data(ALL_CARGO)

    if ai_objects[0].exists:
        if ai_objects[1].exists:
            robot.screen.print("At least 2")
        else:
            robot.screen.print("Less than 2")
    wait(0.1, SECONDS)

.width#

.width возвращает ширину обнаруженного объекта в пикселях, которая является целым числом от 1 до 320.

Примечание: Значения пикселей указаны относительно системы координат датчика. См. диаграмму во Введении для справки.

В центре рамки находится синяя бочка с оранжевой полосой, окруженная черным ограничивающим прямоугольником. Две вертикальные красные пунктирные линии тянутся от верхней части рамки вниз к левому и правому краям ограничивающего прямоугольника. Двусторонняя черная стрелка между этими линиями указывает ширину.

# Move towards a Blue Barrel until its width is
# larger than 100 pixels
while True:
    barrel = robot.vision.get_data(BLUE_BARREL)

    if barrel[0].exists:
        if barrel[0].width < 100:
            robot.move_at(0)
    else:
        robot.stop_all_movement()

    wait(50, MSEC)

.height#

.height возвращает высоту обнаруженного объекта в пикселях, которая является целым числом от 1 до 240.

Примечание: Значения пикселей указаны относительно системы координат датчика. См. диаграмму во Введении для справки.

В центре рамки находится синяя бочка с оранжевой полосой, окруженная черным ограничивающим прямоугольником. Две горизонтальные красные пунктирные линии проходят от левой стороны рамки к верхнему и нижнему краям ограничивающего прямоугольника. Двусторонняя черная стрелка между этими линиями указывает высоту.

# Move towards a Blue Barrel until its height is
# larger than 100 pixels
while True:
    barrel = robot.vision.get_data(BLUE_BARREL)

    if barrel[0].exists:
        if barrel[0].height < 100:
            robot.move_at(0)
    else:
        robot.stop_all_movement()

    wait(50, MSEC)

.centerX#

.centerX возвращает x-координату центра обнаруженного объекта в пикселях, которая является целым числом от 0 до 320.

Примечание: Значения пикселей указаны относительно системы координат датчика. См. диаграмму во Введении для справки.

В центре рамки находится синяя бочка с оранжевой полосой, окруженная черным ограничивающим прямоугольником. От верхней части рамки вниз до центра ограничивающего прямоугольника проходит вертикальная красная пунктирная линия, указывающая X-координату центра.

# Turn slowly until a Blue Barrel is centered in
# front of the robot
robot.set_turn_velocity(30)
robot.turn(RIGHT)

while True:
    barrel = robot.vision.get_data(BLUE_BARREL)

    if barrel[0].exists:
        if 140 < barrel[0].centerX < 180:
            robot.stop_all_movement()

    wait(10,MSEC)

.centerY#

.centerY возвращает y-координату центра обнаруженного объекта в пикселях, которая является целым числом от 0 до 240.

Примечание: Значения пикселей указаны относительно системы координат датчика. См. диаграмму во Введении для справки.

В центре рамки находится синяя бочка с оранжевой полосой, окруженная черным ограничивающим прямоугольником. От левой стороны рамки до центра ограничивающего прямоугольника проходит горизонтальная красная пунктирная линия, указывающая Y-координату центра.

# Move towards a Blue Barrel until its
# center y-coordinate is more than 140 pixels
while True:
    barrel = robot.vision.get_data(BLUE_BARREL)

    if barrel[0].exists:
        if barrel[0].centerY < 140:
            robot.move_at(0)
    else:
        robot.stop_all_movement()

    wait(50, MSEC)

.bearing#

.bearing возвращает десятичное число (float), представляющее, насколько объект смещен влево или вправо от центра поля зрения датчика AI Vision в градусах. Значение 0 означает, что он находится в центре, положительные значения означают, что объект находится справа, а отрицательные значения означают, что объект находится слева.

Схема сверху вниз, показывающая робота-программиста VEX AIM, расположенного в центре круглого основания, с вертикальной опорной линией и красной линией, направленной к спортивному мячу слева и обозначенной как -30 градусов. Схема сверху вниз, показывающая робота-программиста VEX AIM, расположенного в центре круглого основания, с вертикальной опорной линией и красной линией, направленной вправо к спортивному мячу, обозначенной как 30 градусов.
# Turn to keep the Blue Barrel directly in front
robot.set_turn_velocity(40)
while True:
    vision_data = robot.vision.get_data(BLUE_BARREL)

    if vision_data[0].exists:

        if vision_data[0].bearing > 5:
            robot.turn(RIGHT)
        elif vision_data[0].bearing < -5:
            robot.turn(LEFT)
        else:
            robot.stop_all_movement()

    else:
        robot.stop_all_movement()

    wait(0.1, SECONDS)

.rotation#

.rotation возвращает ориентацию объекта в плоскости обзора датчика AI Vision, измеряемую в градусах от 0 до 359. Цветовой код равен 0°, если его цвета расположены в горизонтальной линии (например, красный–синий). Если цвета повернуты, угол изменяется (например, расположение синего и красного возвращает 180°).

В приведенном ниже примере цветовая кодировка настроена таким образом, что слева расположен красный цвет, а справа — синий.

На этом изображении наложение синего цвета поверх красного эквивалентно повороту исходного цветового кода на 270 градусов вправо.

Интерфейс камеры отображает вертикально расположенный объект с синей верхней половиной и красной нижней половиной, центрированный в кадре. Под объектом находится надпись Red_Blue A:270° CX:185 CY:81 W:93 H:150, указывающая название объекта, угол поворота, координаты центра по осям X и Y, ширину и высоту. Размеры изображения обозначены линиями сетки и числовыми осями, где X изменяется от 0 до 320, а Y — от 0 до 240.

# Slide left or right depending on how a Color Code (BlueRed)
# is rotated on the vertical plane
while True:
    # Original Color Code is Red to the left, Blue to the right
    code = robot.vision.get_data(BlueRed)

    if code[0].exists:
        # Check if Color Code is now Red on top of Blue
        if 50 < code[0].rotation < 100 :
            robot.move_at(90)

        # Check if Color Code is now Blue on top of Red
        elif 270 < code[0].rotation < 330 :
            robot.move_at(270)

        else:
            robot.stop_all_movement()
    else:
        robot.stop_all_movement()

    wait(50, MSEC)

.originX#

.originX возвращает x-координату верхнего левого угла ограничивающего прямоугольника обнаруженного объекта в пикселях, которая является целым числом от 0 до 320.

Примечание: Значения пикселей указаны относительно системы координат датчика. См. диаграмму во Введении для справки.

В центре рамки находится синяя бочка с оранжевой полосой, окруженная черным ограничивающим прямоугольником. От верхней части рамки до левого края ограничивающего прямоугольника проходит вертикальная красная пунктирная линия, указывающая X-координату начала координат ограничивающего прямоугольника.

# Display if an Orange Barrel is to the
# left or the right
while True:
    robot.screen.clear_screen()
    robot.screen.set_cursor(1,1)

    orange_barrel = robot.vision.get_data(ORANGE_BARREL)

    if orange_barrel[0].exists:
        if orange_barrel[0].originX < 160:
            robot.screen.print("To the left!")
        else:
            robot.screen.print("To the right!")

    wait(50, MSEC)

.originY#

.originY возвращает y-координату верхнего левого угла ограничивающего прямоугольника обнаруженного объекта в пикселях, которая является целым числом от 0 до 240.

Примечание: Значения пикселей указаны относительно системы координат датчика. См. диаграмму во Введении для справки.

В центре рамки находится синяя бочка с оранжевой полосой, окруженная черным ограничивающим прямоугольником. От левой стороны рамки до верхнего края ограничивающего прямоугольника проходит горизонтальная красная пунктирная линия, указывающая Y-координату начала координат ограничивающего прямоугольника.

# Display if an Orange Barrel is close or far
# from the robot
while True:
    robot.screen.clear_screen()
    robot.screen.set_cursor(1, 1)

    orange_barrel = robot.vision.get_data(ORANGE_BARREL)

    if orange_barrel[0].exists:
        if orange_barrel[0].originY < 80:
            robot.screen.print("Far")
        else:
            robot.screen.print("Close")

    wait(50, MSEC)

.id#

.id возвращает идентификатор обнаруженной классификации ИИ или идентификатор AprilTag в виде целого числа.

Для идентификатора AprilTag свойство .id представляет собой обнаруженный номер идентификатора AprilTag в диапазоне от 0 до 37. Для классификации ИИ свойство .id соответствует предопределенному идентификатору в разделе Классификации ИИ.

# Move forward when AprilTag ID 1 is detected
while True:
    apriltags = robot.vision.get_data(ALL_TAGS)

    if apriltags[0].exists:
        if apriltags[0].id == 1:
            robot.move_at(0)
    else:
        robot.stop_all_movement()

    wait(50, MSEC)

.score#

.score возвращает оценку достоверности обнаруженной классификации ИИ в виде целого числа от 1 до 100.

Более низкий балл означает, что датчик менее уверен в обнаружении объекта, а более высокий балл означает, что датчик более уверен.

# Look confident if an Orange Barrel is detected
while True:
    barrel = robot.vision.get_data(ORANGE_BARREL)

    if barrel[0].exists:
        if barrel[0].score > 95:
            robot.screen.show_emoji(CONFIDENT)
        else:
            robot.screen.hide_emoji()

    wait(50, MSEC)

.type#

Метод .type возвращает целое число, указывающее тип обнаруженного объекта. Вы можете сравнить это значение, используя либо номер типа, либо соответствующую именованную константу:

Тип объекта

Включенные объекты

AiVision.AI_OBJECT

— Спортивные мячи
— Синие бочки
— Оранжевые бочки

AiVision.TAG_OBJECT

— Идентификаторы AprilTag

AiVision.COLOR_OBJECT

— Цветовые подписи

AiVision.CODE_OBJECT

— Цветовые коды

# Display if an AprilTag ID or AI Classification
# is detected
while True:
    robot.screen.clear_screen()
    robot.screen.set_cursor(1, 1)
    vision_data = robot.vision.get_data(ALL_VISION)
    if vision_data[0].exists:
        if vision_data[0].type == AiVision.AI_OBJECT:
            robot.screen.print("AI Object!")
        elif vision_data[0].type == AiVision.TAG_OBJECT:
            robot.screen.print("AprilTag ID!")
    wait(0.1, SECONDS)

# Display a list of all detected objects
while True:
    robot.screen.clear_screen()
    robot.screen.set_cursor(1, 1)
    vision_data = robot.vision.get_data(ALL_VISION)

    if vision_data[0].exists:
        for obj in vision_data:
            if obj.type == AiVision.AI_OBJECT:
                robot.screen.print("- AI Object")
            elif obj.type == AiVision.TAG_OBJECT:
                robot.screen.print("- AprilTag ID")
            robot.screen.next_row()

    wait(0.1, SECONDS)

Строители#

Creating a Color Signature#

Новая цветовая сигнатура создается с помощью конструктора Colordesc ), а затем регистрируется в датчике AI Vision Sensor с помощью метода color_description ). Объект Colordesc ) определяет одну из семи обнаруживаемых цветовых сигнатур для датчика, но для вступления в силу она должна быть явно задана с помощью метода color_description ).

Использование Colordesc:
Colordesc(index, red, green, blue, hangle, hdsat)

Параметр

Описание

index

Целое число от 1 до 7, представляющее индекс цветовой сигнатуры. Если две цветовые сигнатуры используют один и тот же индекс, вторая переопределит первую.

red

Целое число от 0 до 255, обозначающее красную составляющую цвета.

green

Целое число от 0 до 255, обозначающее зеленую составляющую цвета.

blue

Целое число от 0 до 255, обозначающее синюю составляющую цвета.

hangle

Число с плавающей запятой от 1 до 40, представляющее диапазон оттенков в градусах.

hdsat

Число с плавающей запятой от 0,10 до 1,00, представляющее диапазон насыщенности.

Использование color_description:
robot.vision.color_description(object)

Параметр

Описание

object

Объект Colordesc 1 Colordesc устанавливается в качестве обнаруживаемой цветовой сигнатуры.

# Detect a red object
red_box = Colordesc(1, 207, 19, 25, 10.00, 0.20)
robot.vision.color_description(red_box)

while True:
    robot.screen.clear_screen()
    robot.screen.set_cursor(1, 1)

    red_boxes = robot.vision.get_data(red_box)

    if red_boxes[0].exists:
        robot.screen.print("Red detected!")
    else:
        robot.screen.print("No red detected.")

    wait(0.2, SECONDS)

Creating a Color Code#

Новый цветовой код создается с помощью конструктора Codedesc Codedesc а затем активируется с помощью метода code_description code_description 2 до Colordesc в один идентификатор, который датчик AI Vision может распознать как последовательность, но для вступления в силу его необходимо явно установить с помощью code_description.

Использование Codedesc:
Codedesc(index, c1, c2, c3, c4, c5)

Параметр

Описание

index

Индекс цветового кода, от 1 до 8. Примечание: Если вы создадите два объекта Codedesc Codedesc с одинаковым индексом, второй переопределит первый.

c1

Первый объект Colordesc коде.

c2

Второй объект Colordesc с кодом .

c3

Необязательно. Третий объект Colordesc.

c4

Необязательно. Четвертый объект Colordesc.

Использование code_description:
robot.vision.code_description(object)

Параметр

Описание

object

Объект Codedesc символов) для регистрации в качестве обнаруживаемого цветового кода.

# Create Color Signatures
red_box = Colordesc(1, 207, 19, 25, 10.00, 0.20)
purple_box = Colordesc(2, 98, 18, 227, 10.00, 0.20)

robot.vision.color_description(red_box)
robot.vision.color_description(purple_box)

# Detect a red_purple Color Code
red_purple = Codedesc(1, red_box, purple_box)
robot.vision.code_description(red_purple)

while True:
    robot.screen.clear_screen()
    robot.screen.set_cursor(1, 1)

    code_objects = robot.vision.get_data(red_purple)

    if code_objects[0].exists:
        robot.screen.print("Code detected!")
    else:
        robot.screen.print("No code detected.")

    wait(0.2, SECONDS)