Mākslīgā intelekta vīzija#

Ievads#

Mākslīgā intelekta redzes sensors var noteikt un izsekot objektus, krāsas un AprilTag ID. Tas ļauj robotam analizēt apkārtni, sekot objektiem un reaģēt, pamatojoties uz noteiktajiem vizuālajiem datiem.

Šajā lapā kā piemēri AI redzes sensoram, krāsu parakstam un krāsu kodam tiek izmantoti ai_vision_1, RED_BOXun BOX_CODE . Ja nepieciešams, aizstājiet tos ar saviem konfigurētajiem nosaukumiem.

Zemāk ir visu metožu saraksts:

Ieguvēji — iegūstiet datus no mākslīgā intelekta redzes sensora.

  • take_snapshot – Iegūst datus konkrētam parakstam.

  • installed – Vai AI redzes sensors ir pievienots V5 smadzenēm.

Īpašības — no take_snapshot atgrieztie objekta dati.

  • .exists – Vai objekts eksistē pašreizējā noteikšanā.

  • .width – Noteiktā objekta platums.

  • .height – Height of the detected object.

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

  • .centerY – objekta centra Y pozīcija.

  • .angle – Krāsu koda orientācija.

  • .originX – objekta augšējā kreisā stūra X pozīcija.

  • .originY – objekta augšējā kreisā stūra Y pozīcija.

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

  • .score – AI klasifikāciju ticamības rādītājs.

Konstruktori — manuāli inicializējiet un konfigurējiet mākslīgā intelekta redzes sensoru un tā parakstus.

  • AiVision – Izveido mākslīgā intelekta redzes sensoru.

  • Colordesc – Izveido krāsas parakstu.

  • Codedesc – Izveido krāsu kodu.

  • Tagdesc – Izveido AprilTag ID.

Getteri#

take_snapshot#

take_snapshot filtrē datus no AI redzes sensora kadra līdz vienam parakstam — saglabātam aprakstam par kaut ko tādu, ko sensors var atpazīt, piemēram, iepriekš apmācītu objektu, AprilTag ID vai konfigurētu krāsas parakstu vai krāsas kodu — un atgriež tuple.

Krāsu paraksti un Krāsu kodi vispirms ir jākonfigurē Vision utilītā, pirms tos var izmantot ar šo metodi.

Kortežs saglabā objektus, kas sakārtoti no lielākā līdz mazākajam pēc platuma, sākot ar indeksu 0. Katra objekta īpašībām var piekļūt, izmantojot tā indeksu. Ja netiek atrasti atbilstoši objekti, tiek atgriezts tukšs kortežs.

Usage:
ai_vision_1.take_snapshot(SIGNATURE)

Parametri

Apraksts

SIGNATURE

Filtrē datu kopu, lai iekļautu tikai dotā paraksta datus. Pieejamie paraksti ir:

  • Krāsu paraksti vai krāsu kodi — AI redzes sensora nosaukums, divas pasvītras un pēc tam krāsas paraksta vai krāsas koda nosaukums. Piemēram: ai_vision_1__RED_BOX
  • AiVision.ALL_AIOBJS — Kubi, gredzeni un bumbiņas.
  • AiVision.ALL_TAGS — Visi AprilTag ID.

count

Neobligāti. Iestata maksimālo atgriezto objektu skaitu no 1 līdz 24. Noklusējuma vērtība ir 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)

Piezīme: Atgriezto kortežu var kārtot pēc jebkuras īpašības, ne tikai pēc platuma, izmantojot Python sorted funkciju. Piemēram, kārtojot pēc 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)

Vai arī kārtot pēc augstuma:

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

Mākslīgā intelekta klasifikācijas#

AI redzes sensors var noteikt dažādus objektus saskaņā ar noteiktām AI klasifikācijām. Atkarībā no AI klasifikācijas modeļa, kas tika atlasīts, konfigurējot AI redzes sensoru ierīcēs, tiks noteikti dažādi objekti. Pašlaik pieejamie modeļi ir:

Klases elementi

ID numurs

AI klasifikācija

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 robotikas sacensības ar augstām likmēm

ID numurs

AI klasifikācija

0

MOBILE_GOAL

1

RED_RING

2

BLUE_RING

VEX V5 robotikas sacensību pretošanās

ID numurs

AI klasifikācija

0

BLUE_BLOCK

1

RED_BLOCK

VEX V5 robotikas sacensību ignorēšana

ID numurs

AI klasifikācija

0

RED_BLUE_PIN

1

BLUE_YELLOW_PIN

2

RED_YELLOW_PIN

3

YELLOW_PIN

4

CUP

Krāsu paraksti#

Krāsas paraksts ir unikāla krāsa, ko spēj atpazīt mākslīgā intelekta redzes sensors. Šie paraksti ļauj mākslīgā intelekta redzes sensoram noteikt un izsekot objektus, pamatojoties uz to krāsu. Kad krāsas paraksts ir konfigurēts, sensors var identificēt objektus ar šo konkrēto krāsu tā redzes laukā. Krāsu paraksti tiek izmantoti kopā ar take_snapshot, lai apstrādātu un noteiktu krāsainus objektus reāllaikā.

Lai projektā izmantotu konfigurētu krāsas parakstu, tā nosaukumam jāsastāv no sensora nosaukuma, divām pasvītrojuma zīmēm un pēc tam krāsas paraksta nosaukuma. Piemēram: 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)

Krāsu kodi#

Krāsu kods ir strukturēts raksts, kas sastāv no noteiktā secībā sakārtotiem krāsu parakstiem. Šie kodi ļauj mākslīgā intelekta redzes sensoram atpazīt iepriekš definētus krāsu rakstus. Krāsu kodi ir noderīgi sarežģītu objektu identificēšanai vai unikālu marķieru izveidei autonomai navigācijai.

Lai projektā izmantotu konfigurētu krāsu kodu, tā nosaukumam ir jābūt sensora nosaukumam, divām pasvītrojuma zīmēm un pēc tam krāsas koda nosaukumam. Piemēram: 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 atgriež Būla vērtību, kas norāda, vai AI redzes sensors pašlaik ir savienots ar V5 Brain.

  • True — AI redzes sensors ir savienots ar V5 smadzenēm.

  • False – AI redzes sensors nav savienots ar V5 smadzenēm.

Usage:
ai_vision_1.installed()

Parametri

Apraksts

Šai metodei nav parametru.

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

Īpašumi#

Pēc take_snapshot izmantošanas katrā objektā, kas tiek glabāts tuple, ir iekļautas desmit īpašības.

All property values except .id and .score describe the detected object’s position and size in the AI Vision Sensor’s view at the moment take_snapshot was used. These values are measured in pixels, based on the sensor’s 320 by 240 pixel resolution.

.exists#

.exists atgriež Būla vērtību, kas norāda, vai indekss eksistē kortežā vai nē.

  • True – Indekss pastāv.

  • False – Indekss nepastāv.

# 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 atgriež noteiktā objekta platumu pikseļos, kas ir vesels skaitlis no 1 līdz 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 atgriež noteiktā objekta augstumu pikseļos, kas ir vesels skaitlis no 1 līdz 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 atgriež noteiktā objekta centra x koordinātu pikseļos, kas ir vesels skaitlis no 0 līdz 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 atgriež noteiktā objekta centra y koordinātu pikseļos, kas ir vesels skaitlis no 0 līdz 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 atgriež noteiktā krāsas koda vai AprilTag ID orientāciju grādos, kas ir vesels skaitlis no 0 līdz 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 atgriež noteiktā objekta ierobežojošā lodziņa augšējā kreisā stūra x koordinātu pikseļos, kas ir vesels skaitlis no 0 līdz 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 atgriež noteiktā objekta ierobežojošā lodziņa augšējā kreisā stūra y koordinātu pikseļos, kas ir vesels skaitlis no 0 līdz 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 atgriež noteiktās AI klasifikācijas ID vai AprilTag ID kā veselu skaitli.

AprilTag ID gadījumā īpašība .id apzīmē noteikto AprilTag ID numuru diapazonā no 0 līdz 36. AI klasifikācijas gadījumā īpašība .id atbilst iepriekš definētajam ID sadaļā AI klasifikācijas.

# 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 atgriež noteiktās AI klasifikācijas ticamības rādītāju kā veselu skaitli no 1 līdz 100.

Zemāks rādītājs nozīmē, ka sensors ir mazāk pārliecināts par noteikto objektu, savukārt augstāks rādītājs nozīmē, ka sensors ir pārliecinātāks.

Konstruktori#

Konstruktori tiek izmantoti, lai manuāli izveidotu AiVision, Colordescun Codedesc objektus, kas ir nepieciešami AI redzes sensora konfigurēšanai ārpus VEXcode.

AiVision#

AiVision izveido mākslīgā intelekta redzes sensoru.

Lietošana

Vision(smartport, sigs)

Parametri

Apraksts

smartport

Viedā pieslēgvieta, kurai ir pievienots AI redzes sensors, kas pierakstīta kā Ports.PORTx , kur x ir pieslēgvietas numurs.

sigs

Neobligāti. Viena vai vairāku parakstu nosaukumi, atdalīti ar komatiem (,):

# 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 izveido krāsas parakstu. Mākslīgā intelekta redzes sensorā vienlaikus var saglabāt līdz septiņiem dažādiem krāsu parakstiem.

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

Parametrs

Apraksts

index

Colordesc objekta indekss no 1 līdz 7.
Piezīme: Izveidojot divus Colordesc objektus ar vienādu indeksa numuru, otrais izveidotais objekts ignorēs pirmo.

red

Sarkanās krāsas vērtība no 0 līdz 255.

green

Zaļās krāsas vērtība no 0 līdz 255.

blue

Zilās krāsas vērtība no 0 līdz 255.

hangle

Pieļaujamā nokrāsas dispersija kā grādu diapazons krāsu aplī (1–40). Augstākas vērtības pieļauj plašāku rotācijas novirzi no pamata nokrāsas.

hdsat

Pieļaujamā piesātinājuma novirze no 0,10 līdz 1,00. Šī vērtība norāda pilna piesātinājuma diapazona daļu, kurā krāsa var mainīties (piemēram, 0,10 = ±10% piesātinājums).

Apļveida krāsu aplis, kas attēlo pilnu toņu spektru, kas apzīmēts ar grādu vērtībām pa perimetru, palielinoties ar 30 grādu soli no 0° augšpusē līdz 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 izveido krāsu kodu. Lai to izmantotu, ir nepieciešami vismaz divi jau definēti krāsu paraksti. Redzes sensorā vienlaikus var saglabāt līdz astoņiem dažādiem krāsu kodiem.

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

Parametrs

Apraksts

sig1

Iepriekš izveidots Krāsu paraksts.

sig2

Iepriekš izveidots Krāsu paraksts.

sig3

Neobligāti. Iepriekš izveidots Krāsu paraksts.

sig4

Neobligāti. Iepriekš izveidots Krāsu paraksts.

sig5

Neobligāti. Iepriekš izveidots Krāsu paraksts.

# 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 izveido AprilTag ID. To var izmantot, lai definētu identificējamus AprilTag ID, kas padara kodu skaidrāku un vieglāk lasāmu.

Usage:
Tagdesc(id)

Parametrs

Apraksts

id

Izmantojamais AprilTag ID.

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