Датчик зору зі штучним інтелектом#
Вступ#
Клас aivision використовується для керування та доступу до даних із датчика зору зі штучним інтелектом IQ (2-го покоління). Датчик зору зі штучним інтелектом може виявляти:
Класифікації ШІ (наприклад, ігрові об’єкти)
Ідентифікатори тегів квітня
Користувацькі кольорові підписи
Користувацькі колірні коди
Він надає дані про об’єкт, включаючи положення, розмір, орієнтацію, ідентифікатор класифікації та показник достовірності.
Датчик обробляє візуальну інформацію за допомогою вбудованої моделі штучного інтелекту, вибраної в AI Vision Utility у VEXcode. Вибрана модель визначає, які класифікації штучного інтелекту може виявляти датчик. Під час використання VS Code модель штучного інтелекту спочатку має бути налаштована у VEXcode, перш ніж її можна буде використовувати у вашій програмі. Виявлені об’єкти повертаються через масив objects після виклику takeSnapshot.
Конструктори класів#
aivision(
int32_t index,
Args&... sigs );
Параметри#
Параметр |
Тип |
Опис |
|---|---|---|
|
|
Розумний порт, до якого підключено датчик AI Vision, записується як |
|
|
Один або декілька типів виявлення для реєстрації датчиком:
|
Моделі та класифікації штучного інтелекту#
Датчик зору зі штучним інтелектом може виявляти різні об’єкти з певними класифікаціями штучного інтелекту. Залежно від моделі класифікації штучного інтелекту, вибраної під час налаштування датчика зору зі штучним інтелектом у вікні «Пристрої», можуть виявлятися різні об’єкти. Наразі доступні такі моделі:
Елементи класу
Ідентифікаційний номер |
Класифікація ШІ |
|---|---|
0 |
|
1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
Змагання з робототехніки VEX IQ – мікс та матч
Ідентифікаційний номер |
Класифікація ШІ |
|---|---|
0 |
|
1 |
|
2 |
|
3 |
|
Підвищення рівня змагань з робототехніки VEX IQ
Ідентифікаційний номер |
Класифікація ШІ |
|---|---|
0 |
|
1 |
|
2 |
|
Приклади#
// Create Color Signatures
aivision::colordesc AIVision1__greenBox(
1, // index
85, // red
149, // green
46, // blue
23, // hangle
0.23 ); // hdsat
aivision::colordesc AIVision1__blueBox(
2, // index
77, // red
135, // green
125, // blue
27, // hangle
0.29 ); // hdsat
// Create a Color Code from two color signatures
aivision::codedesc AIVision1__greenBlue(
1, // code index
AIVision1__greenBox, // first color signature
AIVision1__blueBox ); // second color signature
// Create the AI Vision Sensor instance
aivision AIVision1(
PORT11, // Smart Port
AIVision1__greenBlue, // color code
aivision::ALL_AIOBJS ); // enable AI Classifications
Функції-члени#
Клас aivision містить такі функції-члени:
takeSnapshot— Збирає дані для певної колірної сигнатури, колірного коду, групи класифікації ШІ або групи ідентифікаторів AprilTag.installed— Повертає, чи підключено датчик зору штучного інтелекту до мозку IQ (2-го покоління).
Щоб отримати доступ до даних виявленого об’єкта після виклику takeSnapshot, скористайтеся доступними Властивості.
Перед викликом будь-яких функцій-членів aivision необхідно створити екземпляр aivision , як показано нижче:
/* This constructor is required when using VS Code.
AI Vision Sensor configuration is generated automatically
in VEXcode using the Device Menu. Replace the values
as needed. */
// Create Color Signatures
aivision::colordesc AIVision1__greenBox(
1, // index
85, // red
149, // green
46, // blue
23, // hangle
0.23 ); // hdsat
aivision::colordesc AIVision1__blueBox(
2, // index
77, // red
135, // green
125, // blue
27, // hangle
0.29 ); // hdsat
// Create a Color Code from two color signatures
aivision::codedesc AIVision1__greenBlue(
1, // code index
AIVision1__greenBox, // first color signature
AIVision1__blueBox ); // second color signature
// Create the AI Vision Sensor instance
aivision AIVision1(
PORT1, // Smart Port
AIVision1__greenBlue, // color code
aivision::ALL_AIOBJS ); // enable AI Classifications
takeSnapshot#
Захоплює зображення з датчика зору штучного інтелекту, обробляє його за допомогою вибраної моделі штучного інтелекту або налаштованих колірних сигнатур та оновлює масив objects.
Кожен виклик оновлює масив objects найновішими результатами виявлення. Об’єкти впорядковуються від найбільшого до найменшого (за шириною), починаючи з індексу 0Якщо об’єкти не виявлені, objectCount буде дорівнювати 0 , а objects[i].exists буде дорівнювати false.
1 — Робить знімок, використовуючи ідентифікатор об’єкта та тип об’єкта.
int32_t takeSnapshot( uint32_t id, objectType type, uint32_t count );
2 — Робить знімок за допомогою Кольорового підпису.
int32_t takeSnapshot( const colordesc &desc, int32_t count = 8 );
3 — Робить знімок за допомогою Код кольору.
int32_t takeSnapshot( const codedesc &desc, int32_t count = 8 );
4 — Робить знімок, використовуючи AprilTag ID.
int32_t takeSnapshot( const tagdesc &desc, int32_t count = 8 );
5 — Робить знімок за допомогою Класифікації ШІ.
int32_t takeSnapshot( const aiobjdesc &desc, int32_t count = 8 );
Parameters6 — Робить знімок за допомогою дескриптора об’єкта.
int32_t takeSnapshot( const objdesc &desc, int32_t count = 8 );
Параметр |
Тип |
Опис |
|---|---|---|
|
|
The identifier of the object to detect when using the
Note: In VEXcode, AI Classification names (such as blueBall) may be used directly. In VS Code, the numeric ID must be used. |
|
|
Визначає категорію об’єкта, пов’язаного з
|
|
|
Дескриптор, що використовується для виявлення певного об’єкта. Передається безпосередньо до
|
|
|
Максимальна кількість об’єктів, що зберігаються зі знімка. За замовчуванням — 8. |
Повернених значень
Повертає значення int32_t , яке представляє кількість виявлених об’єктів, що відповідають заданому сигнатурі або типу виявлення.
Примітки
Датчик зору зі штучним інтелектом повинен зробити знімок, перш ніж можна буде отримати доступ до даних об’єкта.
Масив
objectsоновлюється при кожному виклику.Якщо вказано значення
count, зберігаються лише найбільші виявлені об’єкти (до вказаної кількості).
Класифікації ШІ залежать від моделі, вибраної в утиліті ШІ Vision у VEXcode.
Приклади
// Move forward if an object is detected
while (true) {
AIVision1.takeSnapshot(aivision::ALL_AIOBJS);
if (AIVision1.objects[0].exists) {
Drivetrain.driveFor(forward, 50, mm);
}
wait(50, msec);
}
installed#
Повертає, чи підключено датчик зору штучного інтелекту до мозку IQ (2-го покоління).
Доступні функції
bool installed();
Параметри
Ця функція не приймає жодних параметрів.
Повернених значень
Повертає логічне значення, яке вказує, чи підключено датчик зору штучного інтелекту:
true— Датчик зору зі штучним інтелектом підключено.false— Датчик зору зі штучним інтелектом не підключено.
// Display a message if the AI Vision Sensor is connected
if (AIVision1.installed()){
Brain.Screen.print("Installed!");
}
Властивості#
Виклик takeSnapshot оновлює результати виявлення датчика зору штучного інтелекту. Кожен знімок оновлює масив objects , який містить виявлені об’єкти для запитуваної класифікації штучного інтелекту, колірної сигнатури, колірного коду або ідентифікатора AprilTag.
Доступ до даних AI Vision здійснюється через властивості об’єктів, що зберігаються в AIVisionSensor.objects[index], де index починається з 0.
Об’єкти впорядковані від найбільшого до найменшого (за площею).
Роздільна здатність зображення датчика штучного інтелекту становить 320 × 240. Значення положення та розміру об’єкта повідомляються в пікселях відносно поточного ракурсу датчика.
Доступні такі властивості:
objectCount— Повертає кількість виявлених об’єктів з останнього знімка.largestObject— Вибирає найбільший виявлений об’єкт з останнього знімка.objects— Масив, що містить виявлені об’єкти, оновлені за допомогоюtakeSnapshot..exists— Чи містить запис об’єкта коректні дані..width— Ширина виявленого об’єкта в пікселях..height— Висота виявленого об’єкта в пікселях..centerX— Позиція центру об’єкта по осі X у пікселях..centerY— Позиція центру об’єкта по осі Y у пікселях..originX— Позиція верхнього лівого кута об’єкта по осі X у пікселях..originY— Позиція верхнього лівого кута об’єкта по осі Y у пікселях..angle— Орієнтація колірного коду або ідентифікатора AprilTag у градусах..id— Classification ID or AprilTag ID..score— Оцінка достовірності для класифікацій ШІ.
objectCount#
objectCount повертає кількість елементів у масиві objects у вигляді цілого числа.
AIVisionSensor.objectCount
Компонент |
Опис |
|---|---|
|
Назва вашого екземпляра датчика зору штучного інтелекту. |
Приклади
// Display the number of detected objects
while (true) {
Brain.Screen.setCursor(1, 1);
Brain.Screen.clearLine(1);
AIVision1.takeSnapshot(aivision::ALL_AIOBJS);
if (AIVision1.objects[0].exists) {
Brain.Screen.print("%d", AIVision1.objectCount);
}
wait(50, msec);
}
largestObject#
largestObject отримує найбільший виявлений об’єкт з масиву objects.
Цей метод можна використовувати для того, щоб завжди отримувати найбільший об’єкт з objects без вказівки індексу.
AIVisionSensor.largestObject
Компонент |
Опис |
|---|---|
|
Назва вашого екземпляра датчика зору штучного інтелекту. |
Приклади
// Display the closest AprilTag ID
while (true) {
Brain.Screen.setCursor(1, 1);
Brain.Screen.clearLine(1);
AIVision1.takeSnapshot(aivision::ALL_TAGS);
if (AIVision1.objects[0].exists) {
Brain.Screen.print("%d", AIVision1.largestObject.id);
}
wait(50, msec);
}
objects#
objects повертає масив властивостей виявлених об’єктів. Використовуйте масив для доступу до певних значень property окремих об’єктів.
Існує десять властивостей, які додаються до кожного об’єкта що зберігається в масиві objects після використання takeSnapshot .
Усі значення властивостей, окрім id та score описують положення та розмір виявленого об’єкта в області зору датчика штучного інтелекту у момент використання takeSnapshot Ці значення вимірюються в пікселях, виходячи з роздільної здатності датчика 320 на 240 пікселів.
AIVisionSensor.objects[index].property
Компонент |
Опис |
|---|---|
|
Назва вашого екземпляра датчика зору штучного інтелекту. |
|
Індекс об’єкта в масиві. Індекс починається з |
|
Одна з доступних властивостей об’єкта. |
.існує#
.exists повертає, чи містить вказаний індекс об’єкта коректний виявлений об’єкт.
Доступ
SensorName.objects[index].exists
Повернених значень
Повертає логічне значення, яке вказує, чи містить вказаний індекс об’єкта дійсний виявлений об’єкт:
-
true— A valid object exists at the specified index. -
false— No object exists at the specified index.
Приклади
// Move forward if an object is detected
while (true) {
AIVision1.takeSnapshot(aivision::ALL_AIOBJS);
if (AIVision1.objects[0].exists) {
Drivetrain.driveFor(forward, 50, mm);
}
wait(50, msec);
}
.width#
.width повертає ширину виявленого об’єкта.
Доступ
SensorName.objects[index].width
Повернених значень
Повертає значення int16_t яке представляє ширину виявленого об’єкта в пікселях. Значення може змінюватися від 1 до 320.
Приклади
// Approach an object until it's at least 100 pixels wide
while (true) {
AIVision1.takeSnapshot(aivision::ALL_AIOBJS);
if (AIVision1.objects[0].exists) {
if (AIVision1.objects[0].width < 100) {
Drivetrain.drive(forward);
} else {
Drivetrain.stop();
}
} else {
Drivetrain.stop();
}
wait(50, msec);
}
.висота#
.height повертає висоту виявленого об’єкта.
Доступ
SensorName.objects[index].height
Повернених значень
Повертає значення int16_t яке представляє висоту виявленого об’єкта в пікселях. Значення може змінюватися від 1 до 240.
Приклади
// Approach an object until it's at least 90 pixels tall
while (true) {
AIVision1.takeSnapshot(aivision::ALL_AIOBJS);
if (AIVision1.objects[0].exists) {
if (AIVision1.objects[0].height < 90) {
Drivetrain.drive(forward);
} else {
Drivetrain.stop();
}
} else {
Drivetrain.stop();
}
wait(50, msec);
}
.centerX#
.centerX повертає x-координату центру виявленого об’єкта.
Доступ
SensorName.objects[index].centerX
Повернених значень
Returns an int16_t representing the x-coordinate of the object’s center in pixels. The value ranges from 0 to 320.
Приклади
// Turn until an object is directly in front of the sensor
Drivetrain.setTurnVelocity(10, percent);
Drivetrain.turn(right);
while (true) {
AIVision1.takeSnapshot(aivision::ALL_AIOBJS);
if (AIVision1.objects[0].exists) {
if (AIVision1.objects[0].centerX > 140 && AIVision1.objects[0].centerX < 180) {
Drivetrain.stop();
}
}
wait(10, msec);
}
.centerY#
.centerY повертає y-координату центру виявленого об’єкта.
Доступ
SensorName.objects[index].centerY
Повернених значень
Returns an int16_t representing the y-coordinate of the object’s center in pixels. The value ranges from 0 to 240.
Приклади
// Approach an object until it's close to the sensor
while (true) {
AIVision1.takeSnapshot(aivision::ALL_AIOBJS);
if (AIVision1.objects[0].exists) {
if (AIVision1.objects[0].centerY < 150) {
Drivetrain.drive(forward);
} else {
Drivetrain.stop();
}
} else {
Drivetrain.stop();
}
wait(50, msec);
}
.кут#
.angle повертає орієнтацію виявленого колірного коду або ідентифікатора AprilTag.
Доступ
SensorName.objects[index].angle
Повернених значень
Returns a float representing the rotation of the detected Color Code or AprilTag ID in degrees. The value ranges from 0 to 359.9.
Приклади
// Turn left or right depending on how a configured
// Color Code is rotated
while (true) {
AIVision1.takeSnapshot(AIVision1__redBlue);
if (AIVision1.objects[0].exists) {
if (AIVision1.objects[0].angle > 50 && AIVision1.objects[0].angle < 100) {
Drivetrain.turn(right);
}
else if (AIVision1.objects[0].angle > 270 && AIVision1.objects[0].angle < 330) {
Drivetrain.turn(left);
}
else {
Drivetrain.stop();
}
} else {
Drivetrain.stop();
}
wait(50, msec);
}
.originX#
.originX повертає x-координату верхнього лівого кута рамки визначення виявленого об’єкта.
Доступ
SensorName.objects[index].originX
Повернених значень
Returns an int16_t representing the x-coordinate of the object’s bounding box origin in pixels. The value ranges from 0 to 320.
Приклади
// Display if an object is to the left or the right
while (true) {
Brain.Screen.clearScreen();
Brain.Screen.setCursor(1, 1);
AIVision1.takeSnapshot(aivision::ALL_AIOBJS);
if (AIVision1.objects[0].exists) {
if (AIVision1.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-координату верхнього лівого кута рамки визначення виявленого об’єкта.
Доступ
SensorName.objects[index].originY
Повернених значень
Returns an int16_t representing the y-coordinate of the object’s bounding box origin in pixels. The value ranges from 0 to 240.
Приклади
// Display if an object is close or far
while (true) {
Brain.Screen.clearScreen();
Brain.Screen.setCursor(1, 1);
AIVision1.takeSnapshot(aivision::ALL_AIOBJS);
if (AIVision1.objects[0].exists) {
if (AIVision1.objects[0].originY < 110) {
Brain.Screen.print("Close");
} else {
Brain.Screen.print("Far");
}
}
wait(100, msec);
}
.id#
.id повертає виявлений ідентифікатор AprilTag або ідентифікатор класифікації ШІ.
Доступ
SensorName.objects[index].id
Повернених значень
Повертає int32_t , що представляє ідентифікатор виявленого об’єкта:
Для Класифікацій ШІ це відповідає ідентифікатору, визначеному вибраною моделлю ШІ.
Для ідентифікаторів AprilTag це значення відповідає виявленому номеру ідентифікатора AprilTag (0–36).
Приклади
// Move forward when AprilTag ID 1 is detected
while (true) {
AIVision1.takeSnapshot(aivision::ALL_TAGS);
if (AIVision1.objects[0].exists) {
if (AIVision1.objects[0].id == 1) {
Drivetrain.drive(forward);
}
} else {
Drivetrain.stop();
}
wait(50, msec);
}
.score#
.score повертає бал достовірності виявленої класифікації ШІ.
Доступ
SensorName.objects[index].score
Повернених значень
Повертає значення int16_t , що вказує на коефіцієнт достовірності виявленої класифікації ШІ від 1 до 100.
Нижчий бал означає, що датчик менш впевнений у виявленому об’єкті, тоді як вищий бал означає, що датчик більш впевнений.
Приклади
// Display if a score is confident
while (true) {
AIVision1.takeSnapshot(aivision::ALL_AIOBJS);
if (AIVision1.objects[0].exists) {
Brain.Screen.clearScreen();
Brain.Screen.setCursor(1, 1);
if (AIVision1.objects[0].score > 95) {
Brain.Screen.print("Confident");
} else {
Brain.Screen.print("Not confident");
}
}
wait(50, msec);
}
