Кодування за допомогою сенсора штучного інтелекту у VEXcode V5 на C++

Переконайтеся, що у вас налаштовано колірних підписів та кольорові коди за допомогою датчика зору штучного інтелекту, щоб їх можна було використовувати з вашими блоками. Щоб дізнатися більше про те, як їх налаштувати, ви можете прочитати статті нижче:

Датчик зору на базі штучного інтелекту також може виявляти класифікації штучного інтелекту та теги AprilTags. Щоб дізнатися, як увімкнути ці режими виявлення, перейдіть сюди:

Щоб дізнатися більше про ці окремі команди та про те, як їх використовувати у VEXcode, перейдіть на сайт API.


Отримання візуальних даних за допомогою датчика зору зі штучним інтелектом

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

зробити знімок

Метод takeSnapshot робить знімок того, що наразі бачить датчик зору штучного інтелекту, та витягує дані з цього знімка, які потім можна використовувати в проєкті. Під час створення знімка потрібно вказати, який тип об'єкта має збирати сенсор AI Vision Sensor, дані якого слід збирати:

  • AПідпис кольору абоКод кольору
    • Ці візуальні підписи починаються з назви датчика AI Vision, подвійного підкреслення, а потім назви візуального підпису, наприклад: AIVision1__Blue.
  • Класифікації ШІ - aivision::ALL_AIOBJS
  • квітняТеги- aivision::ВСІ_ТЕГИ

Зробивши знімок, ви створите масив усіх виявлених об'єктів, які ви вказали. Наприклад, якщо ви хочете виявити "синій" колірний сигнал , і датчик зору зі штучним інтелектом виявив 3 різні сині об'єкти, дані з усіх трьох будуть поміщені в масив.

У цьому прикладі знімок "синього" кольоровогоз датчика зору штучного інтелекту з назвою AIVision1. Він відображає кількість виявлених об'єктів у масиві та робить новий знімок кожні 0,5 секунди.

while (true) {
// Отримати знімок усіх об'єктів синього кольору.
AIVision.takeSnapshot(AIVision1__Blue);

// Перед отриманням даних перевірте, чи виявлено об'єкт на знімку.
якщо (AIVision.objectCount > 0) {

Brain.Screen.clearScreen();
Brain.Screen.setCursor(1, 1);
Brain.Screen.print(AIVision1.objectCount);
}
wait(5, мс);
}

об'єкти

Кожен об'єкт зі знімка має різні властивості, які можна використовувати для повідомлення інформації про цей об'єкт. Метод objects дозволяє отримати доступ до цих властивостей.

Доступні властивості такі:

  • ідентифікатор
  • центрX та центрY
  • походженняX та походженняY
  • ширина
  • висота
  • кут
  • існує
  • рахунок

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

Індекс об'єкта вказує, властивість якого конкретного об'єкта потрібно отримати. Після зйомки, датчик зору зі штучним інтелектом автоматично сортує об'єкти за розміром. Найбільшому об'єкту присвоюється індекс 0, а менші об'єкти отримують вищі індексні номери.

Наприклад, виклик ширини найбільшого об'єкта буде AIVision1.objects[0].width.

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

Властивість id доступна лише для класифікацій AI AprilTags та

Три квадратні ідентифікаційні маркери, позначені ідентифікаторами 0, 9 та 3, кожен з відповідними координатами та розмірами, відображеними білим текстом. ID 0 знаходиться ліворуч, ID 9 — праворуч, а ID 3 — внизу по центру. Кожен маркер має унікальний чорно-білий візерунок всередині квадрата.

Для значенняAprilTagвластивість id представляє виявлений ідентифікаційний номерAprilTag(s)

Визначення конкретних квітневих тегів дозволяє вибіркову навігацію. Ви можете запрограмувати свого робота рухатися до певних міток, ігноруючи інші, ефективно використовуючи їх як покажчики для автоматичної навігації.

На зображенні позначено дві кульки та два кільця з позначками, що вказують їхнє положення, розмір та рахунок. Червона кулька знаходиться ліворуч, синя кулька — праворуч, зелене кільце — внизу ліворуч, а червоне кільце — внизу праворуч. Кожен об'єкт обведено білим контуром, а такі деталі, як координати X, Y, ширина, висота та оцінка 99%, відображаються білим текстом.

Длякласифікацій ШІвластивість id представляє конкретний тип виявленої класифікації ШІ.

Визначення конкретних Класифікації ШІдозволяє роботу зосереджуватися лише на певних об'єктах, наприклад, бажати рухатися лише до червоного Бакібола, а не до синього.

Перейдіть до цих статей, щоб отримати додаткові відомості про квітень, теги та , класифікації ШІ та про те, як увімкнути їх виявлення в утиліті ШІ Vision.

центрX та центрY

Це центральні координати виявленого об'єкта в пікселях.

Синій Бакібол відстежується системою комп'ютерного зору. Об'єкт обведений білим квадратом, а всередині контуру знаходиться менший червоний квадрат, що оточує білий хрест по центру. У верхньому лівому куті зображення є позначка, що об'єкт синього кольору, з координатами X:176, Y:117 та розмірами W:80, H:78.

Координати CenterX та CenterY допомагають з навігацією та позиціонуванням. Датчик зору зі штучним інтелектом має роздільну здатність 320 x 240 пікселів.

Два сині кубічні об'єкти, що відстежуються системою зору. Верхній об'єкт позначено координатами X:215, Y:70 та розмірами W:73, H:84, білим контуром та білим хрестом по центру. Нижній об'єкт позначено координатами X:188, Y:184 та розмірами W:144, H:113, також обведено білим кольором з білим хрестом по центру.

Ви можете бачити, що об'єкт, розташований ближче до датчика зору штучного інтелекту, матиме нижчу координату CenterY, ніж об'єкт, розташований далі.

У цьому прикладі, оскільки центр поля зору датчика штучного інтелекту (AI Vision Sensor) знаходиться в точці (160, 120), робот повертатиме праворуч, доки координата centraX виявленого об'єкта не стане більшою за 150 пікселів, але меншою за 170 пікселів.

while (true) {
  // Отримати знімок усіх об'єктів синього кольору.
  AIVision.takeSnapshot(AIVision__Blue);

  // Перед отриманням даних перевірте, чи було виявлено об'єкт на знімку.
  якщо (AIVision.objectCount > 0) {

    якщо (AIVision.objects[0].centerX > 150.0 && 170.0 > AIVision.objects[0].centerX) {
      Drivetrain.turn(праворуч);
    } else {
      Drivetrain.stop();
    }
  }
  wait(5, мс);
}

походження X та походження

OriginX та OriginY – це координата у верхньому лівому куті виявленого об'єкта в пікселях.

Синій Бакібол відстежується системою зору. Білий контур оточує об'єкт, а всередині нього розташований білий хрест по центру. У верхньому лівому куті позначено синій колір об'єкта, а також координати X:176, Y:117 та розміри W:80, H:78. Невеликий червоний квадрат виділяє верхній лівий кут об'єкта.

Координати OriginX та OriginY допомагають з навігацією та позиціонуванням. Поєднуючи цю координату з шириною та висотою об'єкта, можна визначити розмір рамки розміру об'єкта. Це може допомогти у відстеженні рухомих об'єктів або навігації між об'єктами.

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

Це ширина або висота виявленого об'єкта в пікселях.

На зображенні зображено синій Бакібол з білим квадратним контуром, який відстежує його. У верхньому лівому куті є позначка, яка вказує, що це синій об'єкт з координатами X:176, Y:117 та розмірами Ш:80, В:78. Червоними стрілками виділено ширину та висоту об'єкта.

Вимірювання ширини та висоти допомагають ідентифікувати різні об'єкти. Наприклад, Бакібол матиме більшу висоту, ніж Кільце.

Два сині кубічні об'єкти відстежуються системою візуального розпізнавання. Верхній куб має білий контур з міткою, що вказує його положення як X:215, Y:70 та розміри Ш:73, В:84. Нижній куб має схожий білий контур з позначкою X:188, Y:184 та розмірами Ш:144, В:113. Кожен куб має центрований білий хрест, що, ймовірно, вказує на фокусну точку для відстеження. Мітки виділяють вимірювання та дані відстеження для кожного об'єкта.

Ширина та висота також вказують на відстань об'єкта від датчика зору штучного інтелекту. Менші виміри зазвичай означають, що об'єкт знаходиться далі, тоді як більші виміри свідчать про те, що він ближче.

У цьому прикладі ширина об'єкта використовується для навігації. Робот наближатиметься до об'єкта, доки його ширина не досягне певного розміру, перш ніж зупинитися.

while (true) {
  // Отримати знімок усіх об'єктів Blue.
  AIVision.takeSnapshot(AIVision1__Blue);

  // Перед отриманням даних перевірте, чи було виявлено об'єкт на знімку.
  якщо (AIVision.objectCount > 0) {

    якщо (AIVision.objects[0].width < 250.0) {
      Drivetrain.drive(forward);
    } else {
      Drivetrain.stop();
    }
  }
  wait(5, мс);
}

кут

Обертовий GIF-файл із червоними та зеленими блоками. Коли блоки розташовані ідеально горизонтально від червоного до зеленого, вони показують, що мають кут 0 градусів. Якщо червоний блок знаходиться вертикально над зеленим блоком, він знаходиться під кутом 90 градусів. Якщо блоки горизонтально розташовані від зеленого до червоного, це 180 градусів. Якщо зелений блок знаходиться вертикально над червоним блоком, це 20 градусів.

Властивість кута доступна лише дляколірних кодів таквітня. Теги

Це показує, чи виявлений Колірний кодабо AprilTag орієнтований по-різному.

Стопка з двох кубів, один зелений зверху та один синій знизу, що відстежуються системою зору. Обидва куби оточує білий контур, а на зеленому кубі розташований білий хрест. Мітка внизу зображення відображає Green_Blue A:87°, що вказує на виявлені кольори та вимірювання кута. Нижче координати розташовані у вигляді X:117, Y:186 з розмірами W:137, H:172, що представляють положення та розмір складених кубів у рамці.

Ви можете побачити, чи орієнтований робот по-іншому відносноColor Code абоAprilTag , і приймати рішення щодо навігації відповідно до цього.

Два кубики, один зелений, а інший синій, розміщені поруч та відстежуються системою зору. Обидва куби обведені білим контуром, а в центрі — білим хрестом. У верхньому лівому куті позначено Green_Blue A:0°, що відповідає виявленим кольорам та вимірюванню кута. Нижче показано координати X:150, Y:102 з розмірами W:179, H:109, що представляють положення та розмір кубів у кадрі.

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

рахунок

Властивість балів використовується під час виявленнякласифікацій ШІ за допомогою датчика ШІ зору.

На зображенні показано чотири об'єкти, що відстежуються системою зору: дві кулі та два кільця. Червона куля позначена координатами X:122, Y:84, W:67, H:66 та має бал 99%. Синя куля має X:228, Y:86, W:70, H:68, з результатом 99%. Зелене кільце має координати X:109, Y:186, W:98, H:92 та оцінку 99%. Червоне кільце позначено X:259, Y:187, W:89, H:91, з оцінкою 99%. Кожен об'єкт обведений білим кольором, що вказує на точність відстеження.

Показник достовірності показує, наскільки впевнений датчик зору зі штучним інтелектом у своєму виявленні. На цьому зображенні видно 99% впевненість у визначенні класифікацій ШІ цих чотирьох об'єктів. Ви можете використовувати цей бал, щоб ваш робот зосереджувався лише на дуже впевнених виявленнях.

існує

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

Це дозволяє перевірити, чи були виявлені якісь об'єкти на попередньому знімку. Ця властивість повертатиме значення True, якщо об'єкт існує, та False, якщо об'єкт не існує.


Кількість об'єктів

Метод objectCount повертає кількість виявлених об'єктів на останньому знімку.

Інтерфейс утиліти штучного інтелекту з двома синіми кубами, виявленими з лівого боку, кожен з яких позначений своїми координатами X та Y та розмірами. Система підключена, а AprilTags увімкнено, тоді як класифікація за допомогою штучного інтелекту вимкнена. Праворуч відображаються налаштування синього кольору з регульованими діапазонами відтінку та насиченості, встановленими на 22 та 0,34 відповідно. Є опція додавання або встановлення кольору та заморожування відео. Прошивка оновлена, версія 1.0.0.b16, а внизу є кнопка закриття.

У цьому прикладі було виявлено два об'єкти зкольоровою сигнатурою "Синій". Вони обидва будуть поміщені в масив, коли буде використано метод takeSnapshot.

Цей фрагмент коду постійно оновлює EXP Brain кількістю виявлених об'єктів. Згідно з наведеним прикладом, він неодноразово надсилатиме значення 2, що вказує на виявлення двох об'єктів.

while (true) {
// Отримати знімок усіх об'єктів Blue.
AIVision.takeSnapshot(AIVision__Blue);

Brain.Screen.clearScreen();
Brain.Screen.setCursor(1, 1);

// Перед отриманням даних перевірте, чи виявлено об'єкт на знімку.
якщо (AIVision.objectCount > 0) {
Brain.Screen.print(AIVision1.objectCount);
}
wait(5, мс);
}

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

Last Updated: