Vize umělé inteligence#

Zavedení#

Senzor AI Vision dokáže detekovat a sledovat objekty, barvy a identifikátory AprilTag. To umožňuje robotovi analyzovat své okolí, sledovat objekty a reagovat na základě detekovaných vizuálních dat.

Tato stránka používá ai_vision_1, RED_BOXa BOX_CODE jako příklady názvů senzoru AI Vision, barevného podpisu a barevného kódu. V případě potřeby je nahraďte vlastními nakonfigurovanými názvy.

Níže je uveden seznam všech metod:

Gettery – Získejte data ze senzoru AI Vision.

  • take_snapshot – Zachytí data pro konkrétní podpis.

  • installed – Zda je AI Vision Sensor připojen k EXP Brain.

Vlastnosti – Data objektu vrácená z take_snapshot.

  • .exists – Zda objekt existuje v aktuální detekci.

  • .width – Width of the detected object.

  • .height – Height of the detected object.

  • .centerX – Pozice středu objektu na souřadnici X.

  • .centerY – Pozice středu objektu v ose Y.

  • .angle – Orientace barevného kódu.

  • .originX – Pozice X levého horního rohu objektu.

  • .originY – Pozice Y levého horního rohu objektu.

  • .id – Klasifikace nebo ID tagu objektu.

  • .score – Skóre spolehlivosti pro klasifikace umělé inteligence.

Konstruktory – Ručně inicializují a konfigurují senzor AI Vision a jeho signatury.

  • AiVision – Vytvoří senzor pro vidění s umělou inteligencí.

  • Colordesc – Vytvoří barevný podpis.

  • Codedesc – Vytvoří barevný kód.

  • Tagdesc – Vytvoří ID AprilTag.

Gettery#

take_snapshot#

Funkce take_snapshot filtruje data z rámce senzoru AI Vision do jediného podpisu – uloženého popisu něčeho, co senzor dokáže rozpoznat, například předtrénovaného objektu, ID AprilTag nebo nakonfigurovaného barevného podpisu či barevného kódu – a vrací tuple.

Barevné podpisy a Barevné kódy musí být nejprve nakonfigurovány v nástroji Vision Utility, než je lze použít s touto metodou.

N-tice ukládá objekty seřazené od největší po nejmenší podle šířky, počínaje indexem 0. K vlastnostem properties každého objektu lze přistupovat pomocí jeho indexu. Pokud nejsou detekovány žádné odpovídající objekty, vrátí se prázdná n-tice.

Usage:
ai_vision_1.take_snapshot(SIGNATURE)

Parametry

Popis

SIGNATURE

Filtruje datovou sadu tak, aby zahrnovala pouze data daného podpisu. Dostupné podpisy jsou:

  • Barevné podpisy nebo barevné kódy – Název senzoru AI Vision, dvě podtržítka a poté název barevného podpisu nebo barevného kódu. Například: ai_vision_1__RED_BOX.
  • AiVision.ALL_AIOBJS – Kostky, kruhy a koule.
  • AiVision.ALL_TAGS – Všechna ID AprilTag.

count

Volitelné. Nastavuje maximální počet objektů, které lze vrátit, od 1 do 24. Výchozí hodnota je 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)

Poznámka: Vrácenou n-tici lze seřadit podle libovolné vlastnosti property, nejen podle šířky, pomocí funkce Pythonu sorted Například řazení podle ID AprilTag:

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

Nebo seřazení podle výšky:

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

Klasifikace umělé inteligence#

Senzor AI Vision dokáže detekovat různé objekty v rámci určitých klasifikací AI. V závislosti na modelu klasifikace AI vybraném při konfiguraci senzoru AI Vision v okně Zařízení budou detekovány různé objekty. Aktuálně dostupné modely jsou:

Prvky pro učebnu

Číslo průkazu totožnosti

Klasifikace umělé inteligence

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

Vysoké sázky v robotické soutěži VEX V5

Číslo průkazu totožnosti

Klasifikace umělé inteligence

0

MOBILE_GOAL

1

RED_RING

2

BLUE_RING

Odpor vůči soutěži v robotice VEX V5

Číslo průkazu totožnosti

Klasifikace umělé inteligence

0

BLUE_BLOCK

1

RED_BLOCK

Přerušení robotické soutěže VEX V5

Číslo průkazu totožnosti

Klasifikace umělé inteligence

0

RED_BLUE_PIN

1

BLUE_YELLOW_PIN

2

RED_YELLOW_PIN

3

YELLOW_PIN

4

CUP

Barevné podpisy#

Barevný podpis je jedinečná barva, kterou dokáže AI Vision Sensor rozpoznat. Díky těmto podpisům dokáže AI Vision Sensor detekovat a sledovat objekty na základě jejich barvy. Jakmile je barevný podpis nakonfigurován, může senzor identifikovat objekty s danou barvou ve svém zorném poli. Barevné podpisy se používají s take_snapshot ke zpracování a detekci barevných objektů v reálném čase.

Aby bylo možné v projektu použít nakonfigurovaný barevný podpis, musí být jeho název složen z názvu senzoru, dvou podtržítek a poté názvu barevného podpisu. Například: 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)

Barevné kódy#

Barevný kód je strukturovaný vzor složený z barevných podpisů uspořádaných v určitém pořadí. Tyto kódy umožňují senzoru AI Vision Sensor rozpoznávat předdefinované barevné vzory. Barevné kódy jsou užitečné pro identifikaci složitých objektů nebo vytváření jedinečných značek pro autonomní navigaci.

Aby bylo možné v projektu použít nakonfigurovaný barevný kód, jeho název musí být název senzoru, dvě podtržítka a poté název barevného kódu. Například: 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 vrací booleovskou hodnotu označující, zda je AI Vision Sensor aktuálně připojen k EXP Brain.

  • True – Senzor AI Vision je připojen k EXP Brainu.

  • False – Senzor AI Vision není připojen k EXP Brainu.

Usage:
ai_vision_1.installed()

Parametry

Popis

Tato metoda nemá žádné parametry.

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

Nemovitosti#

Každý objekt uložený v n-tici tuple po použití take_snapshot obsahuje deset vlastností.

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 vrací booleovskou hodnotu, která indikuje, zda index v n-tici existuje či nikoli.

  • True – Index existuje.

  • False – Index neexistuje.

# 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 vrací šířku detekovaného objektu v pixelech, což je celé číslo mezi 1 a 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 vrací výšku detekovaného objektu v pixelech, což je celé číslo mezi 1 a 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 vrací souřadnici x středu detekovaného objektu v pixelech, což je celé číslo mezi 0 a 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 vrací souřadnici y středu detekovaného objektu v pixelech, což je celé číslo mezi 0 a 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#

Funkce .angle vrací orientaci detekovaného barevného kódu nebo ID AprilTag ve stupních, což je celé číslo mezi 0 a 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 vrací souřadnici x levého horního rohu ohraničovacího rámečku detekovaného objektu v pixelech, což je celé číslo mezi 0 a 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 vrací souřadnici y levého horního rohu ohraničovacího rámečku detekovaného objektu v pixelech, což je celé číslo mezi 0 a 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 vrací ID detekované klasifikace AI nebo ID AprilTag jako celé číslo.

For an AprilTag ID, the .id property represents the detected AprilTag ID number in the range of 0 to 36. For an AI Classification, the .id property corresponds to the predefined ID in the AI Classifications section.

# 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 vrací skóre spolehlivosti detekované klasifikace AI jako celé číslo mezi 1 a 100.

Nižší skóre znamená, že si je senzor méně jistý detekovaným objektem, zatímco vyšší skóre znamená, že si je senzor jistější.

Konstruktéři#

Konstruktory se používají k ručnímu vytvoření AiVision, Colordesca Codedesc , které jsou nezbytné pro konfiguraci senzoru AI Vision mimo VEXcode.

AiVision#

AiVision vytváří senzor pro vizuální efekty s umělou inteligencí.

Používání

Vision(smartport, sigs)

Parametry

Popis

smartport

Inteligentní port, ke kterému je připojen AI Vision Sensor, zapsaný jako Ports.PORTx , kde x je číslo portu.

sigs

Volitelné. Název jednoho nebo více podpisů, oddělený čárkami (,):

# 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 vytvoří barevný podpis. Na AI Vision senzoru lze uložit až sedm různých barevných podpisů najednou.

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

Parametr

Popis

index

Index objektu Colordesc , od 1 do 7.
Poznámka: Vytvoření dvou objektů Colordesc se stejným indexovým číslem způsobí, že druhý vytvořený objekt přepíše první.

red

Červená hodnota barvy od 0 do 255.

green

Zelená hodnota barvy od 0 do 255.

blue

Modrá hodnota barvy od 0 do 255.

hangle

Přípustná odchylka odstínu v rozsahu stupňů na barevném kruhu (1–40). Vyšší hodnoty umožňují větší rotační odchylku od základního odstínu.

hdsat

Přípustná odchylka sytosti od 0,10 do 1,00. Tato hodnota představuje zlomek celého rozsahu sytosti, v němž se barva může posunout (např. 0,10 = ±10 % sytosti).

Kruhové barevné kolo zobrazující celé spektrum odstínů označených stupni po obvodu, které se zvyšují v krocích po 30 stupních od 0° nahoře do 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 vytváří barevný kód. Pro jeho použití jsou nutné alespoň dva již definované Barevné signatury. Na obrazovém senzoru lze najednou uložit až osm různých barevných kódů.

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

Parametr

Popis

sig1

Dříve vytvořený Barevný podpis.

sig2

Dříve vytvořený Barevný podpis.

sig3

Volitelné. Dříve vytvořený Barevný podpis.

sig4

Volitelné. Dříve vytvořený Barevný podpis.

sig5

Volitelné. Dříve vytvořený Barevný podpis.

# 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 vytvoří ID AprilTag. Můžete ho použít k definování identifikovatelných ID AprilTag, což váš kód usnadní a zpřehlední.

Usage:
Tagdesc(id)

Parametr

Popis

id

ID AprilTag, které se má použít.

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