Sensor de visão de IA#
Introdução#
A classe aivision é utilizada para controlar e aceder aos dados do sensor de visão com IA IQ (2ª geração). O sensor de visão com IA pode detetar:
Classificações de IA (como objetos de jogos)
IDs de etiqueta de abril
Assinaturas de cores personalizadas
Códigos de cores personalizados
Fornece dados do objeto, incluindo posição, tamanho, orientação, ID de classificação e pontuação de confiança.
O sensor processa a informação visual utilizando um modelo de IA integrado selecionado no Utilitário de Visão de IA dentro do VEXcode. O modelo selecionado determina quais as Classificações de IA que o sensor pode detetar. Ao utilizar o VS Code, o modelo de IA deve ser primeiro configurado no VEXcode antes de poder ser utilizado no seu programa. Os objectos detectados são devolvidos através da matriz objects após a chamada de takeSnapshot.
Construtores de Classes#
aivision(
int32_t index,
Args&... sigs );
Parâmetros#
Parâmetro |
Tipo |
Descrição |
|---|---|---|
|
|
A porta inteligente à qual o sensor de visão de IA está ligado é escrita como |
|
|
Um ou mais tipos de deteção para registar com o sensor:
|
Modelos e Classificações de IA#
O sensor de visão com IA pode detetar diferentes objetos com determinadas classificações de IA. Dependendo do modelo de classificação de IA selecionado ao configurar o sensor de visão com IA na janela Dispositivos, podem ser detetados diferentes objetos. Os modelos atualmente disponíveis são:
Elementos de Sala de Aula
Número de identificação |
Classificação por IA |
|---|---|
0 |
|
1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
Competição de Robótica VEX IQ: Misture e Combine
Número de identificação |
Classificação por IA |
|---|---|
0 |
|
1 |
|
2 |
|
3 |
|
Aprimore o seu nível na competição de robótica VEX IQ
Número de identificação |
Classificação por IA |
|---|---|
0 |
|
1 |
|
2 |
|
Exemplos#
// 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
Funções de membro#
A classe aivision inclui as seguintes funções membro:
takeSnapshot— Captura dados para uma assinatura de cor, código de cor, grupo de classificação de IA ou grupo de ID AprilTag específico.installed— Retorna se o sensor de visão de IA está ligado ao cérebro IQ (2ª geração).
Para aceder aos dados do objeto detetado após a chamada takeSnapshot, utilize as Propriedades disponíveis.
Antes de chamar qualquer função membro de aivision , deve ser criada uma instância aivision , como se mostra abaixo:
/* 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#
Captura uma imagem do sensor de visão de IA, processa-a utilizando o modelo de IA selecionado ou as assinaturas de cor configuradas e atualiza a matriz de objects objeto.
Each call refreshes the objects array with the most recent detection results. Objects are ordered from largest to smallest (by width), beginning at index 0. If no objects are detected objectCount will be 0 and objects[i].exists will be false.
1 — Captura um instantâneo utilizando um ID de objeto e um tipo de objeto.
int32_t takeSnapshot( uint32_t id, objectType type, uint32_t count );
2 — Tira uma fotografia utilizando uma Assinatura de Cor.
int32_t takeSnapshot( const colordesc &desc, int32_t count = 8 );
3 — Tira uma fotografia utilizando um Código de Cor.
int32_t takeSnapshot( const codedesc &desc, int32_t count = 8 );
4 — Tira uma fotografia utilizando um ID AprilTag.
int32_t takeSnapshot( const tagdesc &desc, int32_t count = 8 );
5 — Tira uma fotografia utilizando uma Classificação de IA.
int32_t takeSnapshot( const aiobjdesc &desc, int32_t count = 8 );
Parameters6 — Tira uma fotografia instantânea utilizando um descritor de objeto.
int32_t takeSnapshot( const objdesc &desc, int32_t count = 8 );
Parâmetro |
Tipo |
Descrição |
|---|---|---|
|
|
O identificador do objeto a detetar quando se utiliza a função
Nota: No VEXcode, os nomes de Classificação de IA (como blueBall) podem ser utilizados diretamente. No VS Code, deve ser utilizado o ID numérico. |
|
|
Especifica a categoria de objeto associada ao id
|
|
|
Descritor utilizado para detetar um objeto específico. Passado directamente para
|
|
|
Número máximo de objetos armazenados a partir do instantâneo. O padrão é 8. |
Valores de retorno
Retorna um valor do tipo int32_t int32_t que representa o número de objectos detectados que correspondem à assinatura ou ao tipo de detecção especificado.
Notas
O sensor de visão com IA precisa de tirar uma fotografia antes que os dados do objeto possam ser acedidos.
O array de
objectsobjeto é atualizado a cada chamada.Quando a contagem
counté especificada, apenas os maiores objetos detetados (até à quantidade especificada) são armazenados.
As classificações de IA dependem do modelo selecionado no utilitário de visão de IA do VEXcode.
Exemplos
// 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#
Retorna se o sensor de visão de IA está ligado ao cérebro IQ (2ª geração).
Funções disponíveis
bool installed();
Parâmetros
Esta função não recebe qualquer parâmetro.
Valores de retorno
Retorna um valor booleano indicando se o sensor de visão com IA está ligado:
true— O sensor de visão de IA está ligado.false— O sensor de visão de IA não está ligado.
// Display a message if the AI Vision Sensor is connected
if (AIVision1.installed()){
Brain.Screen.print("Installed!");
}
Propriedades#
Chamar takeSnapshot atualiza os resultados de deteção do sensor de visão de IA. Cada snapshot atualiza a matriz objects , que contém objetos detetados para a classificação de IA solicitada, assinatura de cor, código de cor ou ID AprilTag.
Os dados de Visão de IA são acedidos através das propriedades dos objetos armazenados em AIVisionSensor.objects[index], onde index começa em 0.
Os objetos estão ordenados do maior para o mais pequeno (por área).
A resolução da imagem do sensor de visão de IA é × 240. Os valores de posição e tamanho do objeto são reportados em unidades de pixel em relação à vista atual do sensor.
As seguintes propriedades estão disponíveis:
objectCount— Retorna o número de objetos detetados do snapshot mais recente.largestObject— Seleciona o maior objeto detetado no instantâneo mais recente.objects— Matriz contendo objetos detetados atualizada portakeSnapshot..exists— Se a entrada do objeto contém dados válidos..width— Largura do objeto detetado em pixéis..height— Altura do objeto detetado em pixéis..centerX— Posição X do centro do objecto em pixéis..centerY— Posição Y do centro do objecto em pixéis..originX— Posição X do canto superior esquerdo do objeto em pixéis..originY— Posição Y do canto superior esquerdo do objeto em pixéis..angle— Orientação de um código de cor ou ID AprilTag em graus..id— ID de classificação ou ID AprilTag..score— Pontuação de confiança para as classificações de IA.
objectCount#
objectCount devolve o número de itens dentro do array objects como um número inteiro.
AIVisionSensor.objectCount
Componente |
Descrição |
|---|---|
|
O nome da sua instância do sensor de visão com IA. |
Exemplos
// 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 recupera o maior objeto detetado do array objects.
Este método pode ser utilizado para obter sempre o maior objeto de entre objects sem especificar um índice.
AIVisionSensor.largestObject
Componente |
Descrição |
|---|---|
|
O nome da sua instância do sensor de visão com IA. |
Exemplos
// 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 devolve uma matriz de propriedades dos objetos detetados. Utilize a matriz para aceder a valores propriedade específicos de objetos individuais.
Existem dez propriedades que são incluídas em cada objeto armazenado na matriz objects após takeSnapshot ser utilizado.
Todos os valores de propriedade, exceto id e score descrevem a posição e o tamanho do objeto detetado no campo de visão do sensor de visão com IA no momento em que foi utilizado takeSnapshot . Estes valores são medidos em pixéis, com base na resolução de 320 por 240 pixéis do sensor.
AIVisionSensor.objects[index].property
Componente |
Descrição |
|---|---|
|
O nome da sua instância do sensor de visão com IA. |
|
O índice do objeto na matriz. O índice começa em |
|
Uma das propriedades do objeto disponíveis. |
. existe#
.exists retorna se o índice de objeto especificado contém um objeto válido detetado.
Acesso
SensorName.objects[index].exists
Valores de retorno
Retorna um valor booleano indicando se o índice do objeto especificado contém um objeto detetado válido:
-
true— A valid object exists at the specified index. -
false— No object exists at the specified index.
Exemplos
// 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);
}
.largura#
.width devolve a largura do objeto detetado.
Acesso
SensorName.objects[index].width
Valores de retorno
Retorna um int16_t que representa a largura do objeto detetado em pixéis. O valor varia de 1 a 320.
Exemplos
// 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);
}
.altura#
.height devolve a altura do objeto detetado.
Acesso
SensorName.objects[index].height
Valores de retorno
Retorna um int16_t que representa a altura do objeto detetado em pixéis. O valor varia de 1 a 240.
Exemplos
// 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 devolve a coordenada x do centro do objecto detectado.
Acesso
SensorName.objects[index].centerX
Valores de retorno
Retorna um int16_t que representa a coordenada x do centro do objeto em pixéis. O valor varia de 0 a 320.
Exemplos
// 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 devolve a coordenada y do centro do objecto detectado.
Acesso
SensorName.objects[index].centerY
Valores de retorno
Retorna um int16_t que representa a coordenada y do centro do objeto em pixéis. O valor varia de 0 a 240.
Exemplos
// 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);
}
.ângulo#
.angle devolve a orientação do código de cor detectado ou do ID AprilTag.
Acesso
SensorName.objects[index].angle
Valores de retorno
Retorna um float float que representa a rotação do código de cor detectado ou do ID AprilTag em graus. O valor varia de 0 a 359.9.
Exemplos
// 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);
}
. origemX#
.originX devolve a coordenada x do canto superior esquerdo da caixa delimitadora do objecto detectado.
Acesso
SensorName.objects[index].originX
Valores de retorno
Retorna um int16_t que representa a coordenada x da origem da caixa delimitadora do objeto em pixéis. O valor varia de 0 a 320.
Exemplos
// 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);
}
. origemY#
.originY devolve a coordenada y do canto superior esquerdo da caixa delimitadora do objecto detectado.
Acesso
SensorName.objects[index].originY
Valores de retorno
Retorna um int16_t que representa a coordenada y da origem da caixa delimitadora do objeto em pixéis. O valor varia de 0 a 240.
Exemplos
// 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);
}
. ia#
.id devolve o ID AprilTag detectado ou o ID de classificação de IA.
Acesso
SensorName.objects[index].id
Valores de retorno
Retorna um valor int32_t que representa o ID do objeto detetado:
Para Classificações de IA, isto corresponde ao ID definido pelo modelo de IA selecionado.
Para os IDs AprilTag, isto representa o número de IDs AprilTag detetado (0–36).
Exemplos
// 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);
}
.pontuação#
.score devolve a pontuação de confiança da classificação de IA detectada.
Acesso
SensorName.objects[index].score
Valores de retorno
Retorna um valor int16_t indicando a pontuação de confiança da classificação de IA detetada, entre 1 e 100.
Uma pontuação mais baixa significa que o sensor tem menos confiança no objeto detetado, enquanto uma pontuação mais elevada significa que o sensor tem mais confiança.
Exemplos
// 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);
}
