Датчик изображения с искусственным интеллектом#
Введение#
Класс aivision используется для управления и доступа к данным от датчика изображения V5 AI Vision Sensor. Датчик изображения AI Vision Sensor может обнаруживать:
Классификация с помощью ИИ (например, игровых объектов)
Идентификаторы AprilTag
Пользовательские цветовые подписи
Пользовательские цветовые коды
Он предоставляет данные об объекте, включая положение, размер, ориентацию, идентификатор классификации и оценку достоверности.
Датчик обрабатывает визуальную информацию, используя встроенную модель ИИ, выбранную в Утилите ИИ-зрения в VEXcode. Выбранная модель определяет, какие классификации ИИ может обнаружить датчик. При использовании VS Code модель ИИ должна быть предварительно настроена в VEXcode, прежде чем ее можно будет использовать в вашей программе. Обнаруженные объекты возвращаются через массив objects после вызова takeSnapshot.
Конструкторы классов#
aivision(
int32_t index,
Args&... sigs );
Параметры#
Параметр |
Тип |
Описание |
|---|---|---|
|
|
Интеллектуальный порт, к которому подключен датчик AI Vision, обозначается как |
|
|
Для регистрации в датчике необходимо указать один или несколько типов обнаружения:
|
Модели и классификации искусственного интеллекта#
Датчик машинного зрения с искусственным интеллектом может обнаруживать различные объекты с помощью определенных классификаций ИИ. В зависимости от модели классификации ИИ, выбранной при настройке датчика машинного зрения с ИИ в окне «Устройства», могут быть обнаружены различные объекты. В настоящее время доступны следующие модели:
Элементы учебного процесса
Идентификационный номер |
Классификация ИИ |
|---|---|
0 |
|
1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
Соревнования по робототехнике VEX V5: высокие ставки
Идентификационный номер |
Классификация ИИ |
|---|---|
0 |
|
1 |
|
2 |
|
Противодействие проведению соревнований по робототехнике VEX V5
Идентификационный номер |
Классификация ИИ |
|---|---|
0 |
|
1 |
|
VEX V5 Robotics Competition Override
Идентификационный номер |
Классификация ИИ |
|---|---|
0 |
|
1 |
|
2 |
|
3 |
|
4 |
|
Примеры#
// 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— Возвращает значение, указывающее, подключен ли датчик AI Vision к V5 Brain.
Чтобы получить доступ к данным обнаруженного объекта после вызова 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#
Получает изображение с датчика AI Vision, обрабатывает его с использованием выбранной модели ИИ или настроенных цветовых сигнатур и обновляет массив 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.
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 );
Параметр |
Тип |
Описание |
|---|---|---|
|
|
Идентификатор объекта для обнаружения при использовании функции
Примечание: В VEXcode имена классификации ИИ (например, blueBall) можно использовать напрямую. В VS Code необходимо использовать числовой идентификатор. |
|
|
Указывает категорию объекта, связанного с идентификатором
|
|
|
Descriptor used to detect a specific object. Passed directly to
|
|
|
Максимальное количество объектов, сохраняемых из снимка. По умолчанию — 8. |
возвращаемых значений
Возвращает значение int32_t , представляющее количество обнаруженных объектов, соответствующих указанной сигнатуре или типу обнаружения.
Примечаний
Для доступа к данным об объекте датчик искусственного интеллекта должен сделать снимок.
Массив
objectsобъекта обновляется при каждом вызове.Если указано значение
count, сохраняются только самые крупные обнаруженные объекты (до указанного количества).
Классификация с помощью ИИ зависит от модели, выбранной в утилите AI Vision Utility в 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#
Возвращает значение, указывающее, подключен ли датчик AI Vision Sensor к V5 Brain.
доступных функций
bool installed();
параметров
Эта функция не принимает никаких параметров.
возвращаемых значений
Возвращает логическое значение, указывающее, подключен ли датчик AI Vision Sensor:
true— Датчик изображения с искусственным интеллектом подключен.false— Датчик AI Vision не подключен.
// Display a message if the AI Vision Sensor is connected
if (AIVision1.installed()){
Brain.Screen.print("Installed!");
}
Характеристики#
Вызов takeSnapshot обновляет результаты обнаружения датчика AI Vision. Каждый снимок обновляет массив objects , который содержит обнаруженные объекты для запрошенной классификации AI, цветовой сигнатуры, цветового кода или идентификатора AprilTag.
Доступ к данным AI Vision осуществляется через свойства объектов, хранящихся в AIVisionSensor.objects[index], где index начинается с 0.
Объекты упорядочены от самого большого к самому маленькому (по площади).
Разрешение изображения, получаемого с помощью датчика AI Vision, составляет × 240. Значения положения и размера объекта указываются в пикселях относительно текущего поля зрения датчика.
Доступны следующие объекты недвижимости:
objectCount— Возвращает количество обнаруженных объектов из последнего снимка.largestObject— Выбирает самый большой обнаруженный объект из последнего снимка.objects— Массив, содержащий обнаруженные объекты, обновленныеtakeSnapshot..exists— Содержит ли запись объекта допустимые данные..width— Ширина обнаруженного объекта в пикселях..height— Высота обнаруженного объекта в пикселях..centerX— X-координата центра объекта в пикселях..centerY— Положение центра объекта по оси Y в пикселях..originX— X-координата верхнего левого угла объекта в пикселях..originY— Y-координата верхнего левого угла объекта в пикселях..angle— Ориентация цветового кода или идентификатора AprilTag в градусах..id— Идентификатор классификации или идентификатор AprilTag..score— Показатель достоверности для классификаций ИИ.
objectCount#
objectCount возвращает количество элементов в массиве objects в виде целого числа.
AIVisionSensor.objectCount
Компонент |
Описание |
|---|---|
|
Название вашего экземпляра AI Vision Sensor. |
примеров
// 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
Компонент |
Описание |
|---|---|
|
Название вашего экземпляра AI Vision Sensor. |
примеров
// 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 возвращает массив обнаруженных свойств объектов. Используйте массив для доступа к конкретным значениям свойства отдельных объектов.
Каждый объект, хранящийся в массиве objects после использования takeSnapshot включает в себя десять свойств.
Все значения свойств, кроме id и score описывают положение и размер обнаруженного объекта в поле зрения датчика AI Vision в момент использования takeSnapshot Эти значения измеряются в пикселях, исходя из разрешения датчика 320 на 240 пикселей.
AIVisionSensor.objects[index].property
Компонент |
Описание |
|---|---|
|
Название вашего экземпляра AI Vision Sensor. |
|
Индекс объекта в массиве. Индекс начинается с |
|
Одно из доступных свойств объекта. |
.существует#
.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 возвращает ширину обнаруженного объекта.
Доступ
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
возвращаемых значений
Возвращает значение типа int16_t , представляющее координату x центра объекта в пикселях. Значение находится в диапазоне от 0 до 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
возвращаемых значений
Возвращает значение типа int16_t , представляющее собой y-координату центра объекта в пикселях. Значение находится в диапазоне от 0 до 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
возвращаемых значений
Возвращает число с плавающей запятой float представляющее собой угол поворота обнаруженного цветового кода или идентификатора AprilTag в градусах. Значение находится в диапазоне от 0 до 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
возвращаемых значений
Возвращает значение типа int16_t представляющее собой x-координату начала координат ограничивающего прямоугольника объекта в пикселях. Значение находится в диапазоне от 0 до 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
возвращаемых значений
Возвращает значение типа int16_t , представляющее собой y-координату начала координат ограничивающего прямоугольника объекта в пикселях. Значение находится в диапазоне от 0 до 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 возвращает обнаруженный идентификатор AprilTag или идентификатор классификации ИИ.
Доступ
SensorName.objects[index].id
возвращаемых значений
Возвращает значение int32_t (ID) обнаруженного объекта:
Для классификаций ИИ это соответствует идентификатору, определенному выбранной моделью ИИ.
Для идентификаторов 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 возвращает оценку достоверности обнаруженной классификации ИИ.
Доступ
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);
}
