Senzor pro vidění s umělou inteligencí#

Zavedení#

Vizuální senzor IQ AI 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.

V níže uvedených příkladech bude nakonfigurovaný senzor IQ AI Vision pojmenován ai_vision_1a nakonfigurované objekty Color Signature, jako například RED_BOX, budou použity ve všech následujících příkladech v této dokumentaci k API při odkazování na AiVision.

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

Gettery – Získávají data ze senzoru IQ AI Vision Sensor.

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

  • installed — Zda je kamerový senzor IQ AI připojen k mozku IQ (2. generace).

Vlastnosti — Data objektu vrácená z take_snapshot.

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

  • .width — Šířka detekovaného objektu.

  • .height — Výška detekovaného objektu.

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

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

  • .angle — Orientace barevného kódu nebo ID AprilTag.

  • .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í inicializace a konfigurace senzorů.

  • AiVision – Vytvoří kamerový senzor IQ AI.

  • Colordesc — Vytvoří barevný podpis.

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

Gettery#

take_snapshot#

Funkce take_snapshot filtruje data z rámce senzoru IQ 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 IQ 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 – Všechny detekované klasifikace AI v závislosti na modelu nakonfigurovaném v nástroji AI Vision Utility.
  • 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í: 8).

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

Kamerový senzor IQ AI 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 kamerového senzoru AI v okně Zařízení budou detekovány různé objekty. Aktuálně dostupné modely jsou:

Předměty ve třídě

Číslo průkazu totožnosti

Klasifikace umělé inteligence

0

ClassroomElements.BLUE_BALL

1

ClassroomElements.GREEN_BALL

2

ClassroomElements.RED_BALL

3

ClassroomElements.BLUE_RING

4

ClassroomElements.GREEN_RING

5

ClassroomElements.RED_RING

6

ClassroomElements.BLUE_CUBE

7

ClassroomElements.GREEN_CUBE

8

ClassroomElements.RED_CUBE

Soutěž robotů VEX IQ v mixování a zápasech

Číslo průkazu totožnosti

Klasifikace umělé inteligence

0

GameElementsMixAndMatch.BEAM

1

GameElementsMixAndMatch.BLUE_PIN

2

GameElementsMixAndMatch.RED_PIN

3

GameElementsMixAndMatch.ORANGE_PIN

VEX IQ Robotics Competition Level Up

Číslo průkazu totožnosti

Klasifikace umělé inteligence

0

GameElementsLevelUp.BLUE_BEANBAG

1

GameElementsLevelUp.RED_BEANBAG

2

GameElementsLevelUp.YELLOW_BEANBAG

Barevné podpisy#

Barevný podpis je jedinečná barva, kterou dokáže senzor IQ AI Vision Sensor rozpoznat. Díky těmto podpisům může senzor IQ 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 IQ 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 kamerový senzor IQ AI aktuálně připojen k IQ (2. generace) Brain.

  • True — Snímač IQ AI Vision je připojen k mozku IQ (2. generace).

  • False — Snímač IQ AI Vision není připojen k mozku IQ (2. generace).

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í funkce take_snapshot obsahuje deset vlastností.

Všechny hodnoty vlastností kromě .id .score detekovaného objektu v pohledu senzoru IQ AI Vision v okamžiku použití funkce take_snapshot Tyto hodnoty se měří v pixelech na základě rozlišení senzoru 320 x 240 pixelů.

.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é AI Classification nebo ID AprilTag jako celé číslo. Klasifikace AI závisí na modelu, který je nakonfigurován v nástroji AI Vision Utility.

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ší.

# Display if a score is confident
while True:
    objects = ai_vision_1.take_snapshot(AiVision.ALL_AIOBJS)
    brain.screen.clear_screen()
    brain.screen.set_cursor(1, 1)
    if objects[0].exists:
        if objects[0].score > 95:
            brain.screen.print("Confident")
    else:
        brain.screen.print("Not confident")

    wait(50, MSEC)

Konstruktéři#

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

AI Vision Sensor#

AiVision vytváří kamerový senzor IQ AI.

Používání

Vision(port, sigs)

Parametry

Popis

port

Ke kterému chytrému portu je připojen kamerový senzor IQ AI, od 1 do 12.

sigs

Volitelné. Název jednoho nebo více podpisů:

Příklad

ai_vision_1 = AiVision(Ports.PORT1, AiVision.ALL_AIOBJS)

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

Color Signature#

Colordesc vytváří barevnou signaturu. Na kamerovém senzoru IQ AI lze uložit až sedm různých barevných signatur najednou.

Používání:

Colordesc(index, uMin, uMax, uMean, vMin, vMax, vMean, rgb, type)

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í.

uMin

Hodnota od uMin v nástroji Vision Utility.

uMax

Hodnota od uMax v nástroji Vision Utility.

uMean

Hodnota od uMean v nástroji Vision Utility.

vMin

Hodnota od vMin v nástroji Vision Utility.

vMax

Hodnota od vMax v nástroji Vision Utility.

vMean

Hodnota od vMean v nástroji Vision Utility.

rgb

Hodnota od rgb v nástroji Vision Utility.

type

Hodnota od type v nástroji Vision Utility.

Chcete-li získat hodnoty pro vytvoření barevného podpisu, přejděte do Vision Utility. Jakmile je barevný podpis nakonfigurován, zkopírujte hodnoty parametrů z okna Konfigurace.

Příklad

# Create a new Signature RED_BOX with the Colordesc class
RED_BOX = Colordesc(1, 10121, 10757, 10439,-1657, -1223, -1440,2.5, 1)
# Create a new AI Vision Sensor "ai_vision_1" with the AiVision
# class, with the RED_BOX Signature.
ai_vision_1 = AiVision(Ports.PORT1, 100, RED_BOX)

# Move forward if a red object is detected
while True:
    red_object = ai_vision_1.take_snapshot(RED_BOX)
    if red_object[0].exists:
        drivetrain.drive_for(FORWARD, 10, MM)
    wait(5, MSEC)

Color Code#

Codedesc vytváří barevný kód. Pro jeho použití jsou nutné alespoň dvě již definované barevné signatury. Na obrazovém senzoru lze najednou uložit až osm různých barevných kódů.

Používání:

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.

Příklad

# Create two new Signatures for a red and blue box
RED_BOX = Colordesc(1, 10121, 10757, 10439,-1657, -1223, -1440, 2.5, 1)
BLUE_BOX = Colordesc(2, -4443, -3373, -3908,6253, 7741, 6997, 2.5, 1)
# Create a Color Code for a red box to the left of a blue box
RED_BLUE = Codedesc(RED_BOX, BLUE_BOX)
# Create a new AI Vision Sensor "ai_vision_1" with the AiVision
# class, with the RED_BOX and BLUE_BOX Signatures.
ai_vision_1 = AiVision(Ports.PORT1, RED_BOX, BLUE_BOX)

# Display a message if Color Code is detected
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(RED_BLUE)
    if box_code[0].exists:
        brain.screen.print("Code detected!")
        wait(100, MSEC)