AI látásérzékelő#
Bevezetés#
A aivision osztály az EXP AI Vision Sensor adatainak vezérlésére és elérésére szolgál. Az AI Vision Sensor a következőket képes érzékelni:
MI-besorolások (például játékelemek)
AprilTag azonosítók
Egyedi színaláírások
Egyéni színkódok
Objektumadatokat biztosít, beleértve a pozíciót, a méretet, a tájolást, az osztályozási azonosítót és a megbízhatósági pontszámot.
Az érzékelő a vizuális információkat egy beépített MI-modell segítségével dolgozza fel, amelyet a VEXcode AI Vision Utility segédprogramjában választottak ki. A kiválasztott modell határozza meg, hogy az érzékelő mely MI-osztályozásokat képes érzékelni. VS Code használatakor az MI-modellt először konfigurálni kell a VEXcode-ban, mielőtt az a programban használható lenne. Az észlelt objektumokat a objects tömb adja vissza a takeSnapshot meghívása után.
Osztálykonstruktorok#
aivision(
int32_t index,
Args&... sigs );
Paraméterek#
Paraméter |
Típus |
Leírás |
|---|---|---|
|
|
Az a Smart Port, amelyhez az AI Vision Sensor csatlakozik, |
|
|
Egy vagy több érzékelési típus regisztrálása az érzékelővel:
|
MI modellek és osztályozások#
Az AI Vision Sensor különböző objektumokat képes érzékelni bizonyos AI-osztályozások szerint. Az Eszközök ablakban az AI Vision Sensor konfigurálásakor kiválasztott AI-osztályozási modelltől függően különböző objektumok érzékelhetők. A jelenleg elérhető modellek a következők:
Tantermi elemek
Azonosító szám |
AI osztályozás |
|---|---|
0 |
|
1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
VEX V5 Robotikaverseny Nagy Téttel
Azonosító szám |
AI osztályozás |
|---|---|
0 |
|
1 |
|
2 |
|
VEX V5 Robotikaverseny visszaszorítása
Azonosító szám |
AI osztályozás |
|---|---|
0 |
|
1 |
|
VEX V5 Robotika Verseny Felülírás
Azonosító szám |
AI osztályozás |
|---|---|
0 |
|
1 |
|
2 |
|
3 |
|
4 |
|
Példák#
// 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
Tagfüggvények#
Az aivision osztály a következő tagfüggvényeket tartalmazza:
takeSnapshot— Adatokat rögzít egy adott színaláíráshoz, színkódhoz, mesterséges intelligencia osztályozási csoporthoz vagy AprilTag azonosító csoporthoz.installed— Visszaadja, hogy az AI Vision Sensor csatlakozik-e az EXP Brainhez.
A takeSnapshot meghívása után az észlelt objektumadatok eléréséhez használd a rendelkezésre álló Properties tulajdonságot.
Bármely aivision tagfüggvény meghívása előtt létre kell hozni egy aivision példányt, az alábbiak szerint:
/* 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#
Képet rögzít az AI Vision Sensorról, feldolgozza azt a kiválasztott AI modell vagy a konfigurált színaláírások segítségével, és frissíti a objects tömböt.
Minden hívás frissíti a objects tömböt a legfrissebb észlelési eredményekkel. Az objektumok a legnagyobbtól a legkisebbig vannak rendezve (szélesség szerint), 0indextől kezdve. Ha nem észlelhetők objektumok, akkor a objectCount értéke 0 lesz, az objects[i].exists pedig false lesz.
1 — Pillanatképet készít egy objektumazonosító és objektumtípus alapján.
int32_t takeSnapshot( uint32_t id, objectType type, uint32_t count );
2 — Pillanatképet készít Színaláírás használatával.
int32_t takeSnapshot( const colordesc &desc, int32_t count = 8 );
3 — Pillanatképet készít Színkód használatával.
int32_t takeSnapshot( const codedesc &desc, int32_t count = 8 );
4 — Pillanatképet készít egy AprilTag ID használatával.
int32_t takeSnapshot( const tagdesc &desc, int32_t count = 8 );
5 — Pillanatképet készít egy AI osztályozás használatával.
int32_t takeSnapshot( const aiobjdesc &desc, int32_t count = 8 );
Parameters6 — Pillanatképet készít egy objektumleíró használatával.
int32_t takeSnapshot( const objdesc &desc, int32_t count = 8 );
Paraméter |
Típus |
Leírás |
|---|---|---|
|
|
Az objektum azonosítója, amelyet a
Megjegyzés: A VEXcode-ban az AI osztályozási nevek (például blueBall) közvetlenül is használhatók. A VS Code-ban a numerikus azonosítót kell használni. |
|
|
Megadja a
|
|
|
Egy adott objektum detektálására használt leíró. Közvetlenül átadva
|
|
|
A pillanatképből tárolt objektumok maximális száma. Alapértelmezés szerint 8. |
Visszatérési értékek
Egy int32_t értéket ad vissza, amely a megadott aláírásnak vagy észlelési típusnak megfelelő észlelt objektumok számát jelöli.
Megjegyzések
A mesterséges intelligenciával működő vizuális érzékelőnek pillanatképet kell készítenie, mielőtt hozzáférhetne az objektumadatokhoz.
A
objectstömb minden híváskor frissül.Ha
countértéket adjuk meg, akkor csak a legnagyobb észlelt objektumok (a megadott mennyiségig) kerülnek tárolásra.
Az AI-besorolások a VEXcode AI Vision Utility programjában kiválasztott modelltől függenek.
Példa
// 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#
Visszaadja, hogy az AI Vision Sensor csatlakozik-e az EXP Brainhez.
Elérhető funkciók
bool installed();
Paraméterek
Ez a függvény nem fogad el paramétereket.
Visszatérési értékek
Egy logikai értéket ad vissza, amely jelzi, hogy a mesterséges intelligencia által vezérelt látásérzékelő csatlakoztatva van-e:
true— Az AI Vision érzékelő csatlakoztatva van.false— Az AI Vision érzékelő nincs csatlakoztatva.
// Display a message if the AI Vision Sensor is connected
if (AIVision1.installed()){
Brain.Screen.print("Installed!");
}
Tulajdonságok#
A takeSnapshot meghívása frissíti az AI Vision Sensor észlelési eredményeit. Minden pillanatfelvétel frissíti a objects tömböt, amely a kért AI osztályozás, színaláírás, színkód vagy AprilTag azonosító alapján észlelt objektumokat tartalmazza.
Az AI Vision adataihoz AIVisionSensor.objects[index]mappában tárolt objektumok tulajdonságain keresztül lehet hozzáférni, ahol index index 0 -tel kezdődik.
Az objektumok a legnagyobbtól a legkisebbig vannak rendezve (terület szerint).
Az AI Vision Sensor képfelbontása 320 × 240 pixelAz objektum pozícióját és méretét a rendszer pixelegységben jelenti az érzékelő aktuális nézetéhez viszonyítva.
A következő ingatlanok érhetők el:
objectCount— Visszaadja a legutóbbi pillanatképből észlelt objektumok számát.largestObject— Kiválasztja a legutóbbi pillanatképből a legnagyobb észlelt objektumot.objects— AtakeSnapshotáltal frissített, észlelt objektumokat tartalmazó tömb..exists— Azt jelzi, hogy az objektumbejegyzés érvényes adatokat tartalmaz-e..width— A detektált objektum szélessége pixelben..height— A detektált objektum magassága pixelben..centerX— Az objektum középpontjának X pozíciója pixelben..centerY— Az objektum középpontjának Y pozíciója pixelben..originX— Az objektum bal felső sarkának X pozíciója pixelben..originY— Az objektum bal felső sarkának Y pozíciója pixelben..angle— Egy színkód vagy AprilTag azonosító orientációja fokban..id— Osztályozási azonosító vagy AprilTag azonosító..score— MI-osztályozások megbízhatósági pontszáma.
objectCount#
objectCount visszaadja az objects tömbben lévő elemek számát egész számként.
AIVisionSensor.objectCount
Összetevő |
Leírás |
|---|---|
|
Az AI Vision Sensor példány neve. |
Példa
// 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 kikeresi a legnagyobb észlelt objektumot a objects tömbből.
Ez a metódus arra használható, hogy mindig a legnagyobb objektumot kapjuk meg objects közül index megadása nélkül.
AIVisionSensor.largestObject
Összetevő |
Leírás |
|---|---|
|
Az AI Vision Sensor példány neve. |
Példa
// 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 Az észlelt objektumok tulajdonságainak tömbjét adja vissza. A tömb segítségével az egyes objektumok adott property értékeihez férhet hozzá.
A objects tömbben tárolt objektumokhoz tíz tulajdonság tartozik takeSnapshot használata után.
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.
AIVisionSensor.objects[index].property
Összetevő |
Leírás |
|---|---|
|
Az AI Vision Sensor példány neve. |
|
Az objektum indexe a tömbben. Az index |
|
Az elérhető objektumtulajdonságok egyike. |
.létezik#
.exists függvény visszaadja, hogy a megadott objektumindex tartalmaz-e érvényes észlelt objektumot.
Hozzáférés
SensorName.objects[index].exists
Visszatérési értékek
Egy logikai értéket ad vissza, amely jelzi, hogy a megadott objektumindex tartalmaz-e érvényes észlelt objektumot:
-
true— A valid object exists at the specified index. -
false— No object exists at the specified index.
Példa
// 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);
}
.szélesség#
.width visszaadja az észlelt objektum szélességét.
Hozzáférés
SensorName.objects[index].width
Visszatérési értékek
Egy int16_t értéket ad vissza, amely a detektált objektum szélességét jelöli pixelben. Az érték 1 és 320 között lehet.
Példa
// 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);
}
.magasság#
.height visszaadja az észlelt objektum magasságát.
Hozzáférés
SensorName.objects[index].height
Visszatérési értékek
Egy int16_t értéket ad vissza, amely a detektált objektum magasságát jelöli pixelben. Az érték 1 és 240 között lehet.
Példa
// 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 visszaadja a detektált objektum középpontjának x koordinátáját.
Hozzáférés
SensorName.objects[index].centerX
Visszatérési értékek
Egy int16_t értéket ad vissza, amely az objektum középpontjának x koordinátáját jelöli pixelben. Az érték 0 és 320 között lehet.
Példa
// 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 visszaadja a detektált objektum középpontjának y koordinátáját.
Hozzáférés
SensorName.objects[index].centerY
Visszatérési értékek
Egy int16_t értéket ad vissza, amely az objektum középpontjának y koordinátáját jelöli pixelben. Az érték 0 és 240 között lehet.
Példa
// 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);
}
.szög#
.angle visszaadja a detektált színkód vagy AprilTag azonosító orientációját.
Hozzáférés
SensorName.objects[index].angle
Visszatérési értékek
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élda
// 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 visszaadja az észlelt objektum határolókeretének bal felső sarkának x koordinátáját.
Hozzáférés
SensorName.objects[index].originX
Visszatérési értékek
Egy int16_t értéket ad vissza, amely az objektum határolókeret origójának x koordinátáját jelöli pixelben. Az érték 0 és 320 között lehet.
Példa
// 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 visszaadja a detektált objektum határolókeretének bal felső sarkának y koordinátáját.
Hozzáférés
SensorName.objects[index].originY
Visszatérési értékek
Egy int16_t értéket ad vissza, amely az objektum határolókeret origójának y koordinátáját jelöli pixelben. Az érték 0 és 240 között lehet.
Példa
// 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 visszaadja az észlelt AprilTag azonosítót vagy AI osztályozási azonosítót.
Hozzáférés
SensorName.objects[index].id
Visszatérési értékek
Egy int32_t értéket ad vissza, amely a detektált objektum azonosítóját jelöli:
Az AI Classifications esetében ez a kiválasztott AI modell által meghatározott azonosítónak felel meg.
AprilTag azonosítók esetén ez az észlelt AprilTag azonosító számát jelöli (0–36).
Példa
// 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);
}
.pontszám#
.score Az észlelt AI-osztályozás megbízhatósági pontszámát adja vissza.
Hozzáférés
SensorName.objects[index].score
Visszatérési értékek
int16_t értéket ad vissza, amely az észlelt AI-osztályozás 1 és 100 közötti megbízhatósági pontszámát jelzi.
Az alacsonyabb pontszám azt jelenti, hogy az érzékelő kevésbé bízik az észlelt tárggyal kapcsolatban, míg a magasabb pontszám azt jelenti, hogy az érzékelő nagyobb valószínűséggel észleli a hibát.
Példa
// 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);
}
