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.

  • AiVision — Létrehoz egy IQ AI látásérzékelőt.

  • Colordesc — Színaláírást hoz létre.

  • Codedesc — Színkódot hoz létre.

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

SIGNATURE

Úgy szűri az adathalmazt, hogy csak az adott aláírás adatait tartalmazza. Az elérhető aláírások a következők:

  • Színaláírások vagy színkódok – Az IQ AI Vision érzékelő neve, két aláhúzásjel, majd a színaláírás vagy színkód neve. Például: ai_vision_1__RED_BOX.
  • AiVision.ALL_AIOBJS – Az összes észlelt AI osztályozás az AI Vision segédprogramban konfigurált modelltől függően.
  • AiVision.ALL_TAGS – Az összes AprilTag azonosító.

count

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

ClassroomElements.BLUE_BALL

1

ClassroomElements.GREEN_BALL

2

ClassroomElements.RED_BALL

3

ClassroomElements.BLUE_RING

4

ClassroomElements.GREEN_RING

5

ClassroomElements.RED_RING

6

ClassroomElements.BLUE_CUBE

7

ClassroomElements.GREEN_CUBE

8

ClassroomElements.RED_CUBE

VEX IQ Robotikaverseny Mix & Match

Azonosító szám

AI osztályozás

0

GameElementsMixAndMatch.BEAM

1

GameElementsMixAndMatch.BLUE_PIN

2

GameElementsMixAndMatch.RED_PIN

3

GameElementsMixAndMatch.ORANGE_PIN

VEX IQ Robotikaverseny szintlépés

Azonosító szám

AI osztályozás

0

GameElementsLevelUp.BLUE_BEANBAG

1

GameElementsLevelUp.RED_BEANBAG

2

GameElementsLevelUp.YELLOW_BEANBAG

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

port

Melyik intelligens porthoz van csatlakoztatva az IQ AI Vision érzékelő? (1-től 12-ig).

sigs

Opcionális. Egy vagy több aláírás neve:

  • Színaláírás
  • Színkód
  • AiVision.ALL_TAGS – Minden AprilTag azonosító
  • AiVision.ALL_AIOBJS – Minden AI-osztályozás

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

index

A Colordesc objektum indexe 1-től 7-ig. Megjegyzés: Két azonos indexszámú Colordesc objektum létrehozása azt eredményezi, hogy a másodikként létrehozott objektum felülírja az elsőt.

uMin

A Vision Utility uMin es értékének megadása.

uMax

A Vision Utility uMax közötti értéke.

uMean

A Vision Utility programban uMean közötti érték.

vMin

A Vision Utility vMin értékének megadása.

vMax

A Vision Utility vMax értékének megadása.

vMean

A Vision Utility vMean értékének megadása.

rgb

A Vision Utility rgb értékének megadása.

type

A type be írandó érték a Vision Utility programban.

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

sig1

Egy korábban létrehozott Color Signature.

sig2

Egy korábban létrehozott Color Signature.

sig3

Választható. Egy korábban létrehozott Színaláírás.

sig4

Választható. Egy korábban létrehozott Színaláírás.

sig5

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)