Зір штучного інтелекту#

Вступ#

Датчик зору на базі штучного інтелекту робота-кодера VEX AIM виявляє та відстежує об’єкти, кольори та ідентифікатори AprilTag. Це дозволяє роботу аналізувати своє оточення, стежити за об’єктами та реагувати на основі виявлених візуальних даних.

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

Діаграма, що показує роздільну здатність датчика зору AIM AI, де координата 0, 0 знаходиться у верхньому лівому куті діаграми, 320, 0 — у верхньому правому куті та 0, 240 — у нижньому лівому куті, а 160, 120 — точно по центру.

Нижче наведено список усіх методів та властивостей:

Дії — Показати або приховати зображення з камери AI Vision.

  • show_aivision — Відображає зображення зі штучного інтелекту на екрані робота.

  • 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, Тег, Колір або Код).

Конструктори — Визначають колірні підписи та коди.

Дії#

show_aivision#

show_aivision відображає дані в реальному часі з датчика зору штучного інтелекту на екрані робота. Дані в реальному часі перекриватимуть будь-які інші зображення чи текст на екрані.

Примітка: На екрані не відображатимуться жодні інші зображення чи текст, якщо для приховування стрічки не використовується параметр 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 видаляє поток даних у реальному часі від датчика зору штучного інтелекту з екрана робота.

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, де стан є логічним значенням.

Датчик може виявляти ідентифікатори 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, перш ніж їх можна буде використовувати з цим методом.

Кортеж tuple зберігає об’єкти, відсортовані від найбільшого до найменшого за шириною, починаючи з індексу 0. Доступ до властивостей properties кожного об’єкта можна отримати за його індексом. Якщо не виявлено відповідних об’єктів, повертається порожній кортеж.

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 від 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)

Примітка: Повернений кортеж можна відсортувати за будь-якою властивістю property, а не лише за шириною, використовуючи функцію Python sorted sorted Наприклад, сортування за ідентифікатором 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 відображає список усіх властивостей усіх виявлених об’єктів:

# 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, beaning: 14.1 та rotation: 0.0, а потім роздільна лінія та початок «Об’єкта №1» з exists: True, type: AprilTag ID, id: 4 та centerX: 122.

Класифікації ШІ#

Датчик зору AIM AI може виявляти такі класифікації штучного інтелекту:

Ідентифікаційний номер

Класифікація ШІ

Підпис

0

М’яч

SPORTS_BALL

1

Блакитна бочка

BLUE_BARREL

2

Помаранчева бочка

ORANGE_BARREL

3

Робот AIM

AIM_ROBOT

Кольорові підписи#

Колірна сигнатура – ​​це унікальний колір, який може розпізнати датчик зору зі штучним інтелектом. Ці сигнатури дозволяють датчику виявляти та відстежувати об’єкти на основі їхнього кольору. Після налаштування колірної сигнатури датчик може ідентифікувати об’єкти з цим певним кольором у своєму полі зору. Колірні сигнатури використовуються разом з get_data для обробки та виявлення кольорових об’єктів у режимі реального часу.

Утиліта штучного інтелекту зору показує підключений датчик зору, який виявляє два кольорові об'єкти. Ліворуч відображається пряма трансляція з камери із синім прямокутником ліворуч і червоним прямокутником праворуч, кожен з яких обведений білими рамками. Чорні мітки відображають їхні відповідні назви, координати та розміри. Праворуч містяться налаштування колірної сигнатури з повзунками для діапазону відтінку та насиченості для червоного та синього прямокутників. Кнопки для додавання кольорів, зупинки відео, копіювання та збереження зображення знаходяться внизу, а також кнопка закриття в правому нижньому куті.

# 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 колірних сигнатур, розташованих у певному порядку. Ці коди дозволяють датчику зору зі штучним інтелектом розпізнавати заздалегідь визначені кольорові візерунки. Колірні коди корисні для ідентифікації складних об’єктів або створення унікальних маркерів для автономної навігації.

Інтерфейс утиліти штучного інтелекту зору показує підключений датчик зору, який виявляє два суміжні об'єкти: синій прямокутник ліворуч і червоний прямокутник праворуч, згруповані разом в одному білому обмежувальному прямокутнику з позначкою 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.

All property values except .id, .score, and .type describe the detected object’s position, size, orientation, or bearing at the moment robot.vision.get_data was used. These values are measured in pixels or degrees, based on the sensor’s 320 by 240 pixel resolution.

Синя бочка з помаранчевою смугою розташована по центру кадру, оточена чорною обмежувальною рамкою. Осі 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), яке представляє відстань між об’єктом та центром поля зору датчика штучного інтелекту у градусах. Значення 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 повертає орієнтацію об’єкта на площині огляду датчика штучного інтелекту, виміряну в градусах від 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 , а потім реєструється в сенсоре штучного інтелекту з візуальним зображенням за допомогою методу color_description Об’єкт Colordesc визначає 1 з максимум 7 виявлюваних кольорових сигнатур для сенсора, але її необхідно явно встановити за допомогою 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, що представляє діапазон насичення.

Використання_опису_колориту:
robot.vision.color_description(object)

Параметр

Опис

object

Об’єкт 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 , а потім активується за допомогою методу code_description Колірний код групує від 2 до 4 існуючих об’єктів Colordesc в один ідентифікатор, який AI Vision Sensor може розпізнати як послідовність, але його потрібно явно встановити за допомогою code_description , щоб він набув чинності.

Використання коду:
Codedesc(index, c1, c2, c3, c4, c5)

Параметр

Опис

index

Індекс колірного коду від 1 до 8. Примітка: Якщо створити два об’єкти 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)