Dirbtinio intelekto regėjimo jutiklis#
Įvadas#
„ aivision klasė naudojama valdyti ir pasiekti duomenis iš „V5 AI Vision Sensor“. AI Vision Sensor gali aptikti:
Dirbtinio intelekto klasifikacijos (pvz., žaidimo objektai)
AprilTag ID
Pasirinktinės spalvos parašai
Pasirinktiniai spalvų kodai
Pateikiami objekto duomenys, įskaitant padėtį, dydį, orientaciją, klasifikavimo ID ir patikimumo balą.
Jutiklis apdoroja vaizdinę informaciją naudodamas integruotą dirbtinio intelekto modelį, pasirinktą VEXcode programoje „AI Vision Utility“. Pasirinktas modelis lemia, kurias dirbtinio intelekto klasifikacijas jutiklis gali aptikti. Naudojant VS Code, dirbtinio intelekto modelį pirmiausia reikia sukonfigūruoti VEXcode, kad jį būtų galima naudoti programoje. Aptikti objektai grąžinami per masyvą objects iškvietus takeSnapshot.
Klasės konstruktoriai#
aivision(
int32_t index,
Args&... sigs );
Parametrai#
Parametras |
Tipas |
Aprašymas |
|---|---|---|
|
|
Išmanusis prievadas, prie kurio prijungtas dirbtinio intelekto vaizdo jutiklis, užrašomas kaip |
|
|
Vienas ar keli aptikimo tipai, kuriuos reikia užregistruoti jutiklyje:
|
Dirbtinio intelekto modeliai ir klasifikacijos#
Dirbtinio intelekto regos jutiklis gali aptikti skirtingus objektus su tam tikromis dirbtinio intelekto klasifikacijomis. Priklausomai nuo dirbtinio intelekto klasifikacijos modelio, pasirinkto konfigūruojant dirbtinio intelekto regos jutiklį įrenginių lange, galima aptikti skirtingus objektus. Šiuo metu galimi modeliai:
Klasės elementai
ID numeris |
DI klasifikacija |
|---|---|
0 |
|
1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
VEX V5 robotikos varžybos su dideliais statymais
ID numeris |
DI klasifikacija |
|---|---|
0 |
|
1 |
|
2 |
|
VEX V5 robotikos varžybų pasipriešinimas
ID numeris |
DI klasifikacija |
|---|---|
0 |
|
1 |
|
VEX V5 robotikos varžybų viršijimas
ID numeris |
DI klasifikacija |
|---|---|
0 |
|
1 |
|
2 |
|
3 |
|
4 |
|
Pavyzdžiai#
// 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
Narių funkcijos#
aivision klasė apima šias narines funkcijas:
takeSnapshot– fiksuoja duomenis pagal konkretų spalvos parašą, spalvos kodą, dirbtinio intelekto klasifikavimo grupę arba „AprilTag ID“ grupę.installed– Grąžina, ar dirbtinio intelekto regėjimo jutiklis prijungtas prie „V5 Brain“.
Norėdami pasiekti aptiktų objektų duomenis iškvietę takeSnapshot, naudokite Properties.
Prieš iškviečiant bet kokias aivision narių funkcijas, reikia sukurti aivision egzempliorių, kaip parodyta žemiau:
/* 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#
Užfiksuoja vaizdą iš dirbtinio intelekto regos jutiklio, apdoroja jį naudodamas pasirinktą dirbtinio intelekto modelį arba sukonfigūruotus spalvų parašus ir atnaujina objects masyvą.
Kiekvienas iškvietimas atnaujina objects masyvą naujausiais aptikimo rezultatais. Objektai yra rūšiuojami nuo didžiausio iki mažiausio (pagal plotį), pradedant nuo indekso 0Jei objektų neaptikta, objectCount bus 0 , o objects[i].exists bus false.
1 — Padaro momentinę kopiją naudodamas objekto ID ir tipą.
int32_t takeSnapshot( uint32_t id, objectType type, uint32_t count );
2 — Padaro momentinę nuotrauką naudodamas Spalvų parašą.
int32_t takeSnapshot( const colordesc &desc, int32_t count = 8 );
3 — Padaro momentinę nuotrauką naudodamas spalvų kodą.
int32_t takeSnapshot( const codedesc &desc, int32_t count = 8 );
4 — Padaro momentinę kopiją naudodamas AprilTag ID.
int32_t takeSnapshot( const tagdesc &desc, int32_t count = 8 );
5 — Padaro momentinę kopiją naudodamas DI klasifikaciją.
int32_t takeSnapshot( const aiobjdesc &desc, int32_t count = 8 );
Parameters6 — Padaro momentinę kopiją naudodamas objekto aprašą.
int32_t takeSnapshot( const objdesc &desc, int32_t count = 8 );
Parametras |
Tipas |
Aprašymas |
|---|---|---|
|
|
Objekto, kurį reikia aptikti naudojant funkciją
Pastaba: VEXcode AI klasifikacijos pavadinimai (pvz., blueBall) gali būti naudojami tiesiogiai. VS Code turi būti naudojamas skaitmeninis ID. |
|
|
Nurodo objekto kategoriją, susietą su
|
|
|
Deskriptorius, naudojamas konkrečiam objektui aptikti. Perduodamas tiesiai į
|
|
|
Didžiausias momentinėje kopijoje saugomų objektų skaičius. Numatytoji reikšmė yra 8. |
Grąžinamosios reikšmės
Grąžina int32_t , nurodantį aptiktų objektų, atitinkančių nurodytą parašą arba aptikimo tipą, skaičių.
Pastabos
Prieš pasiekiant objekto duomenis, dirbtinio intelekto vaizdo jutiklis turi padaryti momentinę kopiją.
objectsmasyvas atnaujinamas kiekvieno iškvietimo metu.Kai nurodyta
count, saugomi tik didžiausi aptikti objektai (iki nurodyto kiekio).
DI klasifikacijos priklauso nuo modelio, pasirinkto „VEXcode“ DI vizijos įrankyje.
Pavyzdžių
// 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#
Grąžina, ar AI regėjimo jutiklis yra prijungtas prie V5 smegenų.
Galimos funkcijos
bool installed();
Parametrai
Ši funkcija nepriima jokių parametrų.
Grąžinamosios reikšmės
Grąžina loginę reikšmę, nurodančią, ar prijungtas dirbtinio intelekto vaizdo jutiklis:
true— Prijungtas dirbtinio intelekto vaizdo jutiklis.false— Dirbtinio intelekto vaizdo jutiklis neprijungtas.
// Display a message if the AI Vision Sensor is connected
if (AIVision1.installed()){
Brain.Screen.print("Installed!");
}
Ypatybės#
Iškviečiant takeSnapshot, atnaujinami dirbtinio intelekto regos jutiklio aptikimo rezultatai. Kiekviena momentinė kopija atnaujina objects masyvą, kuriame yra aptikti objektai pagal prašomą dirbtinio intelekto klasifikaciją, spalvos parašą, spalvos kodą arba „AprilTag“ ID.
Prie „AI Vision“ duomenų galima prisijungti per objektų, saugomų faile AIVisionSensor.objects[index], ypatybes, kur index prasideda nuo 0.
Objektai surūšiuoti nuo didžiausio iki mažiausio (pagal plotą).
Dirbtinio intelekto vaizdo jutiklio vaizdo skiriamoji geba yra 320 × 240 pikseliųObjekto padėties ir dydžio vertės pateikiamos pikselių vienetais, atsižvelgiant į dabartinį jutiklio vaizdą.
Galima įsigyti šias savybes:
objectCount— Grąžina aptiktų objektų skaičių iš naujausios momentinės kopijos.largestObject– Pasirenka didžiausią aptiktą objektą iš naujausios momentinės kopijos.objects– masyvas, kuriame yra aptikti objektai, atnaujinti naudojanttakeSnapshot..exists— Ar objekto įraše yra galiojančių duomenų..width— Aptikto objekto plotis pikseliais..height— Aptikto objekto aukštis pikseliais..centerX— X position of the object’s center in pixels..centerY— objekto centro Y padėtis pikseliais..originX— X position of the object’s top-left corner in pixels..originY— objekto viršutinio kairiojo kampo Y padėtis pikseliais..angle— Orientation of a Color Code or AprilTag ID in degrees..id— Classification ID or AprilTag ID..score– DI klasifikacijų patikimumo balas.
objectCount#
objectCount grąžina elementų skaičių masyve objects kaip sveikąjį skaičių.
AIVisionSensor.objectCount
Komponentas |
Aprašymas |
|---|---|
|
Jūsų DI regėjimo jutiklio egzemplioriaus pavadinimas. |
Pavyzdžių
// 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 iš „ objects masyvo paima didžiausią aptiktą objektą.
Šis metodas gali būti naudojamas norint visada gauti didžiausią objektą iš objects , nenurodant indekso.
AIVisionSensor.largestObject
Komponentas |
Aprašymas |
|---|---|
|
Jūsų DI regėjimo jutiklio egzemplioriaus pavadinimas. |
Pavyzdžių
// 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 grąžina aptiktų objektų savybių masyvą. Naudokite masyvą, norėdami pasiekti konkrečias atskirų objektų property reikšmes.
Kiekvienam objektui, saugomam masyve objects , panaudojus takeSnapshot , priskiriamos dešimt savybių.
Visos ypatybių reikšmės, išskyrus id ir score apibūdina aptikto objekto padėtį ir dydį dirbtinio intelekto regos jutiklio rodinyje tuo metu, kai buvo naudojama takeSnapshot . Šios reikšmės matuojamos pikseliais, remiantis jutiklio 320 x 240 pikselių skiriamąja geba.
AIVisionSensor.objects[index].property
Komponentas |
Aprašymas |
|---|---|
|
Jūsų DI regėjimo jutiklio egzemplioriaus pavadinimas. |
|
Objekto indeksas masyve. Indeksas prasideda nuo |
|
Viena iš galimų objekto savybių. |
.egzistuoja#
.exists grąžina, ar nurodytame objekto indekse yra galiojantis aptiktas objektas.
Prieiga
SensorName.objects[index].exists
Grąžinamosios reikšmės
Grąžina loginę reikšmę, nurodančią, ar nurodytame objekto indekse yra galiojantis aptiktas objektas:
-
true— A valid object exists at the specified index. -
false— No object exists at the specified index.
Pavyzdžių
// 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);
}
.plotis#
.width grąžina aptikto objekto plotį.
Prieiga
SensorName.objects[index].width
Grąžinamosios reikšmės
Grąžina int16_t , nurodantį aptikto objekto plotį pikseliais. Reikšmė svyruoja nuo 1 iki 320.
Pavyzdžių
// 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);
}
.aukštis#
.height grąžina aptikto objekto aukštį.
Prieiga
SensorName.objects[index].height
Grąžinamosios reikšmės
Grąžina int16_t nurodantį aptikto objekto aukštį pikseliais. Reikšmė svyruoja nuo 1 iki 240.
Pavyzdžių
// 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 grąžina aptikto objekto centro x koordinatę.
Prieiga
SensorName.objects[index].centerX
Grąžinamosios reikšmės
Grąžina int16_t reiškiančią objekto centro x koordinatę pikseliais. Reikšmė svyruoja nuo 0 iki 320.
Pavyzdžių
// 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 grąžina aptikto objekto centro y koordinatę.
Prieiga
SensorName.objects[index].centerY
Grąžinamosios reikšmės
Grąžina int16_t reiškiančią objekto centro y koordinatę pikseliais. Reikšmė svyruoja nuo 0 iki 240.
Pavyzdžių
// 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);
}
.kampas#
.angle grąžina aptikto spalvos kodo arba „AprilTag“ ID orientaciją.
Prieiga
SensorName.objects[index].angle
Grąžinamosios reikšmės
Returns a float representing the rotation of the detected Color Code or AprilTag ID in degrees. The value ranges from 0 to 359.9.
Pavyzdžių
// 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 grąžina aptikto objekto ribojančio langelio viršutinio kairiojo kampo x koordinatę.
Prieiga
SensorName.objects[index].originX
Grąžinamosios reikšmės
Grąžina int16_t reiškiančią objekto ribojančios dėžės pradžios x koordinatę pikseliais. Reikšmė svyruoja nuo 0 iki 320.
Pavyzdžių
// 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 grąžina aptikto objekto ribojančio langelio viršutinio kairiojo kampo y koordinatę.
Prieiga
SensorName.objects[index].originY
Grąžinamosios reikšmės
Grąžina int16_t reiškiančią objekto ribojančio langelio pradžios y koordinatę pikseliais. Reikšmė svyruoja nuo 0 iki 240.
Pavyzdžių
// 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 grąžina aptiktą „AprilTag“ ID arba AI klasifikacijos ID.
Prieiga
SensorName.objects[index].id
Grąžinamosios reikšmės
Grąžina int32_t , nurodantį aptikto objekto ID:
DI klasifikacijų atveju tai atitinka pasirinkto DI modelio apibrėžtą ID.
„AprilTag“ ID atveju tai yra aptiktas „AprilTag“ ID numeris (0–36).
Pavyzdžių
// 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#
.score grąžina aptiktos dirbtinio intelekto klasifikacijos patikimumo balą.
Prieiga
SensorName.objects[index].score
Grąžinamosios reikšmės
Grąžina int16_t , nurodantį aptiktos dirbtinio intelekto klasifikacijos patikimumo balą nuo 1 iki 100.
Mažesnis balas reiškia, kad jutiklis mažiau pasitiki aptiktu objektu, o didesnis balas – kad jutiklis labiau pasitiki.
Pavyzdžių
// 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);
}
