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

Вступ#

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

На цій сторінці використовуються ai_vision_1, RED_BOXта BOX_CODE як приклади назв датчика зору штучного інтелекту, колірної підписи та колірного коду відповідно. За потреби замініть їх власними налаштованими назвами.

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

Отримувачі – Отримуйте дані з датчика зору зі штучним інтелектом.

  • take_snapshot – Збирає дані для певного підпису.

  • installed – Чи підключено датчик зору штучного інтелекту до V5 Brain.

Властивості – Дані об’єкта, повернуті з take_snapshot.

  • .exists – Whether the object exists in the current detection.

  • .width – Ширина виявленого об’єкта.

  • .height – Висота виявленого об’єкта.

  • .centerX – X position of the object’s center.

  • .centerY – положення центру об’єкта по осі Y.

  • .angle – Орієнтація колірного коду.

  • .originX – X position of the object’s top-left corner.

  • .originY – Y position of the object’s top-left corner.

  • .id – Classification or tag ID of the object.

  • .score – Оцінка достовірності для класифікацій ШІ.

Конструктори – ініціалізують та налаштовують датчик зору штучного інтелекту та його сигнатури вручну.

  • AiVision – Створює датчик зору на базі штучного інтелекту.

  • Colordesc – Створює колірну сигнатуру.

  • Codedesc – Створює колірний код.

  • Tagdesc – Створює ідентифікатор AprilTag.

Геттери#

take_snapshot#

take_snapshot фільтрує дані з кадру датчика зору штучного інтелекту до єдиної сигнатури — збереженого опису чогось, що датчик може розпізнати, наприклад, попередньо навченого об’єкта, ідентифікатора AprilTag або налаштованої кольорової сигнатури чи колірного коду — та повертає кортеж.

Кольорові підписи та Кольорові коди необхідно спочатку налаштувати в утиліті Vision, перш ніж їх можна буде використовувати з цим методом.

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

Usage:
ai_vision_1.take_snapshot(SIGNATURE)

Параметри

Опис

SIGNATURE

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

  • Кольорові підписи або колірні коди – назва датчика зору AI, два підкреслення, а потім назва кольорового підпису або колірного коду. Наприклад: ai_vision_1__RED_BOX.
  • AiVision.ALL_AIOBJS – куби, кільця та кулі.
  • AiVision.ALL_TAGS – усі ідентифікатори AprilTag.

count

Необов’язково. Встановлює максимальну кількість об’єктів, які можна повернути, від 1 до 24. Значення за замовчуванням — 8.

# Drive forward if an object is detected
while True:
    objects = ai_vision_1.take_snapshot(AiVision.ALL_AIOBJS)
    if objects[0].exists:
        drivetrain.drive_for(FORWARD, 50, MM)
    wait(50, MSEC)

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

