Wizja AI#

Wstęp#

Czujnik wizyjny AI potrafi wykrywać i śledzić obiekty, kolory oraz identyfikatory AprilTag. Dzięki temu robot może analizować otoczenie, śledzić obiekty i reagować na podstawie wykrytych danych wizualnych.

Na tej stronie użyto nazw ai_vision_1, RED_BOXi BOX_CODE jako przykładowych nazw czujników AI Vision, sygnatury kolorów i kodu kolorów. W razie potrzeby można je zastąpić własnymi, skonfigurowanymi nazwami.

Poniżej znajduje się lista wszystkich metod:

Gettery – pobieranie danych z czujnika wizyjnego AI.

Właściwości – dane obiektu zwrócone z take_snapshot.

  • .exists – Czy obiekt istnieje w bieżącym wykryciu.

  • .width – Szerokość wykrytego obiektu.

  • .height – Wysokość wykrytego obiektu.

  • .centerX – Pozycja X środka obiektu.

  • .centerY – Pozycja Y środka obiektu.

  • .angle – Orientacja kodu koloru.

  • .originX – Pozycja X lewego górnego rogu obiektu.

  • .originY – Pozycja Y lewego górnego rogu obiektu.

  • .id – Klasyfikacja lub identyfikator tagu obiektu.

  • .score – Wynik pewności dla klasyfikacji AI.

Konstruktorzy – ręcznie zainicjuj i skonfiguruj czujnik AI Vision i jego sygnatury.

Getters#

take_snapshot#

take_snapshot filtruje dane z ramki czujnika AI Vision do pojedynczego podpisu — zapisanego opisu czegoś, co czujnik może rozpoznać, na przykład wstępnie wyszkolonego obiektu, identyfikatora AprilTag lub skonfigurowanego podpisu koloru lub kodu koloru — i zwraca krotkę.

Aby można było używać tej metody, najpierw należy skonfigurować Sygnatury kolorów i Kody kolorów w narzędziu Vision Utility.

Krotka przechowuje obiekty uporządkowane od największego do najmniejszego według szerokości, zaczynając od indeksu 0. Dostęp do właściwości każdego obiektu jest możliwy za pomocą jego indeksu. Jeśli nie zostaną wykryte żadne pasujące obiekty, zwracana jest pusta krotka.

Usage:
ai_vision_1.take_snapshot(SIGNATURE)

Parametry

Opis

SIGNATURE

Filtruje zbiór danych, aby zawierał tylko dane o podanym podpisie. Dostępne podpisy to:

  • Sygnatury kolorów lub kody kolorów – nazwa czujnika AI Vision, dwa podkreślenia, a następnie nazwa podpisu koloru lub kodu koloru. Na przykład: ai_vision_1__RED_BOX.
  • AiVision.ALL_AIOBJS – kostki, pierścienie i kule.
  • AiVision.ALL_TAGS – wszystkie identyfikatory AprilTag.

count

Opcjonalnie. Ustawia maksymalną liczbę obiektów, które można zwrócić, od 1 do 24. Wartość domyślna to 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)

Uwaga: Zwróconą krotkę można posortować według dowolnej właściwości, nie tylko szerokości, za pomocą funkcji Pythona sorted Na przykład sortowanie według identyfikatora 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)

Lub sortowanie według wzrostu:

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

Klasyfikacje AI#

Czujnik wizyjny AI może wykrywać różne obiekty w ramach określonych klasyfikacji AI. W zależności od modelu klasyfikacji AI wybranego podczas konfiguracji czujnika wizyjnego AI w oknie Urządzenia, wykrywane będą różne obiekty. Obecnie dostępne modele to:

Elementy klasowe

Numer identyfikacyjny

Klasyfikacja AI

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

Konkurs robotyki VEX V5 o wysoką stawkę

Numer identyfikacyjny

Klasyfikacja AI

0

MOBILE_GOAL

1

RED_RING

2

BLUE_RING

Odrzucenie konkursu robotycznego VEX V5

Numer identyfikacyjny

Klasyfikacja AI

0

BLUE_BLOCK

1

RED_BLOCK

Zawody robotyczne VEX V5 Override

Numer identyfikacyjny

Klasyfikacja AI

0

RED_BLUE_PIN

1

BLUE_YELLOW_PIN

2

RED_YELLOW_PIN

3

YELLOW_PIN

4

CUP

Sygnatury kolorów#

Sygnatura koloru to unikalny kolor, który czujnik wizyjny AI potrafi rozpoznać. Sygnatury te umożliwiają czujnikowi wizyjnemu AI wykrywanie i śledzenie obiektów na podstawie ich koloru. Po skonfigurowaniu Sygnatury koloru czujnik może identyfikować obiekty o tym konkretnym kolorze w swoim polu widzenia. Sygnatury kolorów są używane z funkcją take_snapshot do przetwarzania i wykrywania kolorowych obiektów w czasie rzeczywistym.

Aby użyć skonfigurowanego podpisu koloru w projekcie, jego nazwa musi być nazwą czujnika, dwoma znakami podkreślenia, a następnie nazwą podpisu koloru. Na przykład: 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)

Kody kolorów#

Kod koloru to ustrukturyzowany wzór składający się z sygnatur kolorów ułożonych w określonej kolejności. Kody te umożliwiają czujnikowi wizyjnemu AI rozpoznawanie predefiniowanych wzorców kolorów. Kody kolorów są przydatne do identyfikacji złożonych obiektów lub tworzenia unikalnych znaczników do autonomicznej nawigacji.

Aby użyć skonfigurowanego kodu koloru w projekcie, jego nazwa musi być nazwą czujnika, dwoma znakami podkreślenia, a następnie nazwą kodu koloru. Na przykład: 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 zwraca wartość logiczną wskazującą, czy czujnik AI Vision jest obecnie połączony z mózgiem V5.

  • True – Czujnik wizyjny AI jest połączony z mózgiem V5.

  • False – Czujnik wizyjny AI nie jest połączony z mózgiem V5.

Usage:
ai_vision_1.installed()

Parametry

Opis

Ta metoda nie ma żadnych parametrów.

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

Właściwości#

Każdy obiekt przechowywany w krotce zawiera dziesięć właściwości po użyciu take_snapshot.

Wszystkie wartości właściwości, z wyjątkiem .id i .score opisują położenie i rozmiar wykrytego obiektu w polu widzenia czujnika AI Vision w momencie użycia polecenia take_snapshot Wartości te są mierzone w pikselach, w oparciu o rozdzielczość czujnika wynoszącą 320 na 240 pikseli.

.exists#

.exists zwraca wartość logiczną wskazującą, czy indeks istnieje w krotce, czy nie.

  • True – Indeks istnieje.

  • False – Indeks nie istnieje.

# 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 zwraca szerokość wykrytego obiektu w pikselach, która jest liczbą całkowitą z przedziału od 1 do 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 zwraca wysokość wykrytego obiektu w pikselach, która jest liczbą całkowitą z przedziału od 1 do 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 zwraca współrzędną x środka wykrytego obiektu w pikselach, która jest liczbą całkowitą z przedziału od 0 do 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 zwraca współrzędną y środka wykrytego obiektu w pikselach, która jest liczbą całkowitą z przedziału od 0 do 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 zwraca orientację wykrytego kodu koloru lub identyfikatora AprilTag w stopniach, która jest liczbą całkowitą z przedziału od 0 do 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 zwraca współrzędną x lewego górnego rogu ograniczającego pole wykrytego obiektu w pikselach. Jest to liczba całkowita z przedziału od 0 do 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 zwraca współrzędną y lewego górnego rogu ograniczającego pola wykrytego obiektu w pikselach. Jest to liczba całkowita z przedziału od 0 do 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 zwraca identyfikator wykrytej klasyfikacji AI lub identyfikator AprilTag jako liczbę całkowitą.

W przypadku identyfikatora AprilTag właściwość .id reprezentuje wykryty numer identyfikatora AprilTag z zakresu od 0 do 36. W przypadku klasyfikacji AI właściwość .id odpowiada wstępnie zdefiniowanemu identyfikatorowi w sekcji Klasyfikacje AI.

# 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 zwraca wynik pewności wykrytej klasyfikacji sztucznej inteligencji jako liczbę całkowitą od 1 do 100.

Niższy wynik oznacza, że ​​czujnik ma mniejszą pewność co do wykrytego obiektu, natomiast wyższy wynik oznacza, że ​​czujnik ma większą pewność.

Konstruktorzy#

Konstruktory służą do ręcznego tworzenia obiektów AiVision, Colordesc, i Codedesc , które są niezbędne do konfiguracji czujnika AI Vision poza VEXcode.

AiVision#

AiVision tworzy czujnik wizyjny AI.

Stosowanie

Vision(smartport, sigs)

Parametry

Opis

smartport

Inteligentny port, do którego podłączony jest czujnik AI Vision, zapisany jako Ports.PORTx , gdzie x jest numerem portu.

sigs

Opcjonalnie. Nazwa jednego lub większej liczby podpisów, oddzielonych przecinkami (,):

  • Podpis koloru
  • Kod koloru
  • AiVision.ALL_TAGS – Wszystkie identyfikatory AprilTag
  • AiVision.ALL_AIOBJS – Wszystkie klasyfikacje AI

# 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 tworzy sygnaturę kolorów. Na czujniku wizyjnym AI można zapisać jednocześnie do siedmiu różnych sygnatur kolorów.

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

Parametr

Opis

index

Indeks obiektu Colordesc od 1 do 7.
Uwaga: Utworzenie dwóch obiektów Colordesc z tym samym numerem indeksu spowoduje, że obiekt utworzony jako drugi nadpisze pierwszy.

red

Wartość koloru czerwonego od 0 do 255.

green

Wartość zielona koloru od 0 do 255.

blue

Wartość koloru niebieskiego od 0 do 255.

hangle

Dopuszczalna rozbieżność odcienia wyrażona w stopniach na kole kolorów (1–40). Wyższe wartości pozwalają na większe odchylenie od odcienia bazowego.

hdsat

Dopuszczalne odchylenie nasycenia od 0,10 do 1,00. Wartość ta reprezentuje ułamek pełnego zakresu nasycenia, w którym kolor może się zmieniać (np. 0,10 = ±10% nasycenia).

Koło barw wyświetlające pełne spektrum odcieni oznaczonych wartościami stopni na obwodzie, zwiększającymi się co 30 stopni od 0° u góry 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 tworzy kod koloru. Wymaga co najmniej dwóch zdefiniowanych wcześniej Sygnatur Koloru, aby można było go użyć. Na czujniku wizyjnym można zapisać jednocześnie do ośmiu różnych kodów kolorów.

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

Parametr

Opis

sig1

Wcześniej utworzony Sygnatura koloru.

sig2

Wcześniej utworzony Sygnatura koloru.

sig3

Opcjonalnie. Wcześniej utworzony Sygnatura koloru.

sig4

Opcjonalnie. Wcześniej utworzony Sygnatura koloru.

sig5

Opcjonalnie. Wcześniej utworzony Sygnatura koloru.

# 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 tworzy identyfikator AprilTag. Możesz go użyć do zdefiniowania identyfikowalnych identyfikatorów AprilTag, dzięki czemu Twój kod będzie bardziej przejrzysty i łatwiejszy w odczycie.

Usage:
Tagdesc(id)

Parametr

Opis

id

Identyfikator AprilTag, który ma zostać użyty.

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