Koodaus tekoälynäköanturilla VEXcode V5 Pythonissa

Varmista, että sinulla on väritunnistetta ja värikoodit määritettynä tekoälynäköanturiisi, jotta niitä voidaan käyttää palikoidesi kanssa. Lisätietoja niiden määrittämisestä on alla olevissa artikkeleissa:

Tekoälynäköanturi pystyy myös havaitsemaan tekoälyn luokitukset ja AprilTagit. Lisätietoja näiden tunnistustilojen käyttöönotosta on täällä:

Lisätietoja näistä yksittäisistä komennoista ja niiden käytöstä VEXcodessa on API-sivustolla.


Hanki visuaalisia tietoja tekoälynäköanturilla

Jokainen tekoälynäköanturin komento alkaa konfiguroidun tekoälynäköanturin nimellä. Kaikissa tämän artikkelin esimerkeissä käytetyn tekoälynäköanturin nimi on ai_vision_1.

ota_kuva

take_snapshot -metodi ottaa kuvan siitä, mitä tekoälynäköanturi sillä hetkellä näkee, ja hakee tästä tilannekuvasta tietoja, joita voidaan sitten käyttää projektissa. Kun tilannekuva otetaan, sinun on määritettävä, minkä tyyppisestä kohteesta tekoälynäköanturin tulisi kerätä tietoja:

  • AVäriallekirjoitus taiVärikoodi
    • Nämä visuaaliset allekirjoitukset alkavat tekoälynäköanturin nimellä, kaksoisalaviivalla ja sitten visuaalisen allekirjoituksen nimellä, esimerkiksi: ai_vision_1__Sininen.
  • Tekoälyluokitukset
  • AiVision.ALL_TAGS

Tilannevedoksen ottaminen luo tuplen kaikista määrittämistäsi havaituista objekteista. Jos esimerkiksi haluat havaita "sinisen" väritunnisteenja tekoälynäköanturi havaitsee 3 erilaista sinistä kohdetta, kaikkien kolmen tiedot lisätään tupleen.

Tässä esimerkissä muuttuja vision_objects tallentaa tuplen, joka sisältää tekoälynäköanturista nimeltä ai_vision_1havaitut "violetit"väritunnisteet. Se näyttää havaittujen kohteiden määrän ja ottaa uuden tilannekuvan 0,5 sekunnin välein.

while True: 
# Hakee tilannekuvan kaikista purppuranvärisistä allekirjoituksista ja tallentaa sen vision_objects-kansioon.
vision_objects = ai_vision_1.take_snapshot(ai_vision_1__Purple)

# Tarkistetaan, että tilannekuvasta on havaittu objekti ennen datan hakemista.
jos vision_objects[0].exists == True

brain.screen.clear_screen()
brain.screen.set_cursor(1, 1)

brain.screen.print("Objektien määrä:", len(vision_objects))
wait(0.5, SEKUNTIA)

Objektin ominaisuudet

Jokaisella tilannevedoksen objektilla on erilaisia ​​ominaisuuksia, joita voidaan käyttää objektin tietojen raportointiin. Käytettävissä olevat ominaisuudet ovat seuraavat:

  • tunnus
  • keskipiste X ja keskipiste Y
  • alkuperäX ja alkuperäY
  • leveys
  • korkeus
  • kulma
  • pisteet
  • olemassa

Päästäksesi objektin ominaisuuteen, käytä tuplen sisältävää muuttujan nimeä ja sen perään objektin indeksiä.

Objekti-indeksi osoittaa, minkä tietyn objektin ominaisuuden haluat noutaa. Otettuaan tilannekuvan tekoälynäköanturi lajittelee objektit automaattisesti koon mukaan. Suurimmalle objektille annetaan indeksi 0, ja pienemmille objekteille annetaan suurempi indeksinumero.

Esimerkiksi muuttujan vision_objects sisällä olevan suurimman objektin leveyden kutsuminen olisi: vision_objects[0].width.

tunnus

Ominaisuus id on käytettävissä vain tekoälyluokituksissa AprilTags ja

Kolme neliönmuotoista tunnistemerkkiä, joissa on tunnukset 0, 9 ja 3, joista jokaisella on vastaavat koordinaatit ja kokomittaukset valkoisella tekstillä. ID 0 on vasemmalla, ID 9 on oikealla ja ID 3 on alhaalla keskellä. Jokaisessa tussissa on ainutlaatuinen mustavalkoinen kuvio neliön sisällä.

AprilTag-tunnisteelle id -ominaisuus edustaa havaitunAprilTag/Tag-tunnisteen/tunnisteiden tunnistenumeroa.

Tiettyjen AprilTags tunnistaminen mahdollistaa valikoivan navigoinnin. Voit ohjelmoida robottisi liikkumaan tiettyjä merkkejä kohti ja jättämään toiset huomiotta, jolloin voit käyttää niitä tehokkaasti opasteina automaattiseen navigointiin.

Kuvassa tunnistetaan kaksi palloa ja kaksi rengasta, joiden sijainnin, koon ja pistemäärän osoittavat merkinnät. Punainen pallo on vasemmalla, sininen pallo on oikealla, vihreä rengas on vasemmalla alhaalla ja punainen rengas on oikealla alhaalla. Jokainen objekti on ääriviivattuna valkoisella laatikolla, ja tiedot, kuten X- ja Y-koordinaatit, leveys, korkeus ja 99 %:n pistemäärä, näkyvät valkoisella tekstillä.

Jos tekoälyluokituksia on, id -ominaisuus edustaa havaitun tekoälyluokituksen tiettyä tyyppiä.

Tiettyjen tekoälyluokittelujentunnistaminen sallii robotin keskittyä vain tiettyihin kohteisiin, kuten haluta navigoida vain punaista Buckyballia kohti, ei sinistä.

Lisätietoja AprilTags ja AI Classifications -luokituksista ja niiden tunnistuksen ottamisesta käyttöön AI Vision Utility -apuohjelmassa on näissä artikkeleissa.

keskikohta X ja keskikohta

Tämä on havaitun kohteen keskipisteen koordinaatit pikseleinä.

Sinistä Buckyballia seurataan tietokonenäköjärjestelmällä. Esine on ääriviivojen sisällä, ja sen sisällä on pienempi punainen neliö, joka ympäröi keskellä olevaa valkoista ristiä. Kuvan vasemmassa yläkulmassa oleva teksti osoittaa, että kohde on sininen, koordinaatit X:176, Y:117 ja mitat L:80, K:78.

CenterX- ja CenterY-koordinaatit auttavat navigoinnissa ja paikannuksessa. Tekoälynäköanturin resoluutio on 320 x 240 pikseliä.

Kaksi sinistä kuutiomaista objektia, joita seuraa näköjärjestelmä. Ylempi objekti on merkitty koordinaateilla X:215, Y:70 ja mitoilla W:73, H:84, valkoisella ääriviivalla ja keskellä olevalla valkoisella ristillä. Alempi objekti on merkitty koordinaateilla X:188, Y:184 ja mitoilla W:144, H:113, jotka on myös ääriviivat valkoisella ja keskellä olevalla valkoisella ristillä.

Voit nähdä, että lähempänä tekoälynäköanturia olevalla objektilla on matalampi CenterY-koordinaatti kuin kauempana olevalla objektilla.

Tässä esimerkissä, koska tekoälynäköanturin näkymän keskipiste on (160, 120), robotti kääntyy oikealle, kunnes havaitun kohteen keskipisteen X-koordinaatti on suurempi kuin 150 pikseliä, mutta pienempi kuin 170 pikseliä.

while True:
# Hakee tilannekuvan kaikista sinisistä allekirjoituksista ja tallentaa sen vision_objects-kansioon.
vision_objects = ai_vision_1.take_snapshot(ai_vision_1__Blue)

# Tarkistetaan, että tilannekuvasta on havaittu objekti ennen datan hakemista.
if vision_objects[0].exists == True

# Tarkistetaan, onko kohde tekoälynäköanturin näkymän keskellä.
jos vision_objects[0].centerX > 150 ja 170 > vision_objects[0].centerX:

# Jatka kääntymistä oikealle, kunnes kohde on näkymän keskellä.
voimansiirto.käännös(OIKEA)
muuten:
voimansiirto.pysäytys()
odota(5, MSEC)

alkuperäX ja alkuperäY

OriginX ja OriginY on havaitun objektin vasemmassa yläkulmassa oleva koordinaatti pikseleinä.

Sinistä Buckyballia seurataan näköjärjestelmällä. Valkoinen ääriviiva ympäröi kohdetta, ja ääriviivan sisällä on keskellä valkoinen risti. Vasemmassa yläkulmassa oleva teksti osoittaa objektin väriksi sinisen, koordinaatit X:176, Y:117 ja mitat L:80, K:78. Pieni punainen neliö korostaa objektin vasemman yläkulman.

OriginX- ja OriginY-koordinaatit auttavat navigoinnissa ja paikannuksessa. Yhdistämällä tämän koordinaatin objektin leveyteen ja korkeuteen voit määrittää objektin rajaavan laatikon koon. Tämä voi auttaa liikkuvien kohteiden seuraamisessa tai kohteiden välillä navigoinnissa.

leveys ja korkeus

Tämä on havaitun kohteen leveys tai korkeus pikseleinä.

Kuvassa näkyy sininen Buckyball, jota seuraa valkoinen neliön ääriviiva. Vasemmassa yläkulmassa on merkintä, joka osoittaa sen olevan sininen objekti, jonka koordinaatit ovat X:176, Y:117 ja mitat L:80, K:78. Punaiset nuolet korostavat objektin leveyttä ja korkeutta.

Leveys- ja korkeusmitat auttavat tunnistamaan erilaisia ​​esineitä. Esimerkiksi Buckyballilla on suurempi korkeus kuin Ringillä.

Kahta sinistä kuutiomaista esinettä seurataan visuaalisella tunnistusjärjestelmällä. Ylemmässä kuutiossa on valkoinen ääriviiva, jossa on merkintä, joka osoittaa sen sijainnin X:215, Y:70 ja mitat L:73, K:84. Alemmassa kuutiossa on samanlainen valkoinen ääriviiva, jonka etiketissä näkyvät X:188, Y:184 ja mitat L:144, K:113. Jokaisessa kuutiossa on keskellä valkoinen risti, joka todennäköisesti osoittaa seurannan keskipisteen. Otsikot korostavat kunkin objektin mittaukset ja seurantatiedot.

Leveys ja korkeus osoittavat myös kohteen etäisyyden tekoälynäköanturista. Pienemmät mitat tarkoittavat yleensä, että kohde on kauempana, kun taas suuremmat mitat viittaavat siihen, että se on lähempänä.

Tässä esimerkissä objektin leveyttä käytetään navigointiin. Robotti lähestyy kohdetta, kunnes sen leveys on saavuttanut tietyn koon, ennen pysähtymistä.

while True:
# Hakee tilannekuvan kaikista sinisen värin allekirjoituksista ja tallentaa sen vision_objects-kansioon.
vision_objects = ai_vision_1.take_snapshot(ai_vision_1__Blue)

# Tarkistetaan, että tilannekuvasta on havaittu objekti ennen datan hakemista.
if vision_objects[0].exists == True

# Tarkistetaan, onko suurin kohde lähellä tekoälynäköanturia mittaamalla sen leveys.
if vision_objects[0].width < 250:

# Aja lähemmäs kohdetta, kunnes se on leveämpi kuin 250 pikseliä.
voimansiirto.drive(ETEEN)
muuten:
voimansiirto.stop()

odota(5, MSEC)

kulma

Pyörivä gif, jossa näkyy punaisia ​​ja vihreitä palikoita. Kun palikat ovat täysin vaakasuorassa punaisesta vihreään, niiden kulmaksi näytetään 0 astetta. Jos punainen lohko on pystysuunnassa vihreän lohkon päällä, se on 90 asteen kulmassa. Jos lohkot ovat vaakasuunnassa vihreästä punaiseen, se on 180 astetta. Jos vihreä lohko on pystysuunnassa punaisen lohkon päällä, kulma on 20 astetta.

kulma -ominaisuus on käytettävissä vainvärikoodeille ja

Tämä osoittaa, onko havaittu Värikooditai AprilTag eri suunnassa.

Kahden kuution pino, toinen vihreä ylhäällä ja toinen sininen alhaalla, jota seuraa näköjärjestelmä. Valkoinen ääriviiva ympäröi molempia kuutioita, ja vihreän kuution keskellä on valkoinen risti. Kuvan alareunassa olevassa tekstissä lukee Green_Blue A:87°, joka osoittaa havaitut värit ja kulman mittauksen. Sen alapuolella koordinaatit on lueteltu muodossa X:117, Y:186, ja mitat L:137, K:172, jotka edustavat pinottujen kuutioiden sijaintia ja kokoa kehyksessä.

Voit nähdä, onko robotti suunnattu eri tavalla suhteessaColor Code taiAprilTag een, ja tehdä navigointipäätöksiä sen mukaan.

Kaksi kuutiota, yksi vihreä ja yksi sininen, sijoitettuna vierekkäin ja niitä seuraa näköjärjestelmä. Valkoinen ääriviiva ympäröi molempia kuutioita, joiden keskellä on valkoinen risti. Vasemmassa yläkulmassa oleva merkintä osoittaa Green_Blue A:0°, viitaten havaittuihin väreihin ja kulmamittaukseen. Sen alapuolella koordinaatit näkyvät muodossa X:150, Y:102 ja mitat W:179, H:109, jotka edustavat kuutioiden sijaintia ja kokoa kehyksessä.

Jos esimerkiksivärikoodia ei havaita oikeassa kulmassa, robotti ei välttämättä pysty poimimaan sitä edustavaa kohdetta oikein.

pisteet

pistemäärä -ominaisuutta käytetään, kun tekoälynäköanturilla havaitaantekoälyluokitusta.

Kuvassa näkyy neljä kohdetta, joita näköjärjestelmä seuraa: kaksi palloa ja kaksi rengasta. Punainen pallo on merkitty koordinaateilla X:122, Y:84, W:67, H:66 ja pistemäärällä 99 %. Sinisen pallon pisteet X:228, Y:86, L:70, K:68 ja pistemäärä 99 %. Vihreän renkaan koordinaatit ovat X:109, Y:186, W:98, H:92 ja pistemäärä on 99 %. Punainen rengas on merkitty X:259, Y:187, W:89, H:91, ja sen pistemäärä on 99 %. Jokainen kohde on ääriviivat valkoinen, mikä osoittaa seurannan tarkkuuden.

Luotettavuuspistemäärä osoittaa, kuinka varma tekoälynäköanturi on havaitsemisestaan. Tässä kuvassa se tunnistaa näiden neljän objektin tekoälyluokitukset 99-prosenttisen varmasti. Voit käyttää tätä pisteytystä varmistaaksesi, että robottisi keskittyy vain erittäin luotettaviin havaintoihin.

olemassa

Ominaisuutta exists käytetään havaitsemaan, onko viimeksi otetussa tilannevedoksessa havaittu määritetty visuaalinen allekirjoitus.

Näin voit tarkistaa, havaittiinko edellisessä tilannevedoksessa havaittuja kohteita. Tämä ominaisuus palauttaa arvon True, kun objekti on olemassa, ja arvon False, kun objektia ei ole olemassa.

 

For more information, help, and tips, check out the many resources at VEX Professional Development Plus

Last Updated: