Mākslīgā intelekta redzes sensors#

Ievads#

aivision klase tiek izmantota, lai kontrolētu un piekļūtu datiem no EXP AI redzes sensora. AI redzes sensors var noteikt:

  • Mākslīgā intelekta klasifikācijas (piemēram, spēļu objekti)

  • AprilTag ID

  • Pielāgoti krāsu paraksti

  • Pielāgoti krāsu kodi

Tas sniedz objekta datus, tostarp pozīciju, izmēru, orientāciju, klasifikācijas ID un ticamības rādītāju.

Sensors apstrādā vizuālo informāciju, izmantojot iebūvētu mākslīgā intelekta modeli, kas atlasīts VEXcode ietvaros esošajā AI Vision Utility. Atlasītais modelis nosaka, kuras mākslīgā intelekta klasifikācijas sensors var noteikt. Izmantojot VS Code, mākslīgā intelekta modelis vispirms ir jākonfigurē VEXcode, pirms to var izmantot programmā. Atklātie objekti tiek atgriezti, izmantojot masīvu objects pēc takeSnapshot izsaukšanas.

Klases konstruktori#

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

Parametri#

Parametrs

Tips

Apraksts

index

int32_t

Viedā pieslēgvieta, kurai ir pievienots AI redzes sensors, kas pierakstīta kā PORTx, kur x ir pieslēgvietas numurs (piemēram, PORT1).

sigs

colordesc, codedesc, or AI constants

Viens vai vairāki noteikšanas veidi, kas jāreģistrē sensorā:

  • aivision::ALL_AIOBJS — Visas AI klasifikācijas
  • aivision::ALL_TAGS — Visi AprilTag ID
  • aivision::colordesc — Pielāgots krāsas paraksts
  • aivision::codedesc — Pielāgots krāsas kods

Mākslīgā intelekta modeļi un klasifikācijas#

AI redzes sensors var noteikt dažādus objektus ar noteiktām AI klasifikācijām. Atkarībā no AI klasifikācijas modeļa, kas atlasīts, konfigurējot AI redzes sensoru ierīcēs, var noteikt dažādus objektus. Pašlaik pieejamie modeļi ir:

Klases elementi

ID numurs

AI klasifikācija

0

blueBall

1

greenBall

2

redBall

3

blueRing

4

greenRing

5

redRing

6

blueCube

7

greenCube

8

redCube

VEX V5 robotikas sacensības ar augstām likmēm

ID numurs

AI klasifikācija

0

mobileGoal

1

redRing

2

blueRing

VEX V5 robotikas sacensību pretošanās

ID numurs

AI klasifikācija

0

blueBlock

1

redBlock

VEX V5 robotikas sacensību ignorēšana

ID numurs

AI klasifikācija

0

redBluePin

1

blueYellowPin

2

redYellowPin

3

yellowPin

4

cup

Piemēri#

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

Dalībnieku funkcijas#

aivision klasē ir iekļautas šādas dalībfunkcijas:

  • takeSnapshot — Ietver datus konkrētam krāsu parakstam, krāsu kodam, AI klasifikācijas grupai vai AprilTag ID grupai.

  • installed — Atgriež, vai AI redzes sensors ir pievienots EXP smadzenēm.

Lai piekļūtu noteiktajiem objekta datiem pēc takeSnapshot izsaukšanas, izmantojiet pieejamās Properties īpašības.

Pirms jebkuru aivision dalībfunkciju izsaukšanas ir jāizveido aivision instance, kā parādīts zemāk:

/* 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#

Uztver attēlu no AI redzes sensora, apstrādā to, izmantojot atlasīto AI modeli vai konfigurētus krāsu parakstus, un atjaunina objects masīvu.

Katrs izsaukums atsvaidzina masīvu objects ar jaunākajiem noteikšanas rezultātiem. Objekti tiek sakārtoti no lielākā līdz mazākajam (pēc platuma), sākot ar indeksu 0Ja objekti netiek atrasti, objectCount būs 0 un objects[i].exists būs false.

1 — Uzņem momentuzņēmumu, izmantojot objekta ID un objekta tipu.

int32_t takeSnapshot(
  uint32_t id,
  objectType type,
  uint32_t count );

2 — Uzņem momentuzņēmumu, izmantojot Krāsu parakstu.

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

3 — Uzņem momentuzņēmumu, izmantojot Krāsu kodu.

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

4 — Uzņem momentuzņēmumu, izmantojot AprilTag ID.

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

5 — Uzņem momentuzņēmumu, izmantojot AI klasifikāciju.

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

6 — Uzņem momentuzņēmumu, izmantojot objekta deskriptoru.

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

Parameters

Parametrs

Tips

Apraksts

id

uint32_t

Nosakāmā objekta identifikators, izmantojot funkciju (id, type, count) Nozīme ir atkarīga no type:

  • colorObject — Krāsas deskriptora indekss (1–7)
  • codeObject — Krāsas koda indekss (1–8)
  • modelObject — AI klasifikācijas ID
  • tagObject — AprilTag ID (0–36)

Piezīme: VEXcode AI klasifikācijas nosaukumus (piemēram, blueBall) var izmantot tieši. VS Code ir jāizmanto skaitliskais ID.

type

objectType

Norāda ar id:

  • objectType::tagObject — Nosaka AprilTag ID
  • objectType::colorObject — Nosaka Krāsu parakstus
  • objectType::codeObject — Nosaka Krāsu kodus
  • objectType::modelObject — Nosaka AI klasifikācijas
  • objectType::allObject — Nosaka visu, ko sensors var atpazīt

desc

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

Deskriptors, ko izmanto konkrēta objekta noteikšanai. Tiek nodots tieši funkcijai takeSnapshot, piemēram:

  • AIVision1.takeSnapshot(AIVision1__greenBox);
  • AIVision1.takeSnapshot(aivision::ALL_AIOBJS);
Iepriekš definētas deskriptoru konstantes:
  • aivision::ALL_TAGS — Nosaka visus AprilTag ID
  • aivision::ALL_COLORS — Nosaka visus konfigurētos Color Signatures
  • aivision::ALL_CODES — Nosaka visus konfigurētos Color Codes
  • aivision::ALL_AIOBJS — Nosaka visus AI Classifications
  • aivision::ALL_OBJECTS — Nosaka visu, ko sensors var atpazīt

count

uint32_t / int32_t

Maksimālais momentuzņēmumā saglabāto objektu skaits. Noklusējuma vērtība ir 8.

Atgriešanas vērtības

Atgriež int32_t , kas apzīmē noteikto objektu skaitu, kas atbilst norādītajam parakstam vai noteikšanas tipam.

Piezīmes

  • Pirms piekļuves objekta datiem, mākslīgā intelekta redzes sensoram ir jāuzņem momentuzņēmums.

  • Masīvs objects tiek atsvaidzināts katrā izsaukumā.

  • Ja ir norādīts count , tiek saglabāti tikai lielākie atklātie objekti (līdz norādītajam skaitam).

Mākslīgā intelekta klasifikācijas ir atkarīgas no modeļa, kas atlasīts VEXcode AI Vision utilītā.

piemēri

// 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#

Atgriež, vai AI redzes sensors ir savienots ar EXP Brain.

Pieejamās funkcijas

bool installed();

Parametri

Šī funkcija nepieņem nekādus parametrus.

Atgriešanas vērtības

Atgriež Būla vērtību, kas norāda, vai ir pievienots AI redzes sensors:

  • true — AI redzes sensors ir pievienots.

  • false — Mākslīgā intelekta redzes sensors nav pievienots.

// Display a message if the AI Vision Sensor is connected
if (AIVision1.installed()){
  Brain.Screen.print("Installed!");
}

Īpašumi#

Izsaucot takeSnapshot, tiek atjaunināti AI redzes sensora noteikšanas rezultāti. Katrs momentuzņēmums atsvaidzina objects masīvu, kurā ir noteiktie objekti pieprasītajai AI klasifikācijai, krāsas parakstam, krāsas kodam vai AprilTag ID.

AI Vision data is accessed through properties of objects stored in AIVisionSensor.objects[index], where index begins at 0.

Objekti ir sakārtoti no lielākā līdz mazākajam (pēc laukuma).

AI redzes sensora attēla izšķirtspēja ir  320 × 240. Objekta pozīcijas un izmēra vērtības tiek ziņotas pikseļu vienībās attiecībā pret sensora pašreizējo skatu.

Ir pieejami šādi īpašumi:

  • objectCount — Atgriež no jaunākā momentuzņēmuma noteikto objektu skaitu.

  • largestObject — Atlasa lielāko noteikto objektu no jaunākā momentuzņēmuma.

  • objects — Masīvs, kas satur atrastos objektus, kurus atjaunina takeSnapshot.

  • .exists — Vai objekta ieraksts satur derīgus datus.

  • .width — Noteiktā objekta platums pikseļos.

  • .height — Noteiktā objekta augstums pikseļos.

  • .centerX — X position of the object’s center in pixels.

  • .centerY — objekta centra Y pozīcija pikseļos.

  • .originX — objekta augšējā kreisā stūra X pozīcija pikseļos.

  • .originY — objekta augšējā kreisā stūra Y pozīcija pikseļos.

  • .angle — Krāsas koda vai AprilTag ID orientācija grādos.

  • .id — Classification ID or AprilTag ID.

  • .score — AI klasifikāciju ticamības rādītājs.

objectCount#

objectCount atgriež masīvā objects esošo elementu skaitu kā veselu skaitli.

Syntax
AIVisionSensor.objectCount

Components

Komponents

Apraksts

AIVisionSensor

Jūsu AI redzes sensora instances nosaukums.

piemēri

// 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 izgūst lielāko noteikto objektu no masīva objects.

Šo metodi var izmantot, lai vienmēr iegūtu lielāko objektu no objects , nenorādot indeksu.

Syntax
AIVisionSensor.largestObject

Components

Komponents

Apraksts

AIVisionSensor

Jūsu AI redzes sensora instances nosaukums.

piemēri

// 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 atgriež noteikto objektu īpašību masīvu. Izmantojiet masīvu, lai piekļūtu atsevišķu objektu noteiktām property vērtībām.

Katrā objektā, kas tiek glabāts masīvā objects pēc takeSnapshot izmantošanas, ir iekļautas desmit īpašības.

All property values except id and score describe the detected object’s position and size in the AI Vision Sensor’s view at the moment takeSnapshot was used. These values are measured in pixels, based on the sensor’s 320 by 240 pixel resolution.

Syntax
AIVisionSensor.objects[index].property

Components

Komponents

Apraksts

AIVisionSensor

Jūsu AI redzes sensora instances nosaukums.

index

Objekta indekss masīvā. Indekss sākas ar 0.

property

Viena no pieejamajām objekta īpašībām.

.pastāv#

.exists atgriež, vai norādītais objekta indekss satur derīgu noteiktu objektu.

Piekļuve

SensorName.objects[index].exists

Atgriešanas vērtības

Atgriež Būla vērtību, kas norāda, vai norādītais objekta indekss satur derīgu noteiktu objektu:

  • true — A valid object exists at the specified index.
  • false — No object exists at the specified index.

piemēri

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

.platums#

.width atgriež noteiktā objekta platumu.

Piekļuve

SensorName.objects[index].width

Atgriešanas vērtības

Atgriež int16_t kas apzīmē noteiktā objekta platumu pikseļos. Vērtība ir no 1 līdz 320.

piemēri

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

.augstums#

.height atgriež noteiktā objekta augstumu.

Piekļuve

SensorName.objects[index].height

Atgriešanas vērtības

Atgriež int16_t kas apzīmē noteiktā objekta augstumu pikseļos. Vērtība ir no 1 līdz 240.

piemēri

// 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 atgriež noteiktā objekta centra x koordinātu.

Piekļuve

SensorName.objects[index].centerX

Atgriešanas vērtības

Atgriež vērtību int16_t kas apzīmē objekta centra x koordinātu pikseļos. Vērtība ir no 0 līdz 320.

piemēri

// 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 atgriež noteiktā objekta centra y koordinātu.

Piekļuve

SensorName.objects[index].centerY

Atgriešanas vērtības

Atgriež int16_t kas apzīmē objekta centra y koordinātu pikseļos. Vērtība ir no 0 līdz 240.

piemēri

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

.leņķis#

.angle atgriež noteiktā krāsas koda vai AprilTag ID orientāciju.

Piekļuve

SensorName.objects[index].angle

Atgriešanas vērtības

Returns a float representing the rotation of the detected Color Code or AprilTag ID in degrees. The value ranges from 0 to 359.9.

piemēri

// 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 atgriež noteiktā objekta ierobežojošā lodziņa augšējā kreisā stūra x koordinātu.

Piekļuve

SensorName.objects[index].originX

Atgriešanas vērtības

Atgriež vērtību int16_t kas apzīmē objekta ierobežojošā lodziņa sākuma punkta x koordinātu pikseļos. Vērtība ir no 0 līdz 320.

piemēri

// 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 atgriež noteiktā objekta ierobežojošā lodziņa augšējā kreisā stūra y koordinātu.

Piekļuve

SensorName.objects[index].originY

Atgriešanas vērtības

Atgriež vērtību int16_t kas apzīmē objekta ierobežojošā lodziņa sākuma punkta y koordinātu pikseļos. Vērtība ir no 0 līdz 240.

piemēri

// 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 atgriež noteikto AprilTag ID vai AI klasifikācijas ID.

Piekļuve

SensorName.objects[index].id

Atgriešanas vērtības

Atgriež int32_t kas apzīmē noteiktā objekta ID:

piemēri

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

.rezultāts#

.score atgriež noteiktās AI klasifikācijas ticamības rādītāju.

Piekļuve

SensorName.objects[index].score

Atgriešanas vērtības

Atgriež int16_t , kas norāda noteiktās AI klasifikācijas ticamības rādītāju no 1 līdz 100.

Zemāks rādītājs nozīmē, ka sensors ir mazāk pārliecināts par noteikto objektu, savukārt augstāks rādītājs nozīmē, ka sensors ir pārliecinātāks.

piemēri

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