Використання сенсора AI Vision у VEXcode V5 Python

У цій статті наведено огляд функцій, доступних для використання датчика AI Vision у Python, а також прості інструкції щодо їх використання. Ви дізнаєтесь про чотири кроки в процесі використання датчика зору AI: отримання даних, перегляд кількості отриманих об’єктів, вибір об’єкта з даних для використання та які дані з об’єкта отримати.

Отримуйте візуальні дані за допомогою датчика AI Vision Sensor

Щоб збирати інформацію про навколишнє середовище, датчик AI Vision Sensor робить зображення того, на що він зараз дивиться. Будь-які об’єкти, які він ідентифікує за допомогою зазначеногоVisual Signature поміщаються в кортеж, який потім може використовуватися іншими функціями.

take_snapshot

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

vision_objects = ai_vision_6.take_snapshot(ai_vision_6__Blue)
vision_objects = ai_vision_6.take_snapshot(ai_vision_6__Red)
vision_objects = ai_vision_6.take_snapshot(ai_vision_6__Green)

Опції для вашого Visual Signature також автоматично заповнюватимуть VEXcode після того, як ви почнете вводити початок дужок.

приклад

У цьому прикладі змінна vision_objects зберігає кортеж, що містить виявлені візуальні сигнатури від датчика AI Vision Sensor під назвою ai_vision_6. Він відображає кількість виявлених об’єктів і робить новий знімок кожні 0,5 секунди.

while True: 

# Зробити знімок для створення кортежу виявлених об’єктів
vision_objects = ai_vision_6.take_snapshot(ai_vision_6__Blue)

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

brain.screen .print("кількість об'єктів:", len(vision_objects))
очікування(0,5, СЕКУНДИ)

Визначте, скільки об'єктів було виявлено

Команду len можна використовувати з кортежами. Це можна використовувати, щоб побачити, скільки об’єктів команда take_snapshot зберегла в кортежі.

Найкраще завжди переконатися, що ви виявили об’єкт, перш ніж намагатися отримати будь-яку інформацію зі знімка. Для цього скористайтеся командою len зі змінною, у якій зберігається кортеж.

len(vision_objects) > 0

приклад

У цьому прикладі змінна vision_objects зберігає кортеж, що містить виявлені візуальні сигнатури від датчика AI Vision Sensor під назвою ai_vision_6. Він відображає кількість виявлених об’єктів і робить новий знімок кожні 0,5 секунди. Однак, якщо він виявив об’єкт, він надрукує кількість виявлених об’єктів.

while True: 
# Зробити знімок для створення кортежу виявлених об’єктів
vision_objects = ai_vision_6.take_snapshot(ai_vision_6__Blue)

# Очистити екран/скинути налаштування, щоб ми могли відобразити нову інформацію
brain.screen.clear_screen()
brain. screen.set_cursor(1, 1)

if len(vision_objects) > 0:
# Вивести кількість знайдених об'єктів
brain.screen.next_row()
brain.screen.print("кількість об'єктів:", len(vision_objects ))
очікування (0,5, СЕКУНДИ)

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

Виберіть, з якого об’єкта отримати дані

Існує два способи отримання даних із кортежу. Одним із підходів є пряме отримання інформації з найбільшого об’єкта, виявленого під час останнього використання команди take_snapshot за допомогою функції ai.vision.largest_object(). Інший метод передбачає вказівку конкретної змінної та індексу об’єкта.

ai.vision.largest_object()

ai.vision.largest_object() є допоміжною функцією для доступу до найбільшого об’єкта в кортежі, але вона працюватиме лише з останнім знімком.

while True: 
# Зробити знімок для створення кортежу виявлених об’єктів
vision_objects = ai_vision_6.take_snapshot(ai_vision_6__Blue)

# Очистити екран/скинути налаштування, щоб ми могли відобразити нову інформацію
brain.screen.clear_screen()
brain. screen.set_cursor(1, 1)

# Перевірте, чи існує об’єкт перед отриманням даних
if len(vision_objects) > 0:
brain.screen.print(Center X: ", ai_vision.largest_object().centerX)
else :
brain.screen.print("no object")
wait(0.5, SECONDS)

У цьому прикладі код перевіряє, чи існує об’єкт, перш ніж використовувати функцію ai.vision.largest_object() для повернення властивості .centerX найбільшого виявленого об’єкта та його друку.

vision_objects[0]

Інший спосіб отримати дані з кортежу — це напряму викликати змінну, яка зберігає кортеж. У квадратних дужках вкажіть індекс об’єкта, з якого потрібно отримати дані. Повернений кортеж об’єктів завжди містить найбільший об’єкт першим з індексом 0. Згодом об’єкти впорядковуються від найбільшого до найменшого.

while True: 
# Зробити знімок для створення кортежу виявлених об’єктів
vision_objects = ai_vision_6.take_snapshot(ai_vision_6__Blue)

# Очистити екран/скинути налаштування, щоб ми могли відобразити нову інформацію
brain.screen.clear_screen()
brain. screen.set_cursor(1, 1)

# Перевірте, чи існує об’єкт перед отриманням даних
if len(vision_objects) > 0:
brain.screen.print(Center X: ", vision_object[0].centerX)
else:
brain.screen.print("no object")
wait(0.5, SECONDS)

У цьому прикладі код перевіряє, чи існує об’єкт, перш ніж використовувати функцію vision_object[0] для повернення властивості .centerX об’єкта 0 index і його друку.

Виберіть, які дані отримати з об’єкта

З кожного об’єкта є вісім властивостей, які можна викликати.

  • .висота
  • .ширина
  • .centerX
  • .centerY
  • .originX
  • .originY
  • .кут
  • .існує

.висота

Властивість .height повертає висоту виявленого об’єкта в пікселях.

Використовуйте цей код, щоб повернути властивість .height:

vision_objects[0].height

Властивість .height поверне значення від 0 до 240 пікселів.

.ширина

Властивість .width повертає ширину виявленого об’єкта в пікселях.

Використовуйте цей код, щоб повернути властивість .width:

vision_objects[0].width

Властивість .width поверне значення від 0 до 320.

.centerX

Властивість .centerX повідомляє координату X центру виявленої Візуальної сигнатури.

Використовуйте цей код, щоб повернути властивість .centerX:

vision_objects[0].centerX

Властивість .centerX поверне число від 0 до 320.

.centerY

Властивість .centerY повідомляє координату Y центру виявленої Візуальної сигнатури.

Використовуйте цей код, щоб повернути властивість .centerY:

vision_objects[0].centerY

Властивість .centerY поверне число від 0 до 240.

.originX

Властивість .originX повідомляє координату X крайнього верхнього лівого кута виявленої візуальної сигнатури.

Використовуйте цей код, щоб повернути властивість .originX:

vision_objects[0].originX

Властивість .originXповерне число від 0 до 320.

.originY

Властивість .originY повідомляє координату Y крайнього верхнього лівого кута виявленої візуальної сигнатури .

Використовуйте цей код, щоб повернути властивість .originY:

vision_objects[0].originY

Властивість .originYповерне число від 0 до 240.

.кут

Властивість .angle повертає значення кута коду кольору .

Використовуйте цей код, щоб повернути властивість .angle:

vision_objects[0].angle

Властивість .angle повертає виявлену орієнтацію коду кольору в діапазоні від 0 до 359,99 градусів.

.існує

.exists є логічною властивістю, яка повертає істину, якщо це дійсний об’єкт. 

Він поверне false, якщо об’єкт недійсний, наприклад, якщо використовується від’ємне ціле число. Якщо об’єкт недійсний, усі інші властивості повертатимуть 0 як значення.

while True: 
# Зробіть знімок для створення кортежу виявлених об’єктів
vision_objects = ai_vision_6.take_snapshot(ai_vision_6__Blue)
# очистіть екран/скиньте, щоб ми могли відобразити нову інформацію
brain.screen.clear_screen()
brain.screen .set_cursor(1, 1)

if vision_objects[0].exists:
brain.screen.print("x:", vision_objects[0].centerX)
else:
brain.screen.print("no object" )
очікування (0,1, СЕКУНДИ)

У цьому прикладі код перевіряє властивість .exists , якщо він повертає значення true, він друкує значення властивості .centerX у Brain. Якщо властивість .exists повертає false, буде надруковано, що об’єкта немає.

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

Last Updated: