Dirbtinio intelekto vizija#

Įvadas#

Dirbtinio intelekto regos jutiklis gali aptikti ir sekti objektus, spalvas ir „AprilTag“ ID. Tai leidžia robotui analizuoti aplinką, sekti objektus ir reaguoti pagal aptiktus vaizdinius duomenis.

Šiame puslapyje kaip dirbtinio intelekto vaizdo jutiklio, spalvos parašo ir spalvos kodo pavyzdžiai naudojami ai_vision_1, RED_BOXir BOX_CODE . Prireikus pakeiskite juos savo sukonfigūruotais pavadinimais.

Žemiau pateikiamas visų metodų sąrašas:

Getteriai – gauna duomenis iš dirbtinio intelekto regos jutiklio.

  • take_snapshot – Užfiksuoja konkretaus parašo duomenis.

  • installed – Ar dirbtinio intelekto regėjimo jutiklis prijungtas prie „V5 Brain“.

Ypatybės – Objekto duomenys, grąžinti iš take_snapshot.

  • .exists – Ar objektas egzistuoja dabartiniame aptikime.

  • .width – Width of the detected object.

  • .height – Aptikto objekto aukštis.

  • .centerX – X position of the object’s center.

  • .centerY – objekto centro Y padėtis.

  • .angle – Spalvos kodo orientacija.

  • .originX – objekto viršutinio kairiojo kampo X padėtis.

  • .originY – objekto viršutinio kairiojo kampo Y padėtis.

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

  • .score – DI klasifikacijų patikimumo balas.

Konstruktoriai – rankiniu būdu inicijuokite ir konfigūruokite dirbtinio intelekto regos jutiklį ir jo parašus.

  • AiVision – Sukuria dirbtinio intelekto vaizdo jutiklį.

  • Colordesc – Sukuria spalvos parašą.

  • Codedesc – Sukuria spalvos kodą.

  • Tagdesc – Sukuria „AprilTag“ ID.

Getteriai#

take_snapshot#

take_snapshot filtruoja duomenis iš dirbtinio intelekto regos jutiklio kadro į vieną parašą – išsaugotą aprašymą to, ką jutiklis gali atpažinti, pvz., iš anksto apmokytą objektą, „AprilTag“ ID arba sukonfigūruotą spalvos parašą arba spalvos kodą – ir grąžina tuple.

Prieš naudojant šį metodą, pirmiausia „Vision Utility“ programoje reikia sukonfigūruoti Spalvų parašus ir Spalvų kodus.

Šiame rinkinyje objektai saugomi surūšiuoti nuo didžiausio iki mažiausio pagal plotį, pradedant nuo indekso 0. Kiekvieno objekto properties galima pasiekti naudojant jo indeksą. Jei nerandama atitinkamų objektų, grąžinama tuščia rinkinio reikšmė.

Usage:
ai_vision_1.take_snapshot(SIGNATURE)

Parametrai

Aprašymas

SIGNATURE

Filtruoja duomenų rinkinį, kad būtų įtraukti tik nurodyto parašo duomenys. Galimi parašai:

  • Spalvų parašai arba spalvų kodai – dirbtinio intelekto regėjimo jutiklio pavadinimas, du pabraukimai ir spalvos parašo arba spalvos kodo pavadinimas. Pavyzdžiui: ai_vision_1__RED_BOX
  • AiVision.ALL_AIOBJS – kubai, žiedai ir rutuliai.
  • AiVision.ALL_TAGS – visi „AprilTag“ ID.

count

Pasirinktinai. Nustato maksimalų grąžinamų objektų skaičių nuo 1 iki 24. Numatytoji reikšmė yra 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)

Pastaba: Grąžintą rinkinį galima rūšiuoti pagal bet kurią savybę, ne tik pagal plotį, naudojant Python funkciją sorted Pavyzdžiui, rūšiuojant pagal AprilTag ID:

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

Arba rūšiuoti pagal ūgį:

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

DI klasifikacijos#

Dirbtinio intelekto regos jutiklis gali aptikti skirtingus objektus pagal tam tikras dirbtinio intelekto klasifikacijas. Priklausomai nuo dirbtinio intelekto klasifikacijos modelio, pasirinkto konfigūruojant dirbtinio intelekto regos jutiklį įrenginių lange, bus aptikti skirtingi objektai. Šiuo metu galimi modeliai:

Klasės elementai

ID numeris

DI klasifikacija

0

BLUE_BALL

1

GREEN_BALL

2

RED_BALL

3

BLUE_RING

4

GREEN_RING

5

RED_RING

6

BLUE_CUBE

7

GREEN_CUBE

8

RED_CUBE

VEX V5 robotikos varžybos su dideliais statymais

ID numeris

DI klasifikacija

0

MOBILE_GOAL

1

RED_RING

2

BLUE_RING

VEX V5 robotikos varžybų pasipriešinimas

ID numeris

DI klasifikacija

0

BLUE_BLOCK

1

RED_BLOCK

VEX V5 robotikos varžybų viršijimas

ID numeris

DI klasifikacija

0

RED_BLUE_PIN

1

BLUE_YELLOW_PIN

2

RED_YELLOW_PIN

3

YELLOW_PIN

4

CUP

Spalvų parašai#

Spalvos parašas yra unikali spalva, kurią gali atpažinti dirbtinio intelekto regos jutiklis. Šie parašai leidžia dirbtinio intelekto regos jutikliui aptikti ir sekti objektus pagal jų spalvą. Sukonfigūravus spalvos parašą, jutiklis gali atpažinti objektus su ta konkrečia spalva savo matymo lauke. Spalvų parašai naudojami su take_snapshot, kad būtų galima apdoroti ir aptikti spalvotus objektus realiuoju laiku.

Norint projekte naudoti sukonfigūruotą spalvos parašą, jo pavadinimas turi būti jutiklio pavadinimas, du pabraukimo brūkšniai ir spalvos parašo pavadinimas. Pavyzdžiui: 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)

Spalvų kodai#

Spalvų kodas yra struktūrizuotas modelis, sudarytas iš tam tikra tvarka išdėstytų spalvų parašų. Šie kodai leidžia dirbtinio intelekto regos jutikliui atpažinti iš anksto nustatytus spalvų modelius. Spalvų kodai yra naudingi norint identifikuoti sudėtingus objektus arba sukurti unikalius žymeklius autonominei navigacijai.

Norint projekte naudoti sukonfigūruotą spalvos kodą, jo pavadinimas turi būti jutiklio pavadinimas, du pabraukimo brūkšniai ir spalvos kodo pavadinimas. Pavyzdžiui: 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 grąžina loginę reikšmę, nurodančią, ar dirbtinio intelekto regėjimo jutiklis šiuo metu prijungtas prie „V5 Brain“.

  • True – Dirbtinio intelekto regėjimo jutiklis prijungtas prie „V5 Brain“.

  • False – Dirbtinio intelekto regėjimo jutiklis neprijungtas prie „V5 Brain“.

Usage:
ai_vision_1.installed()

Parametrai

Aprašymas

Šis metodas neturi parametrų.

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

Ypatybės#

Kiekvienam objektui, saugomam tuple, panaudojus take_snapshot, pridedama dešimt savybių.

Visos ypatybių reikšmės, išskyrus .id ir .score apibūdina aptikto objekto padėtį ir dydį dirbtinio intelekto regos jutiklio rodinyje tuo metu, kai buvo naudojamas take_snapshot Šios reikšmės matuojamos pikseliais, remiantis jutiklio 320 x 240 pikselių skiriamąja geba.

.exists#

.exists grąžina loginę reikšmę, nurodančią, ar indeksas egzistuoja rinkinyje, ar ne.

  • True – Indeksas yra.

  • False – Indekso nėra.

# 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 grąžina aptikto objekto plotį pikseliais, kuris yra sveikasis skaičius nuo 1 iki 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 grąžina aptikto objekto aukštį pikseliais, kuris yra sveikasis skaičius nuo 1 iki 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 grąžina aptikto objekto centro x koordinatę pikseliais, kuri yra sveikasis skaičius nuo 0 iki 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 grąžina aptikto objekto centro y koordinatę pikseliais, kuri yra sveikasis skaičius nuo 0 iki 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 grąžina aptikto spalvos kodo arba „AprilTag“ ID orientaciją laipsniais, kuris yra sveikasis skaičius nuo 0 iki 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 grąžina aptikto objekto ribojančio langelio viršutinio kairiojo kampo x koordinatę pikseliais, kuri yra sveikasis skaičius nuo 0 iki 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 grąžina aptikto objekto ribojančio langelio viršutinio kairiojo kampo y koordinatę pikseliais, kurie yra sveikasis skaičius nuo 0 iki 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 grąžina aptiktos dirbtinio intelekto klasifikacijos ID arba „AprilTag“ ID kaip sveikąjį skaičių.

„AprilTag“ ID atveju savybė .id nurodo aptiktą „AprilTag“ ID numerį intervale nuo 0 iki 36. AI klasifikacijos atveju savybė „ .id atitinka iš anksto apibrėžtą ID skyriuje AI klasifikacijos.

# 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 grąžina aptiktos dirbtinio intelekto klasifikacijos patikimumo balą kaip sveikąjį skaičių nuo 1 iki 100.

Mažesnis balas reiškia, kad jutiklis mažiau pasitiki aptiktu objektu, o didesnis balas – kad jutiklis labiau pasitiki.

Konstruktoriai#

Konstruktoriai naudojami rankiniu būdu sukurti AiVision, Colordescir Codedesc objektus, kurie yra būtini AI regėjimo jutiklio konfigūravimui ne naudojant VEXcode.

AiVision#

AiVision sukuria dirbtinio intelekto vaizdo jutiklį.

Naudojimas

Vision(smartport, sigs)

Parametrai

Aprašymas

smartport

Išmanusis prievadas, prie kurio prijungtas dirbtinio intelekto regėjimo jutiklis, užrašomas kaip Ports.PORTx , kur x yra prievado numeris.

sigs

Pasirinktinai. Vieno ar kelių parašų pavadinimas, atskirtas kableliais (,):

# 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 sukuria spalvos parašą. Dirbtinio intelekto regėjimo jutiklyje vienu metu galima saugoti iki septynių skirtingų spalvų parašų.

Usage:
Colordesc(index, red, green, blue, hangle, hdsat)

Parametras

Aprašymas

index

Colordesc objekto indeksas nuo 1 iki 7.
Pastaba: Sukūrus du Colordesc objektus su tuo pačiu indekso numeriu, antrasis sukurtas objektas pakeis pirmąjį.

red

Raudonos spalvos reikšmė nuo 0 iki 255.

green

Žalios spalvos vertė nuo 0 iki 255.

blue

Mėlynos spalvos vertė nuo 0 iki 255.

hangle

Leistinas atspalvio pokytis, išreikštas laipsnių intervalu spalvų rate (1–40). Didesnės vertės leidžia didesnį sukimosi nuokrypį nuo bazinio atspalvio.

hdsat

Leistinas sodrumo nuokrypis nuo 0,10 iki 1,00. Ši vertė rodo viso sodrumo diapazono dalį, kurioje spalva gali pasislinkti (pvz., 0,10 = ±10 % sodrumo).

Apskritas spalvų ratas, rodantis visą atspalvių spektrą, pažymėtą laipsnių reikšmėmis aplink perimetrą, didėjant 30 laipsnių žingsniais nuo 0° viršuje iki 360°.

"""
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 sukuria spalvos kodą. Kad būtų galima naudoti, reikia bent dviejų jau apibrėžtų spalvų parašų. Regėjimo jutiklyje vienu metu galima saugoti iki aštuonių skirtingų spalvų kodų.

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

Parametras

Aprašymas

sig1

Anksčiau sukurtas Spalvų parašas.

sig2

Anksčiau sukurtas Spalvų parašas.

sig3

Pasirinktinai. Anksčiau sukurtas Spalvų parašas.

sig4

Pasirinktinai. Anksčiau sukurtas Spalvų parašas.

sig5

Pasirinktinai. Anksčiau sukurtas Spalvų parašas.

# 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 sukuria „AprilTag“ ID. Jį galite naudoti norėdami apibrėžti atpažįstamus „AprilTag“ ID, todėl jūsų kodas tampa aiškesnis ir lengviau skaitomas.

Usage:
Tagdesc(id)

Parametras

Aprašymas

id

Naudojamas „AprilTag“ ID.

# Set AprilTag ID 7 to be the "goal"
goal = Tagdesc(7)