Датчик изображения с искусственным интеллектом#
Введение#
Датчик IQ AI Vision Sensor способен обнаруживать и отслеживать объекты, цвета и идентификаторы AprilTag. Это позволяет роботу анализировать окружающую среду, следовать за объектами и реагировать на основе обнаруженных визуальных данных.
В приведенных ниже примерах настроенный датчик IQ AI Vision Sensor будет называться ai_vision_1, а настроенные объекты Color Signature, такие как RED_BOX, будут использоваться во всех последующих примерах в этой документации по API при обращении к AiVision.
Ниже приведён список всех методов:
Getters — Получайте данные с датчика IQ AI Vision.
take_snapshot— Захватывает данные для конкретной подписи.installed— Подключен ли датчик зрения IQ AI к мозгу IQ (2-го поколения).
Свойства — Данные объекта, возвращенные из take_snapshot.
.exists— Существует ли объект в текущем обнаружении..width— Ширина обнаруженного объекта..height— Высота обнаруженного объекта..centerX— X-координата центра объекта..centerY— Y-положение центра объекта..angle— Ориентация цветового кода или идентификатора AprilTag..originX— X-позиция верхнего левого угла объекта..originY— Y-координата верхнего левого угла объекта..id— Классификация или идентификатор тега объекта..score— Показатель достоверности для классификаций ИИ.
Конструкторы — вручную инициализируют и настраивают датчики.
Геттеры#
take_snapshot#
take_snapshot фильтрует данные из кадра датчика IQ AI Vision Sensor в одну сигнатуру — сохраненное описание чего-либо, что датчик может распознать, например, предварительно обученный объект, идентификатор AprilTag или настроенную цветовую сигнатуру или цветовой код — и возвращает кортеж.
Цветовые сигнатуры и Цветовые коды необходимо предварительно настроить в утилите Vision, прежде чем их можно будет использовать с этим методом.
Кортеж хранит объекты, упорядоченные по ширине от наибольшего к наименьшему, начиная с индекса 0. Доступ к свойствам каждого объекта (properties) осуществляется по его индексу. Если соответствующие объекты не обнаружены, возвращается пустой кортеж.
Usage:
ai_vision_1.take_snapshot(SIGNATURE)
Параметры |
Описание |
|---|---|
|
Фильтрует набор данных, чтобы включить только данные с заданной сигнатурой. Доступные сигнатуры:
|
|
Необязательный параметр. Задает максимальное количество объектов, которые могут быть возвращены, от 1 до 24 (по умолчанию: 8). |
# Move 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)
Классификации ИИ#
Датчик изображения IQ AI Vision Sensor способен обнаруживать различные объекты в соответствии с определенными классификациями ИИ. В зависимости от модели классификации ИИ, выбранной при настройке датчика изображения AI Vision Sensor в окне «Устройства», будут обнаруживаться разные объекты. В настоящее время доступны следующие модели:
Предметы для учебного класса
Идентификационный номер |
Классификация ИИ |
|---|---|
0 |
|
1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
Соревнования по робототехнике VEX IQ: комбинированный вариант
Идентификационный номер |
Классификация ИИ |
|---|---|
0 |
|
1 |
|
2 |
|
3 |
|
Повысьте уровень соревнований по робототехнике VEX IQ
Идентификационный номер |
Классификация ИИ |
|---|---|
0 |
|
1 |
|
2 |
|
Цветовые сигнатуры#
Цветовая сигнатура — это уникальный цвет, который может распознать датчик IQ AI Vision. Эти сигнатуры позволяют датчику IQ AI Vision обнаруживать и отслеживать объекты на основе их цвета. После настройки цветовой сигнатуры датчик может идентифицировать объекты с этим конкретным цветом в своем поле зрения. Цветовые сигнатуры используются с 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)
Цветовые коды#
Цветовой код — это структурированный шаблон, состоящий из цветовых сигнатур, расположенных в определенном порядке. Эти коды позволяют датчику IQ AI Vision распознавать заранее заданные цветовые схемы. Цветовые коды полезны для идентификации сложных объектов или создания уникальных маркеров для автономной навигации.
Для использования настроенного цветового кода в проекте его имя должно состоять из имени датчика, двух подчеркиваний, а затем имени цветового кода. Например: 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 возвращает логическое значение, указывающее, подключен ли в данный момент датчик IQ AI Vision Sensor к IQ (2-го поколения) Brain.
True— Датчик зрения IQ AI подключен к мозгу IQ (2-го поколения).False— Датчик зрения IQ AI не подключен к мозгу IQ (2-го поколения).
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 описывают положение и размер обнаруженного объекта в поле зрения датчика IQ 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 возвращает ID обнаруженной классификации ИИ или ID AprilTag в виде целого числа. Классификации ИИ зависят от модели, которая настроена в утилите AI Vision.
Для идентификатора 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.
Более низкий балл означает, что датчик менее уверен в обнаружении объекта, а более высокий балл означает, что датчик более уверен.
# Display if a score is confident
while True:
objects = ai_vision_1.take_snapshot(AiVision.ALL_AIOBJS)
brain.screen.clear_screen()
brain.screen.set_cursor(1, 1)
if objects[0].exists:
if objects[0].score > 95:
brain.screen.print("Confident")
else:
brain.screen.print("Not confident")
wait(50, MSEC)
Строители#
Конструкторы используются для ручного создания объектов AiVision, Colordescи Codedesc , которые необходимы для настройки датчика IQ AI Vision Sensor вне VEXcode.
AI Vision Sensor#
AiVision создает датчик интеллектуального искусственного интеллекта (IQ AI Vision Sensor).
Использование
Vision(port, sigs)
Параметры |
Описание |
|---|---|
|
К какому интеллектуальному порту подключается датчик IQ AI Vision Sensor, от 1 до 12. |
|
Необязательно. Название одной или нескольких подписей:
|
Пример
ai_vision_1 = AiVision(Ports.PORT1, AiVision.ALL_AIOBJS)
# Move 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)
Color Signature#
Colordesc создает цветовую сигнатуру. На датчике IQ AI Vision Sensor одновременно можно хранить до семи различных цветовых сигнатур.
Применение:
Colordesc(index, uMin, uMax, uMean, vMin, vMax, vMean, rgb, type)
Параметр |
Описание |
|---|---|
|
Индекс объекта |
|
Значение от |
|
Значение от |
|
Значение от |
|
Значение от |
|
Значение от |
|
Значение от |
|
Значение от |
|
Значение от |
Чтобы получить значения для создания цветовой сигнатуры, перейдите в Утилита Vision. После настройки цветовой сигнатуры скопируйте значения параметров из окна конфигурации.
Пример
# Create a new Signature RED_BOX with the Colordesc class
RED_BOX = Colordesc(1, 10121, 10757, 10439,-1657, -1223, -1440,2.5, 1)
# Create a new AI Vision Sensor "ai_vision_1" with the AiVision
# class, with the RED_BOX Signature.
ai_vision_1 = AiVision(Ports.PORT1, 100, RED_BOX)
# Move forward if a red object is detected
while True:
red_object = ai_vision_1.take_snapshot(RED_BOX)
if red_object[0].exists:
drivetrain.drive_for(FORWARD, 10, MM)
wait(5, MSEC)
Color Code#
Codedesc создает цветовой код. Для его использования требуется как минимум две уже определенные цветовые сигнатуры. На датчике зрения можно одновременно хранить до восьми различных цветовых кодов.
Применение:
Codedesc(sig1, sig2, sig3, sig4, sig5)
Параметр |
Описание |
|---|---|
|
Ранее созданная Цветовая подпись. |
|
Ранее созданная Цветовая подпись. |
|
Необязательно. Ранее созданная Цветовая подпись. |
|
Необязательно. Ранее созданная Цветовая подпись. |
|
Необязательно. Ранее созданная Цветовая подпись. |
Пример
# Create two new Signatures for a red and blue box
RED_BOX = Colordesc(1, 10121, 10757, 10439,-1657, -1223, -1440, 2.5, 1)
BLUE_BOX = Colordesc(2, -4443, -3373, -3908,6253, 7741, 6997, 2.5, 1)
# Create a Color Code for a red box to the left of a blue box
RED_BLUE = Codedesc(RED_BOX, BLUE_BOX)
# Create a new AI Vision Sensor "ai_vision_1" with the AiVision
# class, with the RED_BOX and BLUE_BOX Signatures.
ai_vision_1 = AiVision(Ports.PORT1, RED_BOX, BLUE_BOX)
# Display a message if Color Code is detected
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(RED_BLUE)
if box_code[0].exists:
brain.screen.print("Code detected!")
wait(100, MSEC)