AI látásérzékelő#
Bevezetés#
Az IQ AI látásérzékelő képes tárgyak, színek és AprilTag azonosítók érzékelésére és nyomon követésére. Ez lehetővé teszi a robot számára, hogy elemezze a környezetét, kövesse a tárgyakat, és a detektált vizuális adatok alapján reagáljon.
Az alábbi példákban a konfigurált IQ AI Vision Sensor neve ai_vision_1lesz, és a konfigurált Color Signature objektumokat, például RED_BOX, az API dokumentáció összes további példájában használjuk, amikor AiVision osztálymetódusokra hivatkozunk.
Az alábbiakban felsoroljuk az összes módszert:
Getterek – Adatok lekérése az IQ AI látásérzékelőről.
take_snapshot— Egy adott aláírás adatait rögzíti.installed— Azt jelzi, hogy az IQ AI látásérzékelő csatlakozik-e az IQ (2. generációs) agyhoz.
Tulajdonságok — A take_snapshot függvényből visszaadott objektumadatok.
.exists— Meghatározza, hogy az objektum létezik-e az aktuális detektálásban..width— A detektált objektum szélessége..height— Az érzékelt objektum magassága..centerX— Az objektum középpontjának X pozíciója..centerY— Az objektum középpontjának Y pozíciója..angle— A színkód vagy az AprilTag azonosító orientációja..originX— Az objektum bal felső sarkának X pozíciója..originY— Az objektum bal felső sarkának Y pozíciója..id— Az objektum osztályozása vagy címkeazonosítója..score— MI-osztályozások megbízhatósági pontszáma.
Konstruktorok – Az érzékelők manuális inicializálása és konfigurálása.
Getterek#
take_snapshot#
A take_snapshot függvény az IQ AI Vision érzékelő keretrendszeréből származó adatokat egyetlen aláírásra szűri – ez egy mentett leírás valamiről, amit az érzékelő felismer, például egy előre betanított objektum, egy AprilTag azonosító vagy egy konfigurált színaláírás vagy színkód –, és egy tuple értéket ad vissza.
A Színaláírások és Színkódok beállításokat először a Vision Utility programban kell konfigurálni, mielőtt ezzel a módszerrel használhatók lennének.
A tuple a 0 indexszel kezdődően, szélesség szerint a legnagyobbtól a legkisebbig rendezve tárolja az objektumokat. Minden objektum properties tulajdonsága a hozzá tartozó index segítségével érhető el. Ha nem található egyező objektum, akkor egy üres tuple kerül visszaadásra.
Usage:
ai_vision_1.take_snapshot(SIGNATURE)
Paraméterek |
Leírás |
|---|---|
|
Úgy szűri az adathalmazt, hogy csak az adott aláírás adatait tartalmazza. Az elérhető aláírások a következők:
|
|
Opcionális. Beállítja a visszaadható objektumok maximális számát 1 és 24 között (alapértelmezett: 8). |
# Move forward if an object is detected
while True:
objects = ai_vision_1.take_snapshot(AiVision.ALL_AIOBJS)
if objects[0].exists:
drivetrain.drive_for(FORWARD, 50, MM)
wait(50, MSEC)
Megjegyzés: A visszaadott tuple bármely property szerint rendezhető, nem csak szélesség szerint, a Python sorted függvényével. Például az AprilTag ID szerinti rendezés:
# Print each detected AprilTag ID in ascending order by ID
while True:
apriltags = sorted(ai_vision_1.take_snapshot(AiVision.ALL_TAGS), key=id)
for tag in apriltags:
print(tag.id)
wait(1, SECONDS)
Vagy inkább magasság szerinti rendezés:
# Print each detected AprilTag ID in ascending order by height
while True:
apriltags_by_height = sorted(ai_vision_1.take_snapshot(AiVision.ALL_TAGS), key=lambda tag: tag.height)
for tag in apriltags_by_height:
print(tag.height)
wait(1, SECONDS)
MI-besorolások#
Az IQ AI Vision Sensor bizonyos MI-besorolások alá tartozó objektumokat képes érzékelni. Az Eszközök ablakban az MI Vision Sensor konfigurálásakor kiválasztott MI-besorolási modelltől függően különböző objektumok érzékelhetők. A jelenleg elérhető modellek a következők:
Tantermi tárgyak
Azonosító szám |
AI osztályozás |
|---|---|
0 |
|
1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
VEX IQ Robotikaverseny Mix & Match
Azonosító szám |
AI osztályozás |
|---|---|
0 |
|
1 |
|
2 |
|
3 |
|
VEX IQ Robotikaverseny szintlépés
Azonosító szám |
AI osztályozás |
|---|---|
0 |
|
1 |
|
2 |
|
Színaláírások#
A színaláírás egy egyedi szín, amelyet az IQ AI Vision Sensor felismer. Ezek az aláírások lehetővé teszik az IQ AI Vision Sensor számára, hogy a színük alapján érzékelje és kövesse az objektumokat. Miután egy színaláírást konfiguráltak, az érzékelő képes azonosítani a látóterében lévő adott színű objektumokat. A színaláírásokat a take_snapshot függvénnyel együtt használják a színes objektumok valós idejű feldolgozásához és érzékeléséhez.
Ahhoz, hogy egy konfigurált színazonosítót egy projektben használhassunk, a nevének a szenzor nevéből, két aláhúzásjelből, majd a színazonosító nevéből kell állnia. Például: ai_vision_1__RED_BOX.
# Display if any objects match the RED_BOX signature
while True:
brain.screen.set_cursor(1, 1)
brain.screen.clear_row(1)
# Change to any configured Color Signature
red_box = ai_vision_1.take_snapshot(ai_vision_1__RED_BOX)
if red_box[0].exists:
brain.screen.print("Color detected!")
wait(100, MSEC)
Színkódok#
A színkód egy strukturált minta, amely meghatározott sorrendben elrendezett színaláírásokból áll. Ezek a kódok lehetővé teszik az IQ AI Vision Sensor számára, hogy felismerje az előre meghatározott színmintákat. A színkódok hasznosak összetett objektumok azonosítására vagy egyedi jelölők létrehozására az autonóm navigációhoz.
Ahhoz, hogy egy konfigurált színkódot egy projektben használhassunk, a nevének a szenzor nevéből, két aláhúzásjelből, majd a színkód nevéből kell állnia. Például: ai_vision_1__BOX_CODE.
# Display if any objects match the BOX_CODE code
while True:
brain.screen.set_cursor(1, 1)
brain.screen.clear_row(1)
# Change to any configured Color Code
box_code = ai_vision_1.take_snapshot(ai_vision_1__BOX_CODE)
if box_code[0].exists:
brain.screen.print("Code detected!")
wait(100, MSEC)
installed#
installed egy logikai értéket ad vissza, amely jelzi, hogy az IQ AI látásérzékelő jelenleg csatlakozik-e az IQ (2. generációs) agyhoz.
True— Az IQ AI látásérzékelő csatlakozik az IQ (2. generációs) agyhoz.False— Az IQ AI látásérzékelő nincs csatlakoztatva az IQ (2. generációs) agyhoz.
Usage:
ai_vision_1.installed()
Paraméterek |
Leírás |
|---|---|
Ennek a metódusnak nincsenek paraméterei. |
# Display a message if the AI Vision Sensor is connected
if ai_vision_1.installed():
brain.screen.print("Installed!")
Tulajdonságok#
A take_snapshot használata után a tuple minden egyes objektumhoz tíz tulajdonság tartozik.
.id és .score kivételével az összes tulajdonságérték az érzékelt objektum pozícióját és méretét írja le az IQ AI Vision Sensor nézetében take_snapshot használatának pillanatában. Ezeket az értékeket pixelben mérik, az érzékelő 320 x 240 pixeles felbontása alapján.
.exists#
.exists függvény egy logikai értéket ad vissza, amely jelzi, hogy az index létezik-e a tuple-ben vagy sem.
True— Az index létezik.False— Az index nem létezik.
# Check if at least two objects are detected
while True:
brain.screen.clear_screen()
brain.screen.set_cursor(1, 1)
objects = ai_vision_1.take_snapshot(AiVision.ALL_AIOBJS)
if objects[0].exists:
if objects[1].exists:
brain.screen.print("At least 2")
else:
brain.screen.print("Less than 2")
wait(50, MSEC)
.width#
.width Visszaadja a detektált objektum szélességét pixelben, ami egy 1 és 320 közötti egész szám.
# Approach an object until it's at least 100 pixels wide
while True:
objects = ai_vision_1.take_snapshot(AiVision.ALL_AIOBJS)
if objects[0].exists:
if objects[0].width < 100:
drivetrain.drive(FORWARD)
else:
drivetrain.stop()
wait(50, MSEC)
.height#
.height A detektált objektum magasságát adja vissza pixelben, ami egy 1 és 240 közötti egész szám.
# Approach an object until it's at least 90 pixels tall
while True:
objects = ai_vision_1.take_snapshot(AiVision.ALL_AIOBJS)
if objects[0].exists:
if objects[0].height < 90:
drivetrain.drive(FORWARD)
else:
drivetrain.stop()
wait(50, MSEC)
.centerX#
.centerX Visszaadja a detektált objektum középpontjának x koordinátáját pixelben, ami egy 0 és 320 közötti egész szám.
# Turn until an object is directly in front of the sensor
drivetrain.set_turn_velocity(10, PERCENT)
drivetrain.turn(RIGHT)
while True:
objects = ai_vision_1.take_snapshot(AiVision.ALL_AIOBJS)
if objects[0].exists:
if 140 < 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 pixelben, ami egy 0 és 240 közötti egész szám.
# Approach an object until the object's center is
# high enough in the field of view
while True:
objects = ai_vision_1.take_snapshot(AiVision.ALL_AIOBJS)
if objects[0].exists:
if objects[0].centerY < 150:
drivetrain.drive(FORWARD)
else:
drivetrain.stop()
wait(50, MSEC)
.angle#
.angle visszaadja a detektált színkód vagy AprilTag azonosító orientációját fokban, ami egy 0 és 359 közötti egész szám.
# Turn left or right depending on how a
# configured Color Code is rotated
while True:
box_code = ai_vision_1.take_snapshot(ai_vision_1__BOX_CODE)
if box_code[0].exists:
if 50 < box_code[0].angle < 100:
drivetrain.turn(RIGHT)
elif 270 < box_code[0].angle < 330:
drivetrain.turn(LEFT)
else:
drivetrain.stop()
else:
drivetrain.stop()
wait(50, MSEC)
.originX#
.originX visszaadja a detektált objektum határolókeretének bal felső sarkának x koordinátáját pixelben, ami egy 0 és 320 közötti egész szám.
# Display if an object is to the left or the right
while True:
brain.screen.clear_screen()
brain.screen.set_cursor(1,1)
objects = ai_vision_1.take_snapshot(AiVision.ALL_AIOBJS)
if objects[0].exists:
if 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 pixelben, ami egy 0 és 240 közötti egész szám.
# Display if an object is close or far
while True:
brain.screen.clear_screen()
brain.screen.set_cursor(1,1)
objects = ai_vision_1.take_snapshot(AiVision.ALL_AIOBJS)
if objects[0].exists:
if objects[0].originY < 110:
brain.screen.print("Close")
else:
brain.screen.print("Far")
.id#
.id visszaadja az észlelt AI Classification vagy AprilTag azonosító azonosítóját egész számként. Az AI besorolások az AI Vision Utilityben konfigurált modelltől függenek.
Egy AprilTag ID esetében a .id tulajdonság a detektált AprilTag azonosító számát jelöli 0 és 36 közötti tartományban. Egy AI osztályozás esetében a .id tulajdonság az AI osztályozások szakaszban előre definiált azonosítónak felel meg.
# Move forward when AprilTag ID 1 is detected
while True:
apriltags = ai_vision_1.take_snapshot(AiVision.ALL_TAGS)
if apriltags[0].exists:
if apriltags[0].id == 1:
robot.drive(FORWARD)
else:
drivetrain.stop()
wait(50, MSEC)
.score#
.score Az észlelt AI-osztályozás megbízhatósági pontszámát adja vissza 1 és 100 közötti egész számként.
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.
# Display if a score is confident
while True:
objects = ai_vision_1.take_snapshot(AiVision.ALL_AIOBJS)
brain.screen.clear_screen()
brain.screen.set_cursor(1, 1)
if objects[0].exists:
if objects[0].score > 95:
brain.screen.print("Confident")
else:
brain.screen.print("Not confident")
wait(50, MSEC)
Konstruktorok#
A konstruktorok segítségével manuálisan hozhatók létre AiVision, Colordescés Codedesc objektum, amelyek az IQ AI Vision Sensor VEXcode-on kívüli konfigurálásához szükségesek.
AI Vision Sensor#
Az AiVision AiVision IQ AI látásérzékelőt hoz létre.
Használat
Vision(port, sigs)
Paraméterek |
Leírás |
|---|---|
|
Melyik intelligens porthoz van csatlakoztatva az IQ AI Vision érzékelő? (1-től 12-ig). |
|
Opcionális. Egy vagy több aláírás neve:
|
Példa
ai_vision_1 = AiVision(Ports.PORT1, AiVision.ALL_AIOBJS)
# Move forward if an object is detected
while True:
objects = ai_vision_1.take_snapshot(AiVision.ALL_AIOBJS)
if objects[0].exists:
drivetrain.drive_for(FORWARD, 50, MM)
wait(50, MSEC)
Color Signature#
Colordesc színaláírást hoz létre. Egyszerre akár hét különböző színaláírás is tárolható egy IQ AI látásérzékelőn.
Használat:
Colordesc(index, uMin, uMax, uMean, vMin, vMax, vMean, rgb, type)
Paraméter |
Leírás |
|---|---|
|
A |
|
A Vision Utility |
|
A Vision Utility |
|
A Vision Utility programban |
|
A Vision Utility |
|
A Vision Utility |
|
A Vision Utility |
|
A Vision Utility |
|
A |
A színaláírás létrehozásához szükséges értékek megszerzéséhez lépjen a Vision Utility programba. Miután a színaláírás konfigurálva van, másolja ki a paraméterértékeket a konfigurációs ablakból.
Példa
# Create a new Signature RED_BOX with the Colordesc class
RED_BOX = Colordesc(1, 10121, 10757, 10439,-1657, -1223, -1440,2.5, 1)
# Create a new AI Vision Sensor "ai_vision_1" with the AiVision
# class, with the RED_BOX Signature.
ai_vision_1 = AiVision(Ports.PORT1, 100, RED_BOX)
# Move forward if a red object is detected
while True:
red_object = ai_vision_1.take_snapshot(RED_BOX)
if red_object[0].exists:
drivetrain.drive_for(FORWARD, 10, MM)
wait(5, MSEC)
Color Code#
Codedesc színkódot hoz létre. Használatához legalább két már definiált színaláírás szükséges. Egyszerre akár nyolc különböző színkód is tárolható egy vizuális érzékelőn.
Használat:
Codedesc(sig1, sig2, sig3, sig4, sig5)
Paraméter |
Leírás |
|---|---|
|
Egy korábban létrehozott Color Signature. |
|
Egy korábban létrehozott Color Signature. |
|
Választható. Egy korábban létrehozott Színaláírás. |
|
Választható. Egy korábban létrehozott Színaláírás. |
|
Választható. Egy korábban létrehozott Színaláírás. |
Példa
# Create two new Signatures for a red and blue box
RED_BOX = Colordesc(1, 10121, 10757, 10439,-1657, -1223, -1440, 2.5, 1)
BLUE_BOX = Colordesc(2, -4443, -3373, -3908,6253, 7741, 6997, 2.5, 1)
# Create a Color Code for a red box to the left of a blue box
RED_BLUE = Codedesc(RED_BOX, BLUE_BOX)
# Create a new AI Vision Sensor "ai_vision_1" with the AiVision
# class, with the RED_BOX and BLUE_BOX Signatures.
ai_vision_1 = AiVision(Ports.PORT1, RED_BOX, BLUE_BOX)
# Display a message if Color Code is detected
while True:
brain.screen.set_cursor(1, 1)
brain.screen.clear_row(1)
# Change to any configured Color Code
box_code = ai_vision_1.take_snapshot(RED_BLUE)
if box_code[0].exists:
brain.screen.print("Code detected!")
wait(100, MSEC)