Tekoälyvisio#
Johdanto#
Tekoälynä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.
Tällä sivulla käytetään esimerkkiniminä tekoälynäköanturille, väritunnisteelle ja värikoodille nimiä ai_vision_1, RED_BOXja BOX_CODE . Korvaa ne tarvittaessa omilla määritetyillä nimilläsi.
Alla on luettelo kaikista menetelmistä:
Getterit – Hae tietoja tekoälynäköanturilta.
take_snapshot– Tallentaa tiedot tietylle allekirjoitukselle.installed– Onko tekoälynäköanturi kytketty V5 Brainiin.
Ominaisuudet – take_snapshot-funktiosta palautetut objektitiedot.
.exists– Onko kohde olemassa nykyisessä havainnossa..width– Havaitun kohteen leveys..height– Havaitun kohteen korkeus..centerX– Objektin keskipisteen X-sijainti..centerY– Objektin keskipisteen Y-sijainti..angle– Värikoodin suunta..originX– Objektin vasemman yläkulman X-sijainti..originY– Objektin vasemman yläkulman Y-sijainti..id– Kohteen luokitus tai tunnistetunnus..score– Tekoälyluokitusten luotettavuuspisteet.
Konstruktorit – Alusta ja konfiguroi tekoälynäköanturi ja sen tunnisteet manuaalisesti.
Getterit#
take_snapshot#
take_snapshot suodattaa tekoälynä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 |
|---|---|
|
Suodattaa tietojoukon sisältämään vain annetun allekirjoituksen tiedot. Käytettävissä olevat allekirjoitukset ovat:
|
|
Valinnainen. Asettaa palautettavien objektien enimmäismäärän väliltä 1–24. Oletusarvo on 8. |
# Drive 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#
Tekoälynäköanturi voi havaita 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 elementit
Henkilötunnus |
Tekoälyluokitus |
|---|---|
0 |
|
1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
VEX V5 -robotiikkakilpailu, korkeat panokset
Henkilötunnus |
Tekoälyluokitus |
|---|---|
0 |
|
1 |
|
2 |
|
VEX V5 -robotiikkakilpailun vastarinta
Henkilötunnus |
Tekoälyluokitus |
|---|---|
0 |
|
1 |
|
VEX V5 -robotiikkakilpailun ohitus
Henkilötunnus |
Tekoälyluokitus |
|---|---|
0 |
|
1 |
|
2 |
|
3 |
|
4 |
|
Väriallekirjoitukset#
Väritunniste on ainutlaatuinen väri, jonka tekoälynäköanturi tunnistaa. Näiden tunnisteiden avulla tekoälynä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 tekoälynäköanturi voi 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 tekoälynäköanturi tällä hetkellä yhdistettynä V5 Brainiin.
True– Tekoälynäköanturi on kytketty V5 Brainiin.False– Tekoälynäköanturia ei ole yhdistetty V5 Brainiin.
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 -metriimin käytön jälkeen jokaiseen tuple-tupleen tallennettuun objektiin liitetään kymmenen ominaisuutta.
Kaikki ominaisuusarvot paitsi .id ja .score kuvaavat havaitun kohteen sijainnin ja koon tekoälynä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 tekoälyluokituksen tai AprilTag-tunnuksen kokonaislukuna.
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.
Rakentajat#
Konstruktoreita käytetään luomaan manuaalisesti AiVision, Colordesc- ja Codedesc -objektia, jotka ovat välttämättömiä tekoälynäköanturin konfiguroimiseksi VEXcoden ulkopuolella.
AiVision#
AiVision luo tekoälynäköanturin.
Käyttö
Vision(smartport, sigs)
Parametrit |
Kuvaus |
|---|---|
|
Älyportti, johon tekoälynäköanturi on kytketty, kirjoitetaan muodossa |
|
Valinnainen. Yhden tai useamman allekirjoituksen nimi pilkuilla (
|
# Create the Color Signatures
RED_BOX = Colordesc(1, 255, 0, 0, 20, 0.9)
BLUE_BOX = Colordesc(0, 26, 255, 0, 20, 0.9)
# Create the Color Code
RED_BLUE = Codedesc(RED_BOX, BLUE_BOX)
"""
Create an AI Vision Sensor with the following signatures:
- RED_BLUE
- AiVision.ALL_TAGS - for AprilTag IDs
"""
ai_vision_1 = AiVision(Ports.PORT1, RED_BLUE, AiVision.ALL_TAGS)
Colordesc#
Colordesc luo väriallekirjoituksen. Tekoälynäköanturiin voidaan tallentaa samanaikaisesti jopa seitsemän erilaista väriallekirjoitusta.
Usage:
Colordesc(index, red, green, blue, hangle, hdsat)
Parametri |
Kuvaus |
|---|---|
|
|
|
Värin punainen arvo väliltä 0 - 255. |
|
Värin vihreän arvo väliltä 0 - 255. |
|
Värin sinisen arvo väliltä 0 - 255. |
|
Sallittu sävyn vaihtelu asteina väriympyrässä (1–40). Korkeammat arvot sallivat suuremman rotaatiopoikkeaman perussävystä. |
|
Sallittu kylläisyyden poikkeama välillä 0,10–1,00. Tämä arvo edustaa sitä osaa koko kylläisyysalueesta, jonka sisällä väri voi siirtyä (esim. 0,10 = ±10 % kylläisyys). |

"""
Create a Color Signature with the following values:
- index: 1
- red: 255
- green: 0
- blue: 0
- hangle: 20
- hdsat: 0.9
"""
# Create a red Color Signature
RED_BOX = Colordesc(1, 255, 0, 0, 20, 0.9)
Codedesc#
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.
Usage:
Codedesc(sig1, sig2, sig3, sig4, sig5)
Parametri |
Kuvaus |
|---|---|
|
Aiemmin luotu Väriasetus. |
|
Aiemmin luotu Väriasetus. |
|
Valinnainen. Aiemmin luotu Väriasetus. |
|
Valinnainen. Aiemmin luotu Väriasetus. |
|
Valinnainen. Aiemmin luotu Väriasetus. |
# Create the Color Signatures
RED_BOX = Colordesc(1, 255, 0, 0, 20, 0.9)
BLUE_BOX = Colordesc(0, 26, 255, 0, 20, 0.9)
# Create a Color Code with the Color Signatures
BOX_CODE = Codedesc(RED_BOX, BLUE_BOX)
Tagdesc#
Tagdesc luo AprilTag-tunnuksen. Voit käyttää sitä tunnistettavien AprilTag-tunnusten määrittämiseen, mikä tekee koodistasi selkeämmän ja helpommin luettavan.
Usage:
Tagdesc(id)
Parametri |
Kuvaus |
|---|---|
|
Käytettävä AprilTag-tunnus. |
# Set AprilTag ID 7 to be the "goal"
goal = Tagdesc(7)