Senzor pro vidění s umělou inteligencí#
Zavedení#
Třída aivision se používá k ovládání a přístupu k datům ze senzoru EXP AI Vision. Senzor AI Vision dokáže detekovat:
Klasifikace umělé inteligence (například herní objekty)
ID tagů April
Vlastní barevné podpisy
Vlastní barevné kódy
Poskytuje data o objektu včetně polohy, velikosti, orientace, ID klasifikace a skóre spolehlivosti.
Senzor zpracovává vizuální informace pomocí integrovaného modelu umělé inteligence vybraného v nástroji AI Vision Utility v rámci VEXcode. Vybraný model určuje, které klasifikace umělé inteligence senzor dokáže detekovat. Při použití VS Code musí být model umělé inteligence nejprve nakonfigurován ve VEXcode, než jej lze použít ve vašem programu. Detekované objekty jsou vráceny prostřednictvím pole objects po volání funkce takeSnapshot.
Konstruktory tříd#
aivision(
int32_t index,
Args&... sigs );
Parametry#
Parametr |
Typ |
Popis |
|---|---|---|
|
|
Inteligentní port, ke kterému je připojen senzor AI Vision, zapsaný jako |
|
|
Jeden nebo více typů detekce, které mají být registrovány senzorem:
|
Modely a klasifikace umělé inteligence#
Senzor AI Vision dokáže detekovat různé objekty s určitými klasifikacemi AI. V závislosti na modelu klasifikace AI vybraném při konfiguraci senzoru AI Vision v okně Zařízení lze detekovat různé objekty. Aktuálně dostupné modely jsou:
Prvky pro učebnu
Číslo průkazu totožnosti |
Klasifikace umělé inteligence |
|---|---|
0 |
|
1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
Vysoké sázky v robotické soutěži VEX V5
Číslo průkazu totožnosti |
Klasifikace umělé inteligence |
|---|---|
0 |
|
1 |
|
2 |
|
Odpor vůči soutěži v robotice VEX V5
Číslo průkazu totožnosti |
Klasifikace umělé inteligence |
|---|---|
0 |
|
1 |
|
Přerušení robotické soutěže VEX V5
Číslo průkazu totožnosti |
Klasifikace umělé inteligence |
|---|---|
0 |
|
1 |
|
2 |
|
3 |
|
4 |
|
Příklady#
// 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
Členské funkce#
Třída aivision obsahuje následující členské funkce:
takeSnapshot— Zachycuje data pro konkrétní barevný podpis, barevný kód, skupinu klasifikace AI nebo skupinu ID AprilTag.installed— Vrátí, zda je AI Vision Sensor připojen k EXP Brain.
Pro přístup k datům detekovaného objektu po volání takeSnapshot použijte dostupné Properties.
Před voláním jakékoli členské funkce aivision je nutné vytvořit instanci aivision , jak je znázorněno níže:
/* 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#
Zachytí obrázek ze senzoru AI Vision, zpracuje ho pomocí vybraného modelu AI nebo nakonfigurovaných barevných podpisů a aktualizuje pole objects.
Každé volání aktualizuje pole objects nejnovějšími výsledky detekce. Objekty jsou seřazeny od největšího po nejmenší (podle šířky), počínaje indexem 0Pokud nejsou detekovány žádné objekty, bude objectCount mít 0 a objects[i].exists bude mít false.
1 — Pořídí snímek pomocí ID objektu a typu objektu.
int32_t takeSnapshot( uint32_t id, objectType type, uint32_t count );
2 — Pořídí snímek s použitím Barevného podpisu.
int32_t takeSnapshot( const colordesc &desc, int32_t count = 8 );
3 — Pořídí snímek pomocí Barevného kódu.
int32_t takeSnapshot( const codedesc &desc, int32_t count = 8 );
4 — Pořídí snímek s použitím AprilTag ID.
int32_t takeSnapshot( const tagdesc &desc, int32_t count = 8 );
5 — Pořídí snímek pomocí klasifikace umělé inteligence.
int32_t takeSnapshot( const aiobjdesc &desc, int32_t count = 8 );
Parameters6 — Pořídí snímek pomocí deskriptoru objektu.
int32_t takeSnapshot( const objdesc &desc, int32_t count = 8 );
Parametr |
Typ |
Popis |
|---|---|---|
|
|
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. |
|
|
Určuje kategorii objektu přidruženého k
|
|
|
Deskriptor používaný k detekci specifického objektu. Předává se přímo na
|
|
|
Maximální počet objektů uložených ze snímku. Výchozí hodnota je 8. |
Návratové hodnoty
Vrací hodnotu int32_t představující počet detekovaných objektů odpovídajících zadanému typu signatury nebo detekce.
poznámek
Před přístupem k datům objektu musí senzor s umělou inteligencí pořídit snímek.
Pole
objectsse obnovuje při každém volání.Pokud je zadána hodnota
count, ukládají se pouze největší detekované objekty (do zadaného počtu).
Klasifikace AI závisí na modelu vybraném v nástroji AI Vision Utility ve VEXcode.
Příklady
// 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#
Vrací, zda je senzor AI Vision připojen k EXP Brain.
Dostupné funkce
bool installed();
Parametry
Tato funkce nepřijímá žádné parametry.
Návratové hodnoty
Vrací booleovskou hodnotu označující, zda je připojen senzor AI Vision:
true— Snímač AI Vision je připojen.false— Snímač AI Vision není připojen.
// Display a message if the AI Vision Sensor is connected
if (AIVision1.installed()){
Brain.Screen.print("Installed!");
}
Nemovitosti#
Voláním takeSnapshot se aktualizují výsledky detekce senzoru AI Vision. Každý snímek aktualizuje pole objects , které obsahuje detekované objekty pro požadovanou klasifikaci AI, barevný podpis, barevný kód nebo ID AprilTag.
K datům AI Vision se přistupuje prostřednictvím vlastností objektů uložených v AIVisionSensor.objects[index], kde index začíná na 0.
Objekty jsou seřazeny od největšího po nejmenší (podle plochy).
Rozlišení obrazu z AI Vision Sensor je 320 × 240 pixelů1Hodnoty polohy a velikosti objektu jsou uváděny v pixelech vzhledem k aktuálnímu pohledu senzoru.
K dispozici jsou následující vlastnosti:
objectCount— Vrátí počet detekovaných objektů z nejnovějšího snímku.largestObject— Vybere největší detekovaný objekt z nejnovějšího snímku.objects— Pole obsahující detekované objekty aktualizované funkcítakeSnapshot..exists— Zda položka objektu obsahuje platná data..width— Šířka detekovaného objektu v pixelech..height— Výška detekovaného objektu v pixelech..centerX— Pozice středu objektu na souřadnici X v pixelech..centerY— Pozice středu objektu na souřadnici Y v pixelech..originX— Pozice levého horního rohu objektu na souřadnici X v pixelech..originY— Pozice Y levého horního rohu objektu v pixelech..angle— Orientace barevného kódu nebo ID AprilTag ve stupních..id— ID klasifikace nebo ID AprilTag..score— Skóre spolehlivosti pro klasifikace umělé inteligence.
objectCount#
Funkce objectCount vrací počet položek v poli objects jako celé číslo.
AIVisionSensor.objectCount
Komponent |
Popis |
|---|---|
|
Název vaší instance senzoru AI Vision. |
Příklady
// 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 načte největší detekovaný objekt z pole objects.
Tuto metodu lze použít k tomu, aby se z objects vždy získal největší objekt bez zadání indexu.
AIVisionSensor.largestObject
Komponent |
Popis |
|---|---|
|
Název vaší instance senzoru AI Vision. |
Příklady
// 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 vrací pole detekovaných vlastností objektů. Pole se používá pro přístup ke specifickým hodnotám property jednotlivých objektů.
There are ten properties that are included with each object stored in the objects array after takeSnapshot is used.
Všechny hodnoty vlastností kromě id a score popisují polohu a velikost detekovaného objektu v pohledu senzoru AI Vision v okamžiku, kdy byl použit takeSnapshot Tyto hodnoty se měří v pixelech na základě rozlišení senzoru 320 x 240 pixelů.
AIVisionSensor.objects[index].property
Komponent |
Popis |
|---|---|
|
Název vaší instance senzoru AI Vision. |
|
Index objektu v poli. Index začíná na |
|
Jedna z dostupných vlastností objektu. |
.existuje#
.exists vrací, zda zadaný index objektu obsahuje platný detekovaný objekt.
Přístup
SensorName.objects[index].exists
Návratové hodnoty
Vrací booleovskou hodnotu označující, zda zadaný index objektu obsahuje platný detekovaný objekt:
-
true— A valid object exists at the specified index. -
false— No object exists at the specified index.
Příklady
// 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);
}
.šířka#
.width vrací šířku detekovaného objektu.
Přístup
SensorName.objects[index].width
Návratové hodnoty
Vrací hodnotu int16_t představující šířku detekovaného objektu v pixelech. Hodnota se pohybuje od 1 do 320.
Příklady
// 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);
}
.výška#
.height vrací výšku detekovaného objektu.
Přístup
SensorName.objects[index].height
Návratové hodnoty
Vrací hodnotu int16_t představující výšku detekovaného objektu v pixelech. Hodnota se pohybuje v rozmezí od 1 do 240.
Příklady
// 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 vrací souřadnici x středu detekovaného objektu.
Přístup
SensorName.objects[index].centerX
Návratové hodnoty
Returns an int16_t representing the x-coordinate of the object’s center in pixels. The value ranges from 0 to 320.
Příklady
// 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 vrací souřadnici y středu detekovaného objektu.
Přístup
SensorName.objects[index].centerY
Návratové hodnoty
Returns an int16_t representing the y-coordinate of the object’s center in pixels. The value ranges from 0 to 240.
Příklady
// 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);
}
.úhel#
.angle vrací orientaci detekovaného barevného kódu nebo ID AprilTag.
Přístup
SensorName.objects[index].angle
Návratové hodnoty
Returns a float representing the rotation of the detected Color Code or AprilTag ID in degrees. The value ranges from 0 to 359.9.
Příklady
// 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 vrací souřadnici x levého horního rohu ohraničujícího rámečku detekovaného objektu.
Přístup
SensorName.objects[index].originX
Návratové hodnoty
Returns an int16_t representing the x-coordinate of the object’s bounding box origin in pixels. The value ranges from 0 to 320.
Příklady
// 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 vrací souřadnici y levého horního rohu ohraničujícího rámečku detekovaného objektu.
Přístup
SensorName.objects[index].originY
Návratové hodnoty
Returns an int16_t representing the y-coordinate of the object’s bounding box origin in pixels. The value ranges from 0 to 240.
Příklady
// 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 vrací detekované ID AprilTag nebo ID klasifikace AI.
Přístup
SensorName.objects[index].id
Návratové hodnoty
Vrací hodnotu int32_t představující ID detekovaného objektu:
Pro Klasifikace AI to odpovídá ID definovanému vybraným modelem AI.
Pro ID AprilTag to představuje detekované číslo ID AprilTag (0–36).
Příklady
// 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);
}
.skóre#
.score vrací skóre spolehlivosti detekované klasifikace AI.
Přístup
SensorName.objects[index].score
Návratové hodnoty
Vrací hodnotu int16_t , která označuje skóre spolehlivosti detekované klasifikace AI mezi 1 a 100.
Nižší skóre znamená, že si je senzor méně jistý detekovaným objektem, zatímco vyšší skóre znamená, že si je senzor jistější.
Příklady
// 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);
}
