ИИ-зрение#
Введение#
Датчик изображения с искусственным интеллектом способен обнаруживать и отслеживать объекты, цвета и идентификаторы AprilTag. Это позволяет роботу анализировать окружающую среду, следовать за объектами и реагировать на основе обнаруженных визуальных данных.
На этой странице в качестве примеров названий датчика AI Vision, цветовой сигнатуры и цветового кода используются ai_vision_1, RED_BOXи BOX_CODE соответственно. При необходимости замените их своими собственными настроенными именами.
Ниже приведён список всех методов:
Геттеры – получают данные с датчика искусственного интеллекта.
take_snapshot– Захватывает данные для конкретной подписи.installed– Подключен ли датчик AI Vision к V5 Brain.
Свойства – Данные объекта, возвращенные из take_snapshot.
.exists– Существует ли объект в текущем обнаружении..width– Ширина обнаруженного объекта..height– Высота обнаруженного объекта..centerX– X-координата центра объекта..centerY– Y-положение центра объекта..angle– Ориентация цветового кода..originX– X-позиция верхнего левого угла объекта..originY– Y-координата верхнего левого угла объекта..id– Классификация или идентификатор тега объекта..score– Показатель достоверности для классификаций ИИ.
Конструкторы – Вручную инициализируют и настраивают датчик AI Vision Sensor и его сигнатуры.
Геттеры#
take_snapshot#
take_snapshot фильтрует данные из кадра датчика AI Vision Sensor в одну сигнатуру — сохраненное описание чего-либо, что датчик может распознать, например, предварительно обученный объект, идентификатор AprilTag или настроенную цветовую сигнатуру или цветовой код — и возвращает кортеж.
Цветовые сигнатуры и Цветовые коды необходимо предварительно настроить в утилите Vision, прежде чем их можно будет использовать с этим методом.
Кортеж хранит объекты, упорядоченные по ширине от наибольшего к наименьшему, начиная с индекса 0. Доступ к свойствам каждого объекта (properties) осуществляется по его индексу. Если соответствующие объекты не обнаружены, возвращается пустой кортеж.
Usage:
ai_vision_1.take_snapshot(SIGNATURE)
Параметры |
Описание |
|---|---|
|
Фильтрует набор данных, чтобы включить только данные с заданной сигнатурой. Доступные сигнатуры:
|
|
Необязательный параметр. Задает максимальное количество объектов, которые могут быть возвращены, от 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)
Примечание: Возвращаемый кортеж можно отсортировать по любому свойству, а не только по ширине, используя функцию Python sorted Например, сортировка по ID 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 |
|
1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
Соревнования по робототехнике VEX V5: высокие ставки
Идентификационный номер |
Классификация ИИ |
|---|---|
0 |
|
1 |
|
2 |
|
Противодействие проведению соревнований по робототехнике VEX V5
Идентификационный номер |
Классификация ИИ |
|---|---|
0 |
|
1 |
|
VEX V5 Robotics Competition Override
Идентификационный номер |
Классификация ИИ |
|---|---|
0 |
|
1 |
|
2 |
|
3 |
|
4 |
|
Цветовые сигнатуры#
Цветовая сигнатура — это уникальный цвет, который может распознать датчик искусственного интеллекта. Эти сигнатуры позволяют датчику искусственного интеллекта обнаруживать и отслеживать объекты на основе их цвета. После настройки цветовой сигнатуры датчик может идентифицировать объекты с этим конкретным цветом в своем поле зрения. Цветовые сигнатуры используются с 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 возвращает логическое значение, указывающее, подключен ли датчик AI Vision Sensor в данный момент к V5 Brain.
True– Датчик AI Vision подключен к процессору V5.False– Датчик AI Vision Sensor не подключен к 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!")
Характеристики#
После использования take_snapshot каждый объект, хранящийся в кортеже, включает в себя десять свойств.
Все значения свойств, кроме .id и .score описывают положение и размер обнаруженного объекта в поле зрения датчика AI Vision в момент использования take_snapshot Эти значения измеряются в пикселях, исходя из разрешения датчика 320 на 240 пикселей.
.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 , которые необходимы для настройки датчика AI Vision Sensor вне VEXcode.
AiVision#
AiVision создает датчик искусственного интеллекта для обработки изображений.
Использование
Vision(smartport, sigs)
Параметры |
Описание |
|---|---|
|
Интеллектуальный порт, к которому подключен датчик AI Vision, обозначается как |
|
Необязательно. Название одной или нескольких подписей, разделенных запятыми (
|
# 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 создает цветовую сигнатуру. На датчике AI Vision Sensor одновременно можно хранить до семи различных цветовых сигнатур.
Usage:
Colordesc(index, red, green, blue, hangle, hdsat)
Параметр |
Описание |
|---|---|
|
Индекс объекта |
|
Значение красного цвета варьируется от 0 до 255. |
|
Значение зеленого цвета варьируется от 0 до 255. |
|
Значение синего цвета варьируется от 0 до 255. |
|
Допустимое отклонение оттенка в градусах на цветовом круге (1–40). Более высокие значения допускают большее отклонение от базового оттенка при вращении. |
|
Допустимое отклонение насыщенности от 0,10 до 1,00. Это значение представляет собой долю полного диапазона насыщенности, в пределах которой цвет может изменяться (например, 0,10 = ±10% насыщенности). |

"""
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)
Параметр |
Описание |
|---|---|
|
Ранее созданная Цветовая подпись. |
|
Ранее созданная Цветовая подпись. |
|
Необязательно. Ранее созданная Цветовая подпись. |
|
Необязательно. Ранее созданная Цветовая подпись. |
|
Необязательно. Ранее созданная Цветовая подпись. |
# 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)
Параметр |
Описание |
|---|---|
|
Идентификатор AprilTag, который необходимо использовать. |
# Set AprilTag ID 7 to be the "goal"
goal = Tagdesc(7)