Tekoälynäköanturi#
Johdanto#
aivision -luokkaa käytetään IQ (2. sukupolvi) tekoälynäköanturin tietojen hallintaan ja käyttämiseen. Tekoälynäköanturi pystyy havaitsemaan:
Tekoälyn luokitukset (kuten peliobjektit)
AprilTag-tunnukset
Mukautetut väriallekirjoitukset
Mukautetut värikoodit
Se tarjoaa objektitietoja, kuten sijainnin, koon, suunnan, luokittelutunnuksen ja luotettavuuspistemäärän.
Anturi käsittelee visuaalista tietoa käyttämällä sisäänrakennettua tekoälymallia, joka on valittu VEXcoden AI Vision Utility -apuohjelmassa. Valittu malli määrittää, mitä tekoälyluokituksia anturi voi havaita. VS Codea käytettäessä tekoälymalli on ensin konfiguroitava VEXcodessa, ennen kuin sitä voidaan käyttää ohjelmassa. Havaitut objektit palautetaan objects-taulukon kautta takeSnapshot-funktion kutsumisen jälkeen.
Luokanrakentajat#
aivision(
int32_t index,
Args&... sigs );
Parametrit#
Parametri |
Tyyppi |
Kuvaus |
|---|---|---|
|
|
Älyportti, johon tekoälynäköanturi on kytketty, kirjoitetaan muodossa |
|
|
Yksi tai useampi anturiin rekisteröitävä tunnistustyyppi:
|
Tekoälymallit ja -luokitukset#
Tekoälynäköanturi voi havaita erilaisia kohteita, joilla on tietyt tekoälyluokitukset. Laitteet-ikkunassa tekoälynäköanturia määritettäessä valitun tekoälyluokittelumallin mukaan erilaisia kohteita voidaan havaita. Tällä hetkellä saatavilla olevat mallit ovat:
Luokkahuoneen elementit
Henkilötunnus |
Tekoälyluokitus |
|---|---|
0 |
|
1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
VEX IQ -robotiikkakilpailun sekoita ja yhdistä
Henkilötunnus |
Tekoälyluokitus |
|---|---|
0 |
|
1 |
|
2 |
|
3 |
|
VEX IQ -robotiikkakilpailun taso nousee
Henkilötunnus |
Tekoälyluokitus |
|---|---|
0 |
|
1 |
|
2 |
|
Esimerkkejä#
// 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
Jäsenten toiminnot#
aivision -luokka sisältää seuraavat jäsenfunktiot:
takeSnapshot— Tallentaa tiedot tietylle väriallekirjoitukselle, värikoodille, tekoälyluokitusryhmälle tai AprilTag ID -ryhmälle.installed— Palauttaa, onko tekoälynäköanturi yhdistetty IQ (2. sukupolvi) aivoihin.
Päästäksesi havaittujen objektien tietoihin takeSnapshot-funktion kutsumisen jälkeen, käytä käytettävissä olevia Properties-ominaisuuksia.
Ennen minkään aivision -jäsenfunktion kutsumista on luotava aivision -instanssi alla olevan mukaisesti:
/* 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#
Kaappaa kuvan tekoälynäköanturilta, käsittelee sen valitun tekoälymallin tai määritettyjen väritunnisteiden avulla ja päivittää objects -matriisin.
Jokainen kutsu päivittää objects -taulukon uusimmilla havaintotuloksilla. Objektit järjestetään suurimmasta pienimpään (leveyden mukaan) alkaen indeksistä 0Jos objekteja ei havaita, objectCount on 0 ja objects[i].exists on false.
1 — Ottaa tilannekuvan käyttämällä objektitunnusta ja objektityyppiä.
int32_t takeSnapshot( uint32_t id, objectType type, uint32_t count );
2 — Ottaa tilannekuvan käyttäen Väriasetus.
int32_t takeSnapshot( const colordesc &desc, int32_t count = 8 );
3 — Ottaa tilannekuvan käyttämällä Värikoodi.
int32_t takeSnapshot( const codedesc &desc, int32_t count = 8 );
4 — Ottaa tilannekuvan käyttämällä AprilTag ID -tunnistetta.
int32_t takeSnapshot( const tagdesc &desc, int32_t count = 8 );
5 — Ottaa tilannekuvan käyttäen tekoälyluokitusta.
int32_t takeSnapshot( const aiobjdesc &desc, int32_t count = 8 );
Parameters6 — Ottaa tilannekuvan käyttämällä objektideskriptoria.
int32_t takeSnapshot( const objdesc &desc, int32_t count = 8 );
Parametri |
Tyyppi |
Kuvaus |
|---|---|---|
|
|
Havaittavan objektin tunniste käytettäessä funktiota
Huomautus: VEXcodessa tekoälyluokitusten nimiä (kuten blueBall) voidaan käyttää suoraan. VS Codessa on käytettävä numeerista tunnusta. |
|
|
Määrittää
|
|
|
Tietyn objektin havaitsemiseen käytetty kuvaaja. Välitetään suoraan funktiolle
|
|
|
Tilannevedoksesta tallennettavien objektien enimmäismäärä. Oletusarvo on 8. |
Paluuarvot
Palauttaa arvon int32_t joka edustaa määritettyä allekirjoitusta tai tunnistustyyppiä vastaavien havaittujen objektien lukumäärää.
Muistiinpanoja
Tekoälynäköanturin on otettava tilannekuva ennen kuin objektitietoihin voidaan päästä käsiksi.
objects-taulukko päivitetään jokaisen kutsun yhteydessä.Kun määritetään
count, vain suurimmat havaitut objektit (määritettyyn määrään asti) tallennetaan.
Tekoälyluokitukset riippuvat VEXcoden AI Vision -apuohjelmassa valitusta mallista.
Esimerkkejä
// 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#
Palauttaa, onko tekoälynäköanturi yhdistetty IQ (2. sukupolvi) aivoihin.
Käytettävissä olevat toiminnot
bool installed();
Parametrit
Tämä funktio ei ota vastaan parametreja.
Paluuarvot
Palauttaa totuusarvon, joka ilmaisee, onko tekoälynäköanturi yhdistetty:
true— Tekoälynäköanturi on yhdistetty.false— Tekoälynäköanturia ei ole kytketty.
// Display a message if the AI Vision Sensor is connected
if (AIVision1.installed()){
Brain.Screen.print("Installed!");
}
Ominaisuudet#
Kutsumalla takeSnapshot päivitetään tekoälynäköanturin tunnistustulokset. Jokainen tilannekuva päivittää objects -taulukon, joka sisältää pyydetyn tekoälyluokituksen, väriallekirjoituksen, värikoodin tai AprilTag-tunnuksen mukaiset havaitut objektit.
AI Vision -dataan päästään käsiksi AIVisionSensor.objects[index]-muuttujaan tallennettujen objektien ominaisuuksien kautta, missä index alkaa merkistä 0.
Objektit on järjestetty suurimmasta pienimpään (pinta-alan mukaan).
Tekoälynäköanturin kuvan resoluutio on 320 × 240 pikseliäKohteen sijainti- ja kokoarvot ilmoitetaan pikseliyksiköissä suhteessa anturin nykyiseen näkymään.
Seuraavat ominaisuudet ovat saatavilla:
objectCount— Palauttaa havaittujen objektien määrän viimeisimmästä tilannevedoksesta.largestObject— Valitsee suurimman havaitun objektin viimeisimmästä tilannevedoksesta.objects— Taulukko, joka sisältää havaitut objektit, jotka on päivitettytakeSnapshot-metodilla..exists— Sisältääkö objektimerkintä kelvollisia tietoja..width— Havaitun kohteen leveys pikseleinä..height— Havaitun kohteen korkeus pikseleinä..centerX— Objektin keskipisteen X-sijainti pikseleinä..centerY— Objektin keskipisteen Y-sijainti pikseleinä..originX— Objektin vasemman yläkulman X-sijainti pikseleinä..originY— Objektin vasemman yläkulman Y-sijainti pikseleinä..angle— Värikoodin tai AprilTag-tunnuksen suunta asteina..id— Classification ID or AprilTag ID..score— Tekoälyluokitusten luotettavuuspisteet.
objectCount#
objectCount palauttaa taulukon objects alkioiden lukumäärän kokonaislukuna.
AIVisionSensor.objectCount
Komponentti |
Kuvaus |
|---|---|
|
Tekoälynäköanturi-instanssisi nimi. |
Esimerkkejä
// 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 hakee suurimman havaitun objektin objects -taulukosta.
Tätä metodia voidaan käyttää aina suurimman objektin hakemiseen objects joukosta ilman indeksin määrittämistä.
AIVisionSensor.largestObject
Komponentti |
Kuvaus |
|---|---|
|
Tekoälynäköanturi-instanssisi nimi. |
Esimerkkejä
// 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 palauttaa taulukon havaittujen objektien ominaisuuksista. Käytä taulukkoa yksittäisten objektien tiettyjen property-arvojen käyttämiseen.
takeSnapshot käytön jälkeen objects -taulukkoon tallennettuun objektiin sisältyy kymmenen ominaisuutta.
Kaikki ominaisuusarvot paitsi id ja score kuvaavat havaitun kohteen sijainnin ja koon tekoälynäköanturin näkymässä sillä hetkellä, kun takeSnapshot käytettiin. Nämä arvot mitataan pikseleinä anturin 320 x 240 pikselin resoluution perusteella.
AIVisionSensor.objects[index].property
Komponentti |
Kuvaus |
|---|---|
|
Tekoälynäköanturi-instanssisi nimi. |
|
Objektin indeksi taulukossa. Indeksi alkaa luvusta |
|
Yksi käytettävissä olevista objektin ominaisuuksista. |
.olemassa#
.exists palauttaa, sisältääkö määritetty objekti-indeksi kelvollisen havaitun objektin.
Käyttöoikeus
SensorName.objects[index].exists
Paluuarvot
Palauttaa totuusarvon, joka ilmaisee, sisältääkö määritetty objekti-indeksi kelvollisen havaitun objektin:
-
true— A valid object exists at the specified index. -
false— No object exists at the specified index.
Esimerkkejä
// 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);
}
.leveys#
.width palauttaa havaitun objektin leveyden.
Käyttöoikeus
SensorName.objects[index].width
Paluuarvot
Palauttaa arvon int16_t joka edustaa havaitun objektin leveyttä pikseleinä. Arvo vaihtelee välillä 1 - 320.
Esimerkkejä
// 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);
}
.korkeus#
.height palauttaa havaitun objektin korkeuden.
Käyttöoikeus
SensorName.objects[index].height
Paluuarvot
Palauttaa arvon int16_t joka edustaa havaitun objektin korkeutta pikseleinä. Arvo vaihtelee välillä 1 - 240.
Esimerkkejä
// 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 palauttaa havaitun objektin keskipisteen x-koordinaatin.
Käyttöoikeus
SensorName.objects[index].centerX
Paluuarvot
Palauttaa arvon int16_t joka edustaa objektin keskipisteen x-koordinaattia pikseleinä. Arvo vaihtelee välillä 0 - 320.
Esimerkkejä
// 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 palauttaa havaitun objektin keskipisteen y-koordinaatin.
Käyttöoikeus
SensorName.objects[index].centerY
Paluuarvot
Palauttaa arvon int16_t joka edustaa objektin keskipisteen y-koordinaattia pikseleinä. Arvo vaihtelee välillä 0 - 240.
Esimerkkejä
// 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);
}
.kulma#
.angle palauttaa havaitun värikoodin tai AprilTag-tunnuksen suunnan.
Käyttöoikeus
SensorName.objects[index].angle
Paluuarvot
Returns a float representing the rotation of the detected Color Code or AprilTag ID in degrees. The value ranges from 0 to 359.9.
Esimerkkejä
// 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 palauttaa havaitun objektin rajaavan laatikon vasemman yläkulman x-koordinaatin.
Käyttöoikeus
SensorName.objects[index].originX
Paluuarvot
Palauttaa arvon int16_t joka edustaa objektin rajaavan laatikon origon x-koordinaattia pikseleinä. Arvo vaihtelee välillä 0 - 320.
Esimerkkejä
// 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 palauttaa havaitun objektin rajaavan laatikon vasemman yläkulman y-koordinaatin.
Käyttöoikeus
SensorName.objects[index].originY
Paluuarvot
Palauttaa arvon int16_t joka edustaa objektin rajaavan laatikon origon y-koordinaattia pikseleinä. Arvo vaihtelee välillä 0 - 240.
Esimerkkejä
// 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-tiedosto#
.id palauttaa havaitun AprilTag-tunnuksen tai tekoälyluokituksen tunnuksen.
Käyttöoikeus
SensorName.objects[index].id
Paluuarvot
Palauttaa arvon int32_t joka edustaa havaitun objektin tunnusta:
Tekoälyluokitukset -luokitukselle tämä vastaa valitun tekoälymallin määrittämää tunnusta.
AprilTag-tunnusten tapauksessa tämä edustaa havaitun AprilTag-tunnusnumeroa (0–36).
Esimerkkejä
// 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);
}
.pisteet#
.score palauttaa havaitun tekoälyluokituksen luotettavuuspistemäärän.
Käyttöoikeus
SensorName.objects[index].score
Paluuarvot
Palauttaa arvon int16_t joka ilmaisee havaitun tekoälyluokituksen luotettavuuspistemäärän väliltä 1–100.
Alhaisempi pistemäärä tarkoittaa, että anturi on vähemmän varma havaitusta kohteesta, kun taas korkeampi pistemäärä tarkoittaa, että anturi on varmempi.
Esimerkkejä
// 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);
}