# Print each detected AprilTag ID in ascending order by ID
while True:
    apriltags = sorted(ai_vision_1.take_snapshot(AiVision.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(ai_vision_1.take_snapshot(AiVision.ALL_TAGS), key=lambda tag: tag.height)
    for tag in apriltags_by_height:
        print(tag.height)
    wait(1, SECONDS)

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

Датчик зору зі штучним інтелектом може виявляти різні об’єкти за певними класифікаціями штучного інтелекту. Залежно від моделі класифікації штучного інтелекту, вибраної під час налаштування датчика зору зі штучним інтелектом у вікні «Пристрої», будуть виявлені різні об’єкти. Наразі доступні такі моделі:

Елементи класу

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

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

0

BLUE_BALL

1

GREEN_BALL

2

RED_BALL

3

BLUE_RING

4

GREEN_RING

5

RED_RING

6

BLUE_CUBE

7

GREEN_CUBE

8

RED_CUBE

Високі ставки на змагання з робототехніки VEX V5

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

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

0

MOBILE_GOAL

1

RED_RING

2

BLUE_RING

Відповідь на конкурс робототехніки VEX V5

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

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

0

BLUE_BLOCK

1

RED_BLOCK

VEX V5 Robotics Competition Understanding

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

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

0

RED_BLUE_PIN

1

BLUE_YELLOW_PIN

2

RED_YELLOW_PIN

3

YELLOW_PIN

4

CUP

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

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

Щоб використовувати налаштований колірний підпис у проєкті, його назва має бути назвою датчика, двома символами підкреслення, а потім назвою колірного підпису. Наприклад: ai_vision_1__RED_BOX.

# Display if any objects match the RED_BOX signature
while True:
    brain.screen.set_cursor(1, 1)
    brain.screen.clear_row(1)
    # Change to any configured Color Signature
    red_box = ai_vision_1.take_snapshot(ai_vision_1__RED_BOX)
    if red_box[0].exists:
        brain.screen.print("Color detected!")
        wait(100, MSEC)

Колірні коди#

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

Щоб використовувати налаштований колірний код у проєкті, його назва має бути назвою датчика, двома символами підкреслення, а потім назвою колірного коду. Наприклад: ai_vision_1__BOX_CODE.

# Display if any objects match the BOX_CODE code
while True:
    brain.screen.set_cursor(1, 1)
    brain.screen.clear_row(1)
    # Change to any configured Color Code
    box_code = ai_vision_1.take_snapshot(ai_vision_1__BOX_CODE)
    if box_code[0].exists:
        brain.screen.print("Code detected!")
        wait(100, MSEC)

installed#

installed повертає логічне значення, яке вказує, чи підключено датчик зору штучного інтелекту до V5 Brain.

  • True – Датчик зору штучного інтелекту підключено до V5 Brain.

  • False – Датчик зору штучного інтелекту не підключено до V5 Brain.

Usage:
ai_vision_1.installed()

Параметри

Опис

Цей метод не має параметрів.

# Display a message if the AI Vision Sensor is connected
if ai_vision_1.installed():
    brain.screen.print("Installed!")

Властивості#

There are ten properties that are included with each object stored in a tuple after take_snapshot is used.

All property values except .id and .score describe the detected object’s position and size in the AI Vision Sensor’s view at the moment take_snapshot was used. These values are measured in pixels, based on the sensor’s 320 by 240 pixel resolution.

.exists#

.exists повертає логічне значення, яке вказує, чи існує індекс у кортежі чи ні.

  • True – Індекс існує.

  • False – Індекс не існує.

# Check if at least two objects are detected
while True:
    brain.screen.clear_screen()
    brain.screen.set_cursor(1, 1)
    objects = ai_vision_1.take_snapshot(AiVision.ALL_AIOBJS)

    if objects[0].exists:
        if objects[1].exists:
            brain.screen.print("At least 2")

        else:
            brain.screen.print("Less than 2")
    wait(50, MSEC)

.width#

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

# Approach an object until it's at least 100 pixels wide
while True:
    objects = ai_vision_1.take_snapshot(AiVision.ALL_AIOBJS)

    if objects[0].exists:
        if objects[0].width < 100:
            drivetrain.drive(FORWARD)
    else:
        drivetrain.stop()
    wait(50, MSEC)

.height#

.height повертає висоту виявленого об’єкта в пікселях, що є цілим числом від 1 до 240.

# Approach an object until it's at least 90 pixels tall
while True:
    objects = ai_vision_1.take_snapshot(AiVision.ALL_AIOBJS)

    if objects[0].exists:
        if objects[0].height < 90:
            drivetrain.drive(FORWARD)
    else:
        drivetrain.stop()
    wait(50, MSEC)

.centerX#

.centerX повертає x-координату центру виявленого об’єкта в пікселях, яка є цілим числом від 0 до 320.

# Turn until an object is directly in front of the sensor
drivetrain.set_turn_velocity(10, PERCENT)
drivetrain.turn(RIGHT)

while True:
    objects = ai_vision_1.take_snapshot(AiVision.ALL_AIOBJS)

    if objects[0].exists:
        if 140 < objects[0].centerX < 180:
            drivetrain.stop()
    wait(10,MSEC)

.centerY#

.centerY повертає y-координату центру виявленого об’єкта в пікселях, яка є цілим числом від 0 до 240.

# Approach an object until the object's center is
# high enough in the field of view
while True:
    objects = ai_vision_1.take_snapshot(AiVision.ALL_AIOBJS)

    if objects[0].exists:
        if objects[0].centerY < 150:
            drivetrain.drive(FORWARD)
    else:
        drivetrain.stop()
    wait(50, MSEC)

.angle#

.angle повертає орієнтацію виявленого колірного коду або ідентифікатора AprilTag у градусах, що є цілим числом від 0 до 359.

# Turn left or right depending on how a
# configured Color Code is rotated
while True:
    box_code = ai_vision_1.take_snapshot(ai_vision_1__BOX_CODE)

    if box_code[0].exists:
        if 50 < box_code[0].angle < 100:
            drivetrain.turn(RIGHT)

        elif 270 < box_code[0].angle < 330:
            drivetrain.turn(LEFT)

        else:
            drivetrain.stop()
    else:
        drivetrain.stop()
    wait(50, MSEC)

.originX#

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

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

    objects = ai_vision_1.take_snapshot(AiVision.ALL_AIOBJS)

    if objects[0].exists:
        if objects[0].originX < 120:
            brain.screen.print("To the left!")
        else:
            brain.screen.print("To the right!")
    else:
        brain.screen.print("No objects")
    wait(100, MSEC)

.originY#

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

# Display if an object is close or far
while True:
    brain.screen.clear_screen()
    brain.screen.set_cursor(1,1)

    objects = ai_vision_1.take_snapshot(AiVision.ALL_AIOBJS)

    if objects[0].exists:
        if objects[0].originY < 110:
            brain.screen.print("Close")
        else:
            brain.screen.print("Far")

.id#

.id повертає ідентифікатор виявленої класифікації ШІ або ідентифікатор AprilTag як ціле число.

Для ідентифікатора AprilTag властивість .id представляє виявлений номер ідентифікатора AprilTag у діапазоні від 0 до 36. Для класифікації ШІ властивість .id відповідає попередньо визначеному ідентифікатору в розділі Класифікації ШІ.

# Move forward when AprilTag ID 1 is detected
while True:
    apriltags = ai_vision_1.take_snapshot(AiVision.ALL_TAGS)

    if apriltags[0].exists:
        if apriltags[0].id == 1:
            robot.drive(FORWARD)
    else:
        drivetrain.stop()

    wait(50, MSEC)

.score#

.score повертає бал достовірності виявленої класифікації ШІ як ціле число від 1 до 100.

Нижчий бал означає, що датчик менш впевнений у виявленому об’єкті, тоді як вищий бал означає, що датчик більш впевнений.

Конструктори#

Конструктори використовуються для ручного створення об’єктів AiVision, Colordescта Codedesc , які необхідні для налаштування датчика штучного інтелекту поза VEXcode.

AiVision#

AiVision створює датчик зору на базі штучного інтелекту.

Використання

Vision(smartport, sigs)

Параметри

Опис

smartport

Розумний порт, до якого підключено датчик AI Vision, записаний як Ports.PORTx , де x – номер порту.

sigs

Необов’язково. Назва одного або кількох підписів, розділених комами (,):

# Create the Color Signatures
RED_BOX = Colordesc(1, 255, 0, 0, 20, 0.9)
BLUE_BOX = Colordesc(0, 26, 255, 0, 20, 0.9)

# Create the Color Code
RED_BLUE = Codedesc(RED_BOX, BLUE_BOX)

"""
Create an AI Vision Sensor with the following signatures:
- RED_BLUE
- AiVision.ALL_TAGS - for AprilTag IDs
"""
ai_vision_1 = AiVision(Ports.PORT1, RED_BLUE, AiVision.ALL_TAGS)

Colordesc#

Colordesc створює колірну сигнатуру. На датчику зору зі штучним інтелектом можна одночасно зберігати до семи різних колірних сигнатур.

Usage:
Colordesc(index, red, green, blue, hangle, hdsat)

Параметр

Опис

index

Індекс об’єкта Colordesc , від 1 до 7.
Примітка: Створення двох об’єктів Colordesc з однаковим індексним номером призведе до того, що другий створений об’єкт перезапише перший.

red

Червоне значення кольору від 0 до 255.

green

Зелене значення кольору від 0 до 255.

blue

Значення синього кольору від 0 до 255.

hangle

Допустима варіація відтінку в діапазоні градусів на колірному колі (1–40). Вищі значення дозволяють більше відхилення обертання від базового відтінку.

hdsat

Допустиме відхилення насиченості від 0,10 до 1,00. Це значення представляє частку повного діапазону насиченості, в межах якої колір може зміщуватися (наприклад, 0,10 = ±10% насиченості).

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

"""
Create a Color Signature with the following values:
- index: 1
- red: 255
- green: 0
- blue: 0
- hangle: 20
- hdsat: 0.9
"""
# Create a red Color Signature
RED_BOX = Colordesc(1, 255, 0, 0, 20, 0.9)

Codedesc#

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

Usage:
Codedesc(sig1, sig2, sig3, sig4, sig5)

Параметр

Опис

sig1

Раніше створений Кольоровий підпис.

sig2

Раніше створений Кольоровий підпис.

sig3

Необов’язково. Раніше створений Кольоровий підпис.

sig4

Необов’язково. Раніше створений Кольоровий підпис.

sig5

Необов’язково. Раніше створений Кольоровий підпис.

# Create the Color Signatures
RED_BOX = Colordesc(1, 255, 0, 0, 20, 0.9)
BLUE_BOX = Colordesc(0, 26, 255, 0, 20, 0.9)

# Create a Color Code with the Color Signatures
BOX_CODE = Codedesc(RED_BOX, BLUE_BOX)

Tagdesc#

Tagdesc створює ідентифікатор AprilTag. Ви можете використовувати його для визначення ідентифікованих ідентифікаторів AprilTag, що робить ваш код зрозумілішим та легшим для читання.

Usage:
Tagdesc(id)

Параметр

Опис

id

Ідентифікатор AprilTag, який буде використано.

# Set AprilTag ID 7 to be the "goal"
goal = Tagdesc(7)