Korzystanie z czujnika wizyjnego AI w VEXcode EXP Python

W tym artykule omówiono funkcje dostępne do korzystania z czujnika wizyjnego AI w języku Python wraz z prostymi instrukcjami, jak z nich korzystać. Poznasz cztery kroki w procesie korzystania z AI Vision Sensor – pozyskiwanie danych, sprawdzanie ilości uzyskanych obiektów, wybieranie, jakiego obiektu z danych użyć i jakie dane z obiektu wyciągnąć.

Uzyskaj dane wizualne za pomocą czujnika wizyjnego AI

Aby zebrać informacje z otoczenia, czujnik wizyjny AI tworzy obraz tego, na co aktualnie patrzy. Wszelkie obiekty, które identyfikuje z określonympodpisem wizualnym są umieszczane w krotce, która może być następnie używana przez inne funkcje.

Zrób zdjęcie

Używając polecenia take_snapshot , będziesz musiał utworzyć zmienną do przechowywania utworzonej przez nią krotki. Dowolnepodpisów wizualnych będzie musiało zostać skonfigurowanych, zanim będzie można ich użyć jako parametru. W przypadku korzystania z tej funkcji parametrem sygnatury jest nazwa czujnika, podwójne podkreślenie i nazwa podpisu wizualnego.narzędzie exm.PNG

Vision_objects = ai_vision_6.take_snapshot(ai_vision_6__Blue)
Vision_objects = ai_vision_6.take_snapshot(ai_vision_6__Red)
Vision_objects = ai_vision_6.take_snapshot(ai_vision_6__Green)

Opcje dla Twojego podpisu wizualnego zostaną również automatycznie wypełnione w kodzie VEX po rozpoczęciu wpisywania początku nawiasów.

Przykład

W tym przykładzie zmienna Vision_objects przechowuje krotkę zawierającą wykryte sygnatury wizualne z czujnika wizyjnego AI o nazwie ai_vision_6. Wyświetla liczbę wykrytych obiektów i rejestruje nową migawkę co 0,5 sekundy.

while True: 

# Zrób migawkę, aby utworzyć krotkę wykrytych obiektów
Vision_objects = ai_vision_6.take_snapshot(ai_vision_6__Blue)

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

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

Określ, ile obiektów zostało wykrytych

Polecenie len może być użyte z krotkami. Można to wykorzystać do sprawdzenia, ile obiektów polecenie take_snapshot umieściło w krotce.

Najlepszą praktyką jest zawsze upewnienie się, że wykryto obiekt, zanim spróbujesz wyciągnąć jakiekolwiek informacje ze migawki. Aby to zrobić, użyj polecenia len ze zmienną przechowującą krotkę.

len(obiekty_wizji) > 0

Przykład

W tym przykładzie zmienna Vision_objects przechowuje krotkę zawierającą wykryte sygnatury wizualne z czujnika wizyjnego AI o nazwie ai_vision_6. Wyświetla liczbę wykrytych obiektów i rejestruje nową migawkę co 0,5 sekundy. Jeśli jednak wykrył obiekt, wyświetli liczbę wykrytych obiektów.

while True: 
# Zrób migawkę, aby utworzyć krotkę wykrytych obiektów
= ai_vision_6.take_snapshot(ai_vision_6__Blue)

# Wyczyść ekran/zresetuj, abyśmy mogli wyświetlić nowe informacje
brain.screen.clear_screen()
brain. screen.set_cursor(1, 1)

if len(vision_objects) > 0:
# Wyświetla liczbę znalezionych obiektów
brain.screen.next_row()
brain.screen.print("liczba obiektów:", len(vision_objects ))
czekania (0,5, SEKUND)

Używając polecenia len z krotką, możesz także zobaczyć, ile obiektów zostało wykrytych.

Wybierz obiekt, z którego chcesz pobrać dane

Istnieją dwie metody wyodrębniania danych z krotki. Jedno podejście polega na bezpośrednim pobraniu informacji z największego obiektu wykrytego podczas ostatniego użycia polecenia take_snapshot przy użyciu funkcji ai.vision.largest_object(). Druga metoda polega na określeniu konkretnej zmiennej i indeksu obiektu.

ai.vision.largest_object()

ai.vision.largest_object() to funkcja pomocnicza umożliwiająca dostęp do największego obiektu w krotce, ale będzie działać tylko z najnowszym zrzutem ekranu.

while True: 
# Zrób migawkę, aby utworzyć krotkę wykrytych obiektów
= ai_vision_6.take_snapshot(ai_vision_6__Blue)

# Wyczyść ekran/zresetuj, abyśmy mogli wyświetlić nowe informacje
brain.screen.clear_screen()
brain. screen.set_cursor(1, 1)

# Przed pobraniem danych sprawdź, czy obiekt istnieje
if len(vision_objects) > 0:
brain.screen.print(Center X: ", ai_vision.largest_object().centerX)
else :
brain.screen.print("brak obiektu")
czekaj(0,5, SEKUND)

W tym przykładzie kod sprawdza, czy obiekt istnieje przed użyciem funkcji ai.vision.largest_object() w celu zwrócenia właściwości .centerX największego wykrytego obiektu i wydrukowania go.

wizja_obiektów[0]

Inną metodą pobierania danych z krotki jest bezpośrednie wywołanie zmiennej przechowującej krotkę. W nawiasie podaj indeks obiektu, z którego chcesz wyodrębnić dane. Zwrócona krotka obiektów zawsze wyświetla największy obiekt jako pierwszy z indeksem 0. Następnie obiekty są uporządkowane od największego do najmniejszego.

while True: 
# Zrób migawkę, aby utworzyć krotkę wykrytych obiektów
= ai_vision_6.take_snapshot(ai_vision_6__Blue)

# Wyczyść ekran/zresetuj, abyśmy mogli wyświetlić nowe informacje
brain.screen.clear_screen()
brain. screen.set_cursor(1, 1)

# Przed pobraniem danych sprawdź, czy obiekt istnieje
if len(vision_objects) > 0:
brain.screen.print(Center X: ", Vision_object[0].centerX)
else:
mózg.screen.print("brak obiektu")
czekaj(0,5, SEKUND)

W tym przykładzie kod sprawdza, czy obiekt istnieje przed użyciem funkcji [0] w celu zwrócenia właściwości .centerX obiektu 0 indeksu i wydrukowania go.

Wybierz, jakie dane mają zostać pobrane z obiektu

Z każdego obiektu można wywołać osiem właściwości.

  • .wysokość
  • .szerokość
  • .centrumX
  • .centrumY
  • .pochodzenieX
  • .pochodzenieY
  • .kąt
  • .istnieje

.wysokość

Właściwość .height zwraca wysokość wykrytego obiektu w pikselach.

Użyj tego kodu, aby zwrócić właściwość .height:

obiekty_wizji[0].wysokość

Właściwość .height zwróci wartość z zakresu od 0 do 240 pikseli.

.szerokość

Właściwość .width zwraca szerokość wykrytego obiektu w pikselach.

Użyj tego kodu, aby zwrócić właściwość .width:

obiekty_wizji[0].szerokość

Właściwość .width zwróci wartość z zakresu od 0 do 320.

.centrumX

Właściwość podaje współrzędną X środka wykrytego podpisu wizualnego.

Użyj tego kodu, aby zwrócić właściwość .centerX:

Vision_objects[0].centerX

Właściwość .centerX zwróci liczbę z zakresu od 0 do 320.

.centrumY

Właściwość podaje współrzędną Y środka wykrytego podpisu wizualnego.

Użyj tego kodu, aby zwrócić właściwość .centerY:

wizja_obiektów[0].centerY

Właściwość .centerY zwróci liczbę z zakresu od 0 do 240.

.pochodzenieX

Właściwość .originX raportuje współrzędną X lewego górnego rogu wykrytego podpisu wizualnego.

Użyj tego kodu, aby zwrócić właściwość .originX:

wizja_obiektów[0].originX

Właściwość .originXzwróci liczbę z zakresu od 0 do 320.

.pochodzenieY

Właściwość .originY raportuje współrzędną Y lewego górnego rogu wykrytego podpisu wizualnego.

Użyj tego kodu, aby zwrócić właściwość .originY:

Vision_objects[0].originY

Właściwość .originYzwróci liczbę z zakresu od 0 do 240.

.kąt

Właściwość .angle zwraca wartość kąta kodu koloru .

Użyj tego kodu, aby zwrócić właściwość .angle:

obiekty_wizji[0].kąt

Właściwość .angle zwraca wykrytą orientację kodu koloru w zakresie od 0 do 359,99 stopni.

.istnieje

.exists to właściwość logiczna, która zwraca wartość true, jeśli jest to prawidłowy obiekt. 

Zwróci wartość false, jeśli obiekt jest nieprawidłowy, na przykład w przypadku użycia ujemnej liczby całkowitej. Jeśli obiekt jest nieprawidłowy, wszystkie inne właściwości zwrócą 0 jako wartość.

while True: 
# Zrób migawkę, aby utworzyć krotkę wykrytych obiektów
= ai_vision_6.take_snapshot(ai_vision_6__Blue)
# wyczyść ekran/zresetuj, abyśmy mogli wyświetlić nowe informacje
brain.screen.clear_screen()
brain.screen .set_cursor(1, 1)

ifvision_objects[0].exists:
brain.screen.print("x:",vision_objects[0].centerX)
else:
brain.screen.print("brak obiektu" )
czekania (0,1, SEKUND)

W tym przykładzie kod sprawdza właściwość .exists i jeśli zwróci wartość true, wydrukuje wartość właściwości .centerX w mózgu. Jeśli właściwość .exists zwróci wartość false, wyświetli informację, że nie ma obiektu.

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

Last Updated: