Kodowanie z wykorzystaniem czujnika wizyjnego AI w VEXcode EXP Python

Upewnij się, że w swoim czujniku AI Vision masz skonfigurowane Sygnatur kolorów i Kody kolorów , aby można było ich używać z klockami. Aby dowiedzieć się więcej na temat ich konfiguracji, przeczytaj poniższe artykuły:

Czujnik wizyjny AI potrafi również wykrywać klasyfikacje AI i AprilTagi. Aby dowiedzieć się, jak włączyć te tryby wykrywania, przejdź tutaj:

Aby dowiedzieć się więcej na temat poszczególnych poleceń i sposobu ich używania w VEXcode, przejdź do witryny API.


Uzyskaj dane wizualne za pomocą czujnika wizyjnego AI

Każde polecenie czujnika AI Vision będzie zaczynać się od nazwy skonfigurowanego czujnika AI Vision. We wszystkich przykładach podanych w tym artykule nazwa użytego czujnika AI Vision będzie wynosić ai_vision_1.

zrób migawkę

Metoda take_snapshot tworzy obraz tego, co aktualnie widzi czujnik AI Vision i pobiera z tego obrazu dane, które można następnie wykorzystać w projekcie. Podczas wykonywania migawki należy określić typ obiektu, o którym czujnik AI Vision ma zbierać dane:

  • Podpis koloruKod koloru lub
    • Tego typu sygnatury wizualne zaczynają się od nazwy czujnika AI Vision, podwójnego podkreślenia, a następnie nazwy sygnatury wizualnej, na przykład: ai_vision_1__Blue.
  • Klasyfikacje AI - AiVision.ALL_AIOBJS
  • kwietniaTagi- AiVision.ALL_TAGS

Wykonanie migawki spowoduje utworzenie krotki wszystkich wykrytych obiektów, które określiłeś. Na przykład, jeśli chcesz wykryć sygnaturę koloru „Niebieski” , a czujnik wizyjny AI wykrył 3 różne niebieskie obiekty, dane ze wszystkich trzech zostaną umieszczone w krotce.

W tym przykładzie zmienna vision_objects przechowuje krotkę zawierającą wykryte sygnatury kolorów „Fioletowy” z czujnika AI Vision o nazwie ai_vision_1. Wyświetla liczbę wykrytych obiektów i wykonuje nową migawkę co 0,5 sekundy.

while True: 
# Pobierz migawkę wszystkich sygnatur kolorów fioletowych i zapisz ją w vision_objects.
vision_objects = ai_vision_1.take_snapshot(ai_vision_1__Purple)

# Sprawdź, czy obiekt został wykryty na migawce przed pobraniem danych.
jeśli vision_objects[0].exists == Prawda

brain.screen.clear_screen()
brain.screen.set_cursor(1, 1)

brain.screen.print("Liczba obiektów:", len(vision_objects))
czekaj(0,5, SEKUND)

Właściwości obiektu

Każdy obiekt ze migawki ma inne właściwości, które można wykorzystać do raportowania informacji o tym obiekcie. Dostępne właściwości są następujące:

  • id
  • środekX i środekY
  • originX i originY
  • szerokość
  • wysokość
  • kąt
  • wynik
  • istnieje

Aby uzyskać dostęp do właściwości obiektu, należy użyć nazwy zmiennej przechowującej krotkę, a następnie indeksu obiektu.

Indeks obiektu wskazuje konkretną właściwość obiektu, którą chcesz pobrać. Po zrobieniu zdjęcia czujnik AI Vision automatycznie sortuje obiekty według rozmiaru. Największemu obiektowi przypisuje się indeks 0, a mniejszym obiektom wyższe numery indeksów.

Na przykład wywołanie szerokości największego obiektu wewnątrz zmiennej vision_objects wyglądałoby następująco: vision_objects[0].width.

id

Właściwość id jest dostępna tylko dla klasyfikacji AI z 2013 r., tagów i

Narzędzie AI Vision Utility śledzi trzy AprilTagi. Każdy tag jest identyfikowany, zlokalizowany i oznaczony, co wskazuje, że jest śledzony przez system. Identyfikatory AprilTag w tym przykładzie to 0, 3 i 9.

W przypadku AprilTago wartościwłaściwość id reprezentuje wykryty numer identyfikacyjnyAprilTag(s) .

Identyfikacja konkretnych AprilTags umożliwia selektywną nawigację. Możesz zaprogramować robota tak, aby poruszał się w kierunku określonych znaczników, ignorując inne. W ten sposób możesz wykorzystać je jako drogowskazy do automatycznej nawigacji.

Narzędzie AI Vision śledzi cztery obiekty: dwa BuckyBalls i dwa Rings. Każdy obiekt zostaje zidentyfikowany, zlokalizowany i opisany, co wskazuje na to, że system go śledzi. Narzędzie zapisuje identyfikator obiektu – w tym przykładzie jest to Czerwona Kula, Niebieska Kula, Zielony Pierścień i Czerwony Pierścień.

W przypadkuklasyfikacji AIwłaściwość id oznacza konkretny typ wykrytej klasyfikacji AI.

Identyfikacja konkretnych Klasyfikacji AIpozwala robotowi skupić się tylko na określonych obiektach, np. chcieć nawigować tylko w kierunku czerwonej piłki Buckyball, a nie niebieskiej.

Aby uzyskać więcej informacji na temat kwietniaTags i AI Classifications oraz sposobu włączania ich wykrywania w narzędziu AI Vision Utility, zapoznaj się z tymi artykułami.

środekX i środekY

Są to współrzędne środka wykrytego obiektu w pikselach.

Na zdjęciu czujnik AI Vision śledzący Blue Buckyball. Wokół Buckyballa znajduje się prostokąt śledzący, a etykieta powyżej pokazuje, że jego pozycja X wynosi 176, a pozycja Y 117. Środek prostokąta śledzenia jest zaznaczony, aby pokazać, że położenie jest mierzone od środka.

Współrzędne CenterX i CenterY ułatwiają nawigację i pozycjonowanie. Czujnik AI Vision ma rozdzielczość 320 x 240 pikseli.

Na zdjęciu czujnik AI Vision śledzący dwa niebieskie kostki. Kostki mają wokół siebie prostokąty śledzące, a jeden z nich znajduje się znacznie bliżej kamery. Bliższy ma pozycję Y równą 184, a dalszy ma pozycję Y równą 70.

Można zauważyć, że obiekt znajdujący się bliżej czujnika AI Vision będzie miał niższą współrzędną CenterY niż obiekt znajdujący się dalej.

W tym przykładzie, ponieważ środek pola widzenia czujnika AI Vision wynosi (160, 120), robot skręci w prawo, dopóki współrzędna środka X wykrytego obiektu nie będzie większa niż 150 pikseli, ale mniejsza niż 170 pikseli.

while True:
# Pobierz migawkę wszystkich sygnatur kolorów niebieskich i zapisz ją w vision_objects.
vision_objects = ai_vision_1.take_snapshot(ai_vision_1__Blue)

# Sprawdź, czy obiekt został wykryty na migawce przed pobraniem danych.
jeśli vision_objects[0].exists == True

# Sprawdź, czy obiekt nie znajduje się w centrum widoku czujnika AI Vision.
jeśli vision_objects[0].centerX > 150 i 170 > vision_objects[0].centerX:

# Kontynuuj skręcanie w prawo, aż obiekt znajdzie się w centrum widoku.
drivetrain.turn(RIGHT)
else:
drivetrain.stop()
wait(5, MSEC)

originX i originY

OriginX i OriginY to współrzędne w lewym górnym rogu wykrytego obiektu w pikselach.

Na zdjęciu czujnik AI Vision śledzący Blue Buckyball. Wokół Buckyballa znajduje się prostokąt śledzący, a etykieta powyżej pokazuje, że jego pozycja X wynosi 176, a pozycja Y 117. Lewy górny róg prostokąta śledzenia jest zaznaczony, aby pokazać, że położenie początkowe jest mierzone od jego lewego górnego rogu.

Współrzędne OriginX i OriginY ułatwiają nawigację i pozycjonowanie. Łącząc tę współrzędną z szerokością i wysokością obiektu, można określić rozmiar pola ograniczającego obiekt. Może to pomóc w śledzeniu ruchomych obiektów lub nawigowaniu pomiędzy obiektami.

szerokość i wysokość

Jest to szerokość lub wysokość wykrytego obiektu w pikselach.

Na zdjęciu czujnik AI Vision śledzący Blue Buckyball. Wokół Buckyballa znajduje się prostokąt śledzący, a etykieta powyżej pokazuje, że ma on szerokość 80 pikseli i wysokość 78 pikseli. Czerwone strzałki podświetlają prostokąt śledzący, aby pokazać jego szerokość i wysokość.

Pomiary szerokości i wysokości pomagają identyfikować różne obiekty. Na przykład Buckyball będzie miał większą wysokość niż Ring.

Na zdjęciu czujnik AI Vision śledzący dwa niebieskie kostki. Kostki mają wokół siebie prostokąty śledzące, a jeden z nich znajduje się znacznie bliżej kamery. Bliższy ma szerokość 144 i wysokość 113, a dalszy ma szerokość 73 i wysokość 84.

Szerokość i wysokość wskazują również odległość obiektu od czujnika wizyjnego AI. Mniejsze pomiary zwykle oznaczają, że obiekt jest dalej, podczas gdy większe pomiary sugerują, że jest bliżej.

W tym przykładzie szerokość obiektu jest wykorzystywana do nawigacji. Robot będzie zbliżał się do obiektu, aż osiągnie on określoną szerokość, po czym się zatrzyma.

while True:
# Pobierz migawkę wszystkich sygnatur kolorów niebieskich i zapisz ją w vision_objects.
vision_objects = ai_vision_1.take_snapshot(ai_vision_1__Blue)

# Sprawdź, czy obiekt został wykryty na migawce przed pobraniem danych.
jeśli vision_objects[0].exists == True

# Sprawdź, czy największy obiekt znajduje się blisko czujnika wizyjnego AI, mierząc jego szerokość.
jeśli vision_objects[0].width < 250:

# Podjedź bliżej obiektu, aż będzie szerszy niż 250 pikseli.
drivetrain.drive(FORWARD)
else:
drivetrain.stop()

wait(5, MSEC)

kąt

Animacja przedstawiająca czerwony i zielony kwadrat obracane jednocześnie w celu zademonstrowania 360 stopni wartości kąta.

Właściwość kąta jest dostępna tylko dlakodów kolorów iAprilTags.

Oznacza to, czy wykryty kod koloru lub AprilTag jest zorientowany inaczej.

Czujnik AI Vision śledzi kod koloru zielonego, a następnie niebieskiego. Na nagraniu widać zieloną kostkę ułożoną na niebieskiej kostce. Wartość kąta kodu koloru jest podświetlona i wynosi 87 stopni, co oznacza, że kod koloru jest zorientowany pionowo.

Można sprawdzić, czy robot jest zorientowany inaczej w stosunku do kodu koloru lubAprilTag i na tej podstawie podjąć decyzje nawigacyjne.

Czujnik AI Vision śledzi kod koloru zielonego, a następnie niebieskiego. Na nagraniu widać Zieloną Kostkę leżącą obok Niebieskiej Kostki, ale są one ustawione pod nietypowym kątem w porównaniu do czujnika. Wartość kąta kodu koloru jest podświetlona i wynosi 0 stopni, co oznacza, że kąta kodu koloru nie można odczytać.

Na przykład, jeśli kod koloru nie zostanie wykryty pod odpowiednim kątem, robot może nie być w stanie prawidłowo podnieść obiektu, który on przedstawia.

wynik

Właściwość wyniku jest używana w przypadku wykryciaklasyfikacji AI za pomocą czujnika wizyjnego AI.

Narzędzie AI Vision śledzi cztery obiekty: dwa BuckyBalls i dwa Rings. Każdy obiekt zostaje zidentyfikowany, zlokalizowany i opisany, co wskazuje na to, że system go śledzi. Narzędzie wyświetla także wynik klasyfikacji AI każdego obiektu; w tym przykładzie każdy wynik wynosi 99%.

Wynik pewności wskazuje, jak pewny jest czujnik AI Vision, że wykryje błąd. Na tym obrazku identyfikacja klasyfikacji AI tych czterech obiektów jest na poziomie 99% pewna. Za pomocą tego wyniku możesz mieć pewność, że Twój robot skupi się tylko na wykryciach o wysokiej pewności.

istnieje

Właściwość exists służy do wykrywania wykryty w ostatniej wykonanej migawce.

Umożliwia to sprawdzenie, czy w poprzedniej migawce zostały wykryte jakiekolwiek obiekty. Ta właściwość zwróci wartość True, jeśli obiekt istnieje, lub False, jeśli obiekt nie istnieje.

 

For more information, help, and tips, check out the many resources at VEX Professional Development Plus

Last Updated: