Kodowanie z wykorzystaniem czujnika wizyjnego AI w VEXcode V5 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 wizyjnego AI 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

Trzy kwadratowe znaczniki identyfikacyjne oznaczone identyfikatorami 0, 9 i 3, dla każdego z nich podano współrzędne i wymiary wyświetlone białym tekstem. ID 0 znajduje się po lewej stronie, ID 9 po prawej, a ID 3 na dole pośrodku. Każdy znacznik ma niepowtarzalny czarno-biały wzór wewnątrz kwadratu.

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.

Na obrazku oznaczono dwie piłki i dwa pierścienie, wraz z etykietami wskazującymi ich położenie, rozmiar i wynik. Czerwona kula jest po lewej stronie, niebieska kula po prawej stronie, zielony pierścień jest na dole po lewej stronie, a czerwony pierścień jest na dole po prawej stronie. Każdy obiekt jest zaznaczony białym polem, a szczegóły, takie jak współrzędne X, Y, szerokość, wysokość i wynik 99%, wyświetlane są białym tekstem.

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.

Niebieski Buckyball śledzony przez system komputerowego przetwarzania obrazu. Obiekt jest otoczony białym kwadratem, a wewnątrz niego znajduje się mniejszy czerwony kwadrat otaczający w środku biały krzyż. W lewym górnym rogu zdjęcia znajduje się etykieta informująca, że obiekt jest niebieski, ma współrzędne X:176, Y:117 i wymiary W:80, H:78.

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

Dwa niebieskie obiekty w kształcie sześcianu śledzone przez system wizyjny. Górny obiekt oznaczony jest współrzędnymi X:215, Y:70 i wymiarami W:73, H:84, białym konturem i białym krzyżem w środku. Dolny obiekt oznaczony jest współrzędnymi X:188, Y:184 i wymiarami W:144, H:113. Obiekt ten jest również obramowany na biało i ma w środku biały krzyż.

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.

Niebieski Buckyball śledzony przez system wizyjny. Obiekt jest otoczony białym konturem, a w jego środku znajduje się biały krzyż. Etykieta w lewym górnym rogu wskazuje, że obiekt ma kolor niebieski, a także współrzędne X:176, Y:117 i wymiary W:80, H:78. Mały czerwony kwadrat podświetla lewy górny róg obiektu.

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 widoczna jest niebieska piłka Buckyball otoczona białym kwadratowym konturem. W lewym górnym rogu znajduje się etykieta wskazująca, że jest to obiekt niebieski o współrzędnych X:176, Y:117 i wymiarach W:80, H:78. Czerwone strzałki podkreślają szerokość i wysokość obiektu.

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

Dwa niebieskie obiekty w kształcie sześcianu śledzone przez system rozpoznawania obrazu. Górny sześcian ma biały obrys z etykietą wskazującą jego pozycję jako X:215, Y:70 i wymiary W:73, H:84. Dolny sześcian ma podobny biały kontur, na etykiecie widnieje X:188, Y:184 i wymiary W:144, H:113. Na każdym sześcianie znajduje się biały krzyż, który prawdopodobnie wskazuje punkt centralny śledzenia. Etykiety zawierają informacje o pomiarach i śledzeniu danych dla każdego obiektu.

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

Obracający się plik GIF przedstawiający czerwone i zielone bloki. Gdy bloki zostaną ustawione idealnie poziomo od koloru czerwonego do zielonego, ich kąt wynosi 0 stopni. Jeśli czerwony blok znajduje się pionowo nad zielonym blokiem, to jego kąt wynosi 90 stopni. Jeżeli bloki są poziomo ułożone w odcieniach zieleni i czerwieni, to kąt wynosi 180 stopni. Jeśli zielony blok znajduje się pionowo nad czerwonym blokiem, to kąt wynosi 20 stopni.

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.

Stos dwóch sześcianów, jeden zielony na górze, a drugi niebieski na dole, śledzony przez system wizyjny. Oba sześciany są otoczone białym konturem, a na środku zielonego sześcianu znajduje się biały krzyż. Etykieta na dole obrazu wyświetla Green_Blue A:87°, wskazując wykryte kolory i pomiar kąta. Poniżej podano współrzędne X:117, Y:186, o wymiarach W:137, H:172, oznaczających położenie i rozmiar ułożonych w stos sześcianów w ramce.

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

Dwa sześciany, jeden zielony i jeden niebieski, umieszczone obok siebie i śledzone przez system wizyjny. Oba sześciany są otoczone białym konturem, a w środku znajduje się biały krzyż. Etykieta w lewym górnym rogu wskazuje Green_Blue A:0°, odnosząc się do wykrytych kolorów i pomiaru kąta. Poniżej podano współrzędne X:150, Y:102, o wymiarach W:179, H:109, które określają położenie i rozmiar kostek w ramce.

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.

Na zdjęciu widać cztery obiekty śledzone przez system wizyjny: dwie kule i dwa pierścienie. Czerwona piłka ma współrzędne X:122, Y:84, W:67, H:66 i wynik 99%. Niebieska kula ma X:228, Y:86, W:70, H:68 i wynik 99%. Zielony pierścień ma współrzędne X:109, Y:186, W:98, H:92 i wynik 99%. Czerwony pierścień jest oznaczony jako X:259, Y:187, W:89, H:91 i ma wynik 99%. Każdy obiekt jest obramowany na biało, co wskazuje na dokładność śledzenia.

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: