Tekoälynäköanturi#

Johdanto#

IQ AI -näköanturi pystyy havaitsemaan ja seuraamaan esineitä, värejä ja AprilTag-tunnuksia. Näin robotti voi analysoida ympäristöään, seurata esineitä ja reagoida havaittujen visuaalisten tietojen perusteella.

Alla olevissa esimerkeissä konfiguroidun IQ AI -näköanturin nimeksi annetaan ai_vision_1, ja konfiguroituja värisignatuuriobjekteja, kuten RED_BOX, käytetään kaikissa seuraavissa esimerkeissä tässä API-dokumentaatiossa viitattaessa AiVision -luokkametodeihin.

Alla on luettelo kaikista menetelmistä:

Getterit — Hae tietoja IQ AI -näköanturista.

  • take_snapshot — Tallentaa tietoja tietylle allekirjoitukselle.

  • installed — Onko IQ AI -näköanturi yhdistetty IQ (2. sukupolvi) aivoihin.

Ominaisuudet — take_snapshot-funktiosta palautetut objektitiedot.

  • .exists — Onko objekti olemassa nykyisessä havainnossa.

  • .width — Havaitun kohteen leveys.

  • .height — Havaitun kohteen korkeus.

  • .centerX — Objektin keskipisteen X-sijainti.

  • .centerY — Objektin keskipisteen Y-sijainti.

  • .angle — Värikoodin tai AprilTag-tunnuksen suunta.

  • .originX — Objektin vasemman yläkulman X-sijainti.

  • .originY — Objektin vasemman yläkulman Y-sijainti.

  • .id — Classification or tag ID of the object.

  • .score — Tekoälyluokitusten luotettavuuspisteet.

Konstruktorit — Alusta ja konfiguroi anturit manuaalisesti.

Getterit#

take_snapshot#

take_snapshot suodattaa IQ AI -näköanturin kehyksestä saadut tiedot yhdeksi tunnisteeksi – tallennetuksi kuvaukseksi jostakin, jonka anturi tunnistaa, kuten esikoulutetusta objektista, AprilTag-tunnuksesta tai määritetystä väritunnisteesta tai värikoodista – ja palauttaa tuple.

Väritunnisteet ja Värikoodit on ensin määritettävä Vision-apuohjelmassa, ennen kuin niitä voidaan käyttää tämän menetelmän kanssa.

Tuple tallentaa objektit leveyden mukaan suurimmasta pienimpään järjestettyinä alkaen indeksistä 0. Kunkin objektin properties-ominaisuuksiin pääsee käsiksi sen indeksin avulla. Jos vastaavia objekteja ei löydy, palautetaan tyhjä tuple.

Usage:
ai_vision_1.take_snapshot(SIGNATURE)

Parametrit

Kuvaus

SIGNATURE

Suodattaa tietojoukon sisältämään vain annetun allekirjoituksen tiedot. Käytettävissä olevat allekirjoitukset ovat:

  • Väriallekirjoitukset tai värikoodit - IQ AI Vision -anturin nimi, kaksi alaviivaa ja sitten väriallekirjoituksen tai värikoodin nimi. Esimerkiksi: ai_vision_1__RED_BOX.
  • AiVision.ALL_AIOBJS - Kaikki havaitut AI-luokitukset AI Vision -apuohjelmassa määritetyn mallin mukaan.
  • AiVision.ALL_TAGS - Kaikki AprilTag-tunnukset.

count

Valinnainen. Asettaa palautettavien objektien enimmäismäärän väliltä 1–24 (oletus: 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)

Huom: Palautettu tuple voidaan lajitella minkä tahansa ominaisuuden mukaan, ei pelkästään leveyden, käyttämällä Pythonin sorted -funktiota. Esimerkiksi lajittelu AprilTag ID:n mukaan:

# 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)

Tai lajittelu korkeuden mukaan:

# 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)

Tekoälyluokitukset#

IQ AI -näköanturi pystyy havaitsemaan erilaisia ​​kohteita tiettyjen tekoälyluokitusten mukaisesti. Laitteet-ikkunassa tekoälynäköanturia määritettäessä valitun tekoälyluokitusmallin mukaan havaitaan erilaisia ​​kohteita. Tällä hetkellä saatavilla olevat mallit ovat:

Luokkahuoneen esineet

Henkilötunnus

Tekoälyluokitus

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 -robotiikkakilpailun sekoita ja yhdistä

Henkilötunnus

Tekoälyluokitus

0

GameElementsMixAndMatch.BEAM

1

GameElementsMixAndMatch.BLUE_PIN

2

GameElementsMixAndMatch.RED_PIN

3

GameElementsMixAndMatch.ORANGE_PIN

VEX IQ -robotiikkakilpailun taso nousee

Henkilötunnus

Tekoälyluokitus

0

GameElementsLevelUp.BLUE_BEANBAG

1

GameElementsLevelUp.RED_BEANBAG

2

GameElementsLevelUp.YELLOW_BEANBAG

Väriallekirjoitukset#

Väritunniste on ainutlaatuinen väri, jonka IQ AI -näköanturi tunnistaa. Näiden tunnisteiden avulla IQ AI -näköanturi voi havaita ja seurata kohteita niiden värin perusteella. Kun väritunniste on määritetty, anturi voi tunnistaa näkökentässään olevia kohteita, joilla on kyseinen väri. Väritunnisteita käytetään yhdessä take_snapshot -funktion kanssa värillisten kohteiden käsittelyyn ja havaitsemiseen reaaliajassa.

Jotta voit käyttää konfiguroitua väritunnistetta projektissa, sen nimen on oltava anturin nimi, kaksi alaviivaa ja sitten väritunnisteen nimi. Esimerkiksi: 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)

Värikoodit#

Värikoodi on jäsennelty kuvio, joka koostuu tietyssä järjestyksessä olevista väritunnisteista. Näiden koodien avulla IQ AI -näköanturi tunnistaa ennalta määritellyt värikuviot. Värikoodit ovat hyödyllisiä monimutkaisten objektien tunnistamisessa tai ainutlaatuisten merkkien luomisessa autonomista navigointia varten.

Jotta voit käyttää konfiguroitua värikoodia projektissa, sen nimen on oltava anturin nimi, kaksi alaviivaa ja sitten värikoodin nimi. Esimerkiksi: 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 palauttaa totuusarvon, joka ilmaisee, onko IQ AI -näköanturi tällä hetkellä yhdistettynä IQ (2. sukupolvi) aivoihin.

  • True — IQ AI -näköanturi on yhdistetty IQ (2. sukupolvi) -aivoihin.

  • False — IQ AI -näköanturia ei ole yhdistetty IQ (2. sukupolvi) aivoihin.

Usage:
ai_vision_1.installed()

Parametrit

Kuvaus

Tällä menetelmällä ei ole parametreja.

# Display a message if the AI Vision Sensor is connected
if ai_vision_1.installed():
    brain.screen.print("Installed!")

Ominaisuudet#

take_snapshot -muuttujaa käytettäessä jokaiseen tuple-tupleen tallennettuun objektiin liitetään kymmenen ominaisuutta.

Kaikki ominaisuusarvot paitsi .id ja .score kuvaavat havaitun kohteen sijainnin ja koon IQ AI -näköanturin näkymässä sillä hetkellä, kun take_snapshot -ominaisuutta käytettiin. Nämä arvot mitataan pikseleinä anturin 320 x 240 pikselin resoluution perusteella.

.exists#

.exists palauttaa totuusarvon, joka ilmaisee, onko indeksi olemassa tuplessa vai ei.

  • True — Indeksi on olemassa.

  • False — Indeksiä ei ole olemassa.

# 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 palauttaa havaitun objektin leveyden pikseleinä, joka on kokonaisluku väliltä 1–320.

# 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 palauttaa havaitun objektin korkeuden pikseleinä, joka on kokonaisluku väliltä 1 ja 240.

# 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 palauttaa havaitun objektin keskipisteen x-koordinaatin pikseleinä, joka on kokonaisluku väliltä 0–320.

# 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 palauttaa havaitun objektin keskipisteen y-koordinaatin pikseleinä, joka on kokonaisluku väliltä 0–240.

# 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 palauttaa havaitun värikoodin tai AprilTag-tunnuksen suunnan asteina, joka on kokonaisluku väliltä 0–359.

# 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 palauttaa havaitun objektin rajaavan laatikon vasemman yläkulman x-koordinaatin pikseleinä, joka on kokonaisluku väliltä 0–320.

# 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 palauttaa havaitun objektin rajaavan laatikon vasemman yläkulman y-koordinaatin pikseleinä, joka on kokonaisluku väliltä 0–240.

# 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 palauttaa havaitun AI Classification- tai AprilTag-tunnuksen kokonaislukuna. Tekoälyluokitukset riippuvat AI Vision -apuohjelmassa määritetystä mallista.

AprilTag-tunnuksen tapauksessa .id -ominaisuus edustaa havaitun AprilTag-tunnuksen numeroa väliltä 0–36. Tekoälyluokituksen tapauksessa .id -ominaisuus vastaa AI-luokitukset-osiossa ennalta määritettyä tunnusta.

# 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 palauttaa havaitun tekoälyluokituksen luotettavuuspistemäärän kokonaislukuna 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.

# 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)

Rakentajat#

Konstruktoreita käytetään luomaan manuaalisesti AiVision, Colordesc- ja Codedesc -objektia, jotka ovat välttämättömiä IQ AI -näköanturin konfiguroimiseksi VEXcoden ulkopuolella.

AI Vision Sensor#

AiVision luo IQ AI -näköanturin.

Käyttö

Vision(port, sigs)

Parametrit

Kuvaus

port

Mihin älyporttiin IQ AI -näköanturi on kytketty, 1–12.

sigs

Valinnainen. Yhden tai useamman allekirjoituksen nimi:

Esimerkki

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 luo väriallekirjoituksen. IQ AI -näköanturiin voidaan tallentaa kerralla jopa seitsemän erilaista väriallekirjoitusta.

Käyttö:

Colordesc(index, uMin, uMax, uMean, vMin, vMax, vMean, rgb, type)

Parametri

Kuvaus

index

Colordesc -objektin indeksi väliltä 1–7. Huomautus: Kahden saman indeksinumeron omaavan Colordesc -objektin luominen aiheuttaa sen, että toisena luotu objekti ohittaa ensimmäisen.

uMin

Arvo väliltä uMin Vision Utility -apuohjelmassa.

uMax

Arvo väliltä uMax Vision-apuohjelmassa.

uMean

Arvo väliltä uMean Vision Utility -apuohjelmassa.

vMin

Arvo välillä vMin Vision-apuohjelmassa.

vMax

Arvo väliltä vMax Vision Utility -apuohjelmassa.

vMean

Arvo väliltä vMean Vision-apuohjelmassa.

rgb

Arvo välillä rgb Vision-apuohjelmassa.

type

Arvo type :een Vision-apuohjelmassa.

In order to obtain the values to create a Color Signature, go to the Vision Utility. Once a Color Signature is configured, copy the parameter values from the Configuration window.

Esimerkki

# 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 luo värikoodin. Se vaatii vähintään kaksi jo määriteltyä väritunnistetta toimiakseen. Konenäköanturiin voidaan tallentaa kerralla jopa kahdeksan eri värikoodia.

Käyttö:

Codedesc(sig1, sig2, sig3, sig4, sig5)

Parametri

Kuvaus

sig1

Aiemmin luotu Väriasetus.

sig2

Aiemmin luotu Väriasetus.

sig3

Valinnainen. Aiemmin luotu Väriasetus.

sig4

Valinnainen. Aiemmin luotu Väriasetus.

sig5

Valinnainen. Aiemmin luotu Väriasetus.

Esimerkki

# 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)