Программирование с использованием датчика зрения ИИ в VEXcode EXP Python

Убедитесь, что у вас настроены цветовых сигнатур и цветовых кодов с помощью датчика AI Vision, чтобы их можно было использовать с вашими блоками. Более подробную информацию об их настройке вы можете узнать, прочитав статьи ниже:

Датчик AI Vision также может обнаруживать AI-классификации и AprilTags. Чтобы узнать, как включить эти режимы обнаружения, перейдите по ссылке:

Более подробную информацию об этих отдельных командах и о том, как их использовать в VEXcode, можно найти на сайте API.


Получайте визуальные данные с помощью датчика зрения ИИ

Каждая команда AI Vision Sensor будет начинаться с имени настроенного AI Vision Sensor. Во всех примерах в этой статье имя используемого датчика AI Vision будет ai_vision_1.

take_snapshot

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

  • AЦветовая подпись илиЦветовой код
    • Эти визуальные сигнатуры начинаются с имени датчика искусственного интеллекта, двойного подчеркивания, а затем имени визуальной сигнатуры, например: ai_vision_1__Blue.
  • Классификации ИИ - AiVision.ALL_AIOBJS
  • АпрельТеги- AiVision.ALL_TAGS

При создании снимка будет создан кортеж всех обнаруженных объектов, которые вы указали. Например, если вы хотите обнаружить «синий» цветовой признак, а датчик искусственного интеллекта обнаружил 3 разных синих объекта, данные со всех трех будут помещены в кортеж.

В этом примере переменная vision_objects хранит кортеж, содержащий обнаруженные цветовые сигнатуры «фиолетового»цвета от датчика AI Vision с именем ai_vision_1. Он отображает количество обнаруженных объектов и делает новый снимок каждые 0,5 секунды.

while True: 
# Получить снимок всех сигнатур фиолетового цвета и сохранить его в vision_objects.
vision_objects = ai_vision_1.take_snapshot(ai_vision_1__Purple)

# Перед извлечением данных убедитесь, что объект был обнаружен в снимке.
если vision_objects[0].exists == True

brain.screen.clear_screen()
brain.screen.set_cursor(1, 1)

brain.screen.print("Количество объектов:", len(vision_objects))
wait(0.5, SECONDS)

Свойства объекта

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

  • идентификатор
  • centerX и centerY
  • originX и originY
  • ширина
  • высота
  • угол
  • счет
  • существует

Чтобы получить доступ к свойству объекта, используйте имя переменной, хранящей кортеж, а затем индекс объекта.

Индекс объекта указывает, какое конкретно свойство объекта вы хотите получить. После создания снимка датчик AI Vision автоматически сортирует объекты по размеру. Самому большому объекту присваивается индекс 0, а объектам меньшего размера присваиваются более высокие индексные номера.

Например, вызов ширины самого большого объекта внутри переменной vision_objects будет выглядеть так: vision_objects[0].width.

идентификатор

Свойство id доступно только для AprilTags и AI Classifications.

Утилита AI Vision отслеживает три AprilTags. Каждая метка идентифицируется, определяется местоположением и обозначается контуром, что указывает на ее отслеживание системой. Идентификаторы AprilTag в этом примере — 0, 3 и 9.

ДляAprilTagсвойство id представляет собой обнаруженный номерAprilTag ID.

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

Утилита AI Vision отслеживает четыре объекта: два BuckyBall и два Ring. Каждый объект идентифицируется, локализуется и обозначается контуром, что указывает на его отслеживание системой. Утилита запоминает идентификатор объекта, в данном примере это Красный шар, Синий шар, Зеленое кольцо и Красное кольцо.

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

Идентификация конкретных Классификации ИИпозволяет роботу сосредотачиваться только на определенных объектах, например, хотеть двигаться только к красному бакиболу, а не к синему.

Дополнительную информацию о классификациях ИИ AprilTags и и о том, как включить их обнаружение в утилите AI Vision, можно найти в этих статьях.

centerX и centerY

Это координаты центра обнаруженного объекта в пикселях.

На изображении датчик искусственного интеллекта отслеживает синий бакибол. Бакибол имеет прямоугольник отслеживания вокруг себя, а на этикетке выше указано, что его положение по оси X составляет 176, а положение по оси Y — 117. Центр прямоугольника отслеживания подсвечивается, чтобы продемонстрировать, что положение измеряется от центра.

Координаты CenterX и CenterY помогают в навигации и позиционировании. Датчик AI Vision имеет разрешение 320 x 240 пикселей.

На изображении датчик искусственного интеллекта отслеживает два синих куба. Вокруг кубов имеются прямоугольники отслеживания, один из которых расположен гораздо ближе к камере. У ближайшего из них позиция Y равна 184, а у дальнего — позиция Y равна 70.

Видно, что объект, расположенный ближе к датчику AI Vision, будет иметь более низкую координату CenterY, чем объект, расположенный дальше.

В этом примере, поскольку центр поля зрения датчика AI Vision находится в точке (160, 120), робот будет поворачивать направо до тех пор, пока координата centerX обнаруженного объекта не станет больше 150 пикселей, но меньше 170 пикселей.

while True:
# Получить снимок всех сигнатур синего цвета и сохранить его в vision_objects.
vision_objects = ai_vision_1.take_snapshot(ai_vision_1__Blue)

# Перед извлечением данных убедитесь, что объект был обнаружен в снимке.
if vision_objects[0].exists == True

# Проверяем, находится ли объект в центре поля зрения датчика зрения ИИ.
if vision_objects[0].centerX > 150 и 170 > vision_objects[0].centerX:

# Продолжайте поворачивать направо, пока объект не окажется в центре поля зрения.
drivetrain.turn(RIGHT)
else:
drivetrain.stop()
wait(5, MSEC)

originX и originY

OriginX и OriginY — координаты верхнего левого угла обнаруженного объекта в пикселях.

На изображении датчик искусственного интеллекта отслеживает синий бакибол. Бакибол имеет прямоугольник отслеживания вокруг себя, а на этикетке выше указано, что его положение по оси X составляет 176, а положение по оси Y — 117. Верхний левый угол прямоугольника отслеживания подсвечен, чтобы показать, что исходное положение измеряется от его верхнего левого угла.

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

ширина и высота

Это ширина или высота обнаруженного объекта в пикселях.

На изображении датчик искусственного интеллекта отслеживает синий бакибол. Вокруг бакибола имеется прямоугольник отслеживания, а на этикетке выше указано, что его ширина составляет 80 пикселей, а высота — 78 пикселей. Красные стрелки выделяют прямоугольник отслеживания, демонстрируя его ширину и высоту.

Измерения ширины и высоты помогают идентифицировать различные объекты. Например, Бакибол будет иметь большую высоту, чем Кольцо.

На изображении датчик искусственного интеллекта отслеживает два синих куба. Вокруг кубов имеются прямоугольники отслеживания, один из которых расположен гораздо ближе к камере. Ближний имеет ширину 144 и высоту 113, а дальний — ширину 73 и высоту 84.

Ширина и высота также указывают расстояние до объекта от датчика AI Vision. Меньшие значения обычно означают, что объект находится дальше, тогда как большие значения говорят о том, что он ближе.

В этом примере для навигации используется ширина объекта. Робот будет приближаться к объекту до тех пор, пока ширина не достигнет определенного размера, а затем остановится.

while True:
# Получить снимок всех сигнатур синего цвета и сохранить его в vision_objects.
vision_objects = ai_vision_1.take_snapshot(ai_vision_1__Blue)

# Перед извлечением данных убедитесь, что объект был обнаружен в снимке.
if vision_objects[0].exists == True

# Проверяем, находится ли самый большой объект близко к датчику зрения ИИ, измеряя его ширину.
if vision_objects[0].width < 250:

# Подъезжаем ближе к объекту, пока его ширина не станет больше 250 пикселей.
drivetrain.drive(FORWARD)
else:
drivetrain.stop()

wait(5, MSEC)

угол

Анимация красного и зеленого квадратов, вращающихся вместе, демонстрирующая значение угла на 360 градусов.

Свойство angle доступно только дляцветовых кодов и

Это показывает, ориентирован ли обнаруженный Цветовой кодили AprilTag по-разному.

Датчик искусственного интеллекта на изображении отслеживает цветовой код: зеленый, затем синий. На видеотрансляции виден зеленый куб, установленный на синем кубе. Значение угла цветового кода выделено и составляет 87 градусов, что указывает на то, что цветовой код ориентирован вертикально.

Вы можете увидеть, ориентирован ли робот по-разному относительно цветового кода илиAprilTag , и принять решения по навигации в соответствии с этим.

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

Например, если цветовой код не обнаружен под правильным углом, то робот не сможет правильно захватить представляемый им объект.

счет

Свойство баллов используется при обнаруженииклассификаций ИИ с помощью датчика зрения ИИ.

Утилита AI Vision отслеживает четыре объекта: два BuckyBall и два Ring. Каждый объект идентифицируется, локализуется и обозначается контуром, что указывает на его отслеживание системой. Утилита также выводит оценку классификации ИИ для каждого объекта, в этом примере каждая оценка составляет 99%.

Показатель уверенности показывает, насколько точно датчик AI Vision определяет объект. На этом изображении он на 99% уверен в идентификации классификаций ИИ этих четырех объектов. Эту оценку можно использовать, чтобы убедиться, что ваш робот фокусируется только на очень надежных обнаружениях.

существует

Свойство существует используется для определения того, была ли обнаружена указанная Визуальная сигнатура в последнем сделанном снимке.

Это позволяет проверить, были ли обнаружены какие-либо объекты в предыдущем снимке. Это свойство вернет True, если объект существует, и False, если объект не существует.

 

For more information, help, and tips, check out the many resources at VEX Professional Development Plus

Last Updated: