Датчик изображения с искусственным интеллектом#

Введение#

Класс aivision используется для управления и доступа к данным от датчика изображения V5 AI Vision Sensor. Датчик изображения AI Vision Sensor может обнаруживать:

  • Классификация с помощью ИИ (например, игровых объектов)

  • Идентификаторы AprilTag

  • Пользовательские цветовые подписи

  • Пользовательские цветовые коды

Он предоставляет данные об объекте, включая положение, размер, ориентацию, идентификатор классификации и оценку достоверности.

Датчик обрабатывает визуальную информацию, используя встроенную модель ИИ, выбранную в Утилите ИИ-зрения в VEXcode. Выбранная модель определяет, какие классификации ИИ может обнаружить датчик. При использовании VS Code модель ИИ должна быть предварительно настроена в VEXcode, прежде чем ее можно будет использовать в вашей программе. Обнаруженные объекты возвращаются через массив objects после вызова takeSnapshot.

Конструкторы классов#

aivision(
  int32_t index,
  Args&... sigs );

Параметры#

Параметр

Тип

Описание

index

int32_t

Интеллектуальный порт, к которому подключен датчик AI Vision, обозначается как PORTx, где x — номер порта (например, PORT1).

sigs

colordesc, codedesc, or AI constants

Для регистрации в датчике необходимо указать один или несколько типов обнаружения:

  • aivision::ALL_AIOBJS — Все классификации ИИ
  • aivision::ALL_TAGS — Все идентификаторы AprilTag
  • aivision::colordesc — Пользовательская цветовая сигнатура
  • aivision::codedesc — Пользовательский цветовой код

Модели и классификации искусственного интеллекта#

Датчик машинного зрения с искусственным интеллектом может обнаруживать различные объекты с помощью определенных классификаций ИИ. В зависимости от модели классификации ИИ, выбранной при настройке датчика машинного зрения с ИИ в окне «Устройства», могут быть обнаружены различные объекты. В настоящее время доступны следующие модели:

Элементы учебного процесса

Идентификационный номер

Классификация ИИ

0

blueBall

1

greenBall

2

redBall

3

blueRing

4

greenRing

5

redRing

6

blueCube

7

greenCube

8

redCube

Соревнования по робототехнике VEX V5: высокие ставки

Идентификационный номер

Классификация ИИ

0

mobileGoal

1

redRing

2

blueRing

Противодействие проведению соревнований по робототехнике VEX V5

Идентификационный номер

Классификация ИИ

0

blueBlock

1

redBlock

VEX V5 Robotics Competition Override

Идентификационный номер

Классификация ИИ

0

redBluePin

1

blueYellowPin

2

redYellowPin

3

yellowPin

4

cup

Примеры#

// 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 );

6 — Делает снимок с помощью дескриптора объекта.

int32_t takeSnapshot(
  const objdesc &desc,
  int32_t count = 8 );

Parameters

Параметр

Тип

Описание

id

uint32_t

Идентификатор объекта для обнаружения при использовании функции (id, type, count) Значение зависит от type:

  • colorObject — Индекс дескриптора цвета (1–7)
  • codeObject — Индекс кода цвета (1–8)
  • modelObject — Идентификатор классификации ИИ
  • tagObject — Идентификатор AprilTag (0–36)

Примечание: В VEXcode имена классификации ИИ (например, blueBall) можно использовать напрямую. В VS Code необходимо использовать числовой идентификатор.

type

objectType

Указывает категорию объекта, связанного с идентификатором id:

desc

colordesc &, codedesc &, tagdesc &, aiobjdesc &, or objdesc &

Descriptor used to detect a specific object. Passed directly to takeSnapshot, for example:

  • AIVision1.takeSnapshot(AIVision1__greenBox);
  • AIVision1.takeSnapshot(aivision::ALL_AIOBJS);
Predefined descriptor constants:
  • aivision::ALL_TAGS — Detects all AprilTag IDs
  • aivision::ALL_COLORS — Detects all configured Color Signatures
  • aivision::ALL_CODES — Detects all configured Color Codes
  • aivision::ALL_AIOBJS — Detects all AI Classifications
  • aivision::ALL_OBJECTS — Detects everything the sensor can recognize

count

uint32_t / int32_t

Максимальное количество объектов, сохраняемых из снимка. По умолчанию — 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 в виде целого числа.

Syntax
AIVisionSensor.objectCount

Components

Компонент

Описание

AIVisionSensor

Название вашего экземпляра 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 без указания индекса.

Syntax
AIVisionSensor.largestObject

Components

Компонент

Описание

AIVisionSensor

Название вашего экземпляра 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 пикселей.

Syntax
AIVisionSensor.objects[index].property

Components

Компонент

Описание

AIVisionSensor

Название вашего экземпляра AI Vision Sensor.

index

Индекс объекта в массиве. Индекс начинается с 0.

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 возвращает ширину обнаруженного объекта.

Доступ

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) обнаруженного объекта:

примеров

// 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);
}