NVIDIA Jetson Nano: Wykrywanie i śledzenie pasów ruchu

Zachariah Peterson
|  Utworzono: kwiecień 9, 2020  |  Zaktualizowano: marzec 23, 2021
Samoloty stealth i kwantowy radar

Pojazdy autonomiczne powoli stają się ważną częścią przemysłu motoryzacyjnego. Wiele osób wierzy, że wkrótce w pełni autonomiczne pojazdy będą jeździć obok ludzi, a firmy technologiczne ścigają się, aby wdrożyć w pełni autonomiczne pojazdy. W grudniu 2018 roku Waymo, firma, która powstała z projektu samochodu autonomicznego Google, oficjalnie rozpoczęła swoją komercyjną usługę samochodów autonomicznych na przedmieściach Phoenix. Firmy takie jak May Mobility, Drive.ai i Uber podążają tą samą ścieżką.

Pojazdy autonomiczne mogą wydawać się wielką wizją, ale pojazdy półautonomiczne są już wśród nas. Nowe samochody Tesli mają funkcję Tesla Autopilot, która jest zdolna do rozpoznawania i śledzenia pasów ruchu, adaptacyjnej kontroli prędkości oraz samodzielnego parkowania. Umiejętność identyfikacji i śledzenia pasów na drodze jest jednym z wielu wymogów dla pojazdów bez kierowcy. Chociaż rozpoznawanie pasów może wydawać się trudnym problemem, możesz zacząć od rozwijania algorytmów rozpoznawania i śledzenia pasów z wykorzystaniem platformy sprzętowej NVIDIA Jetson Nano.

Wprowadzenie do Jetson Nano

Jetson Nano COM jest nieco większy niż Raspberry Pi 3, ale może uruchamiać sieci neuronowe równolegle, dysponując mocą 472 Gflops. To około 22 razy więcej niż Raspberry Pi 3 i jest wysoce energooszczędny, zużywając tylko 5 W. Ta płyta jest idealna do wbudowanych aplikacji AI działających na uproszczonym jądrze Linuxa. Posiada wystarczającą moc obliczeniową i pamięć na pokładzie do aplikacji przetwarzających obrazy i wideo wysokiej jakości. Kluczowe funkcje Jetson Nano to:

  • GPU: 128-rdzeniowy GPU oparty na architekturze NVIDIA Maxwell™
  • CPU: Czterordzeniowy ARM® A57
  • Kamera: MIPI CSI-2 DPHY lanes, 12x (Moduł) i 1x (Zestaw Deweloperski)
  • Pamięć: 4 GB 64-bitowe LPDDR4; 25,6 gigabajtów/sekundę
  • Łączność: Gigabit Ethernet
  • Wsparcie systemu operacyjnego: Linux dla Tegra®
  • Rozmiar modułu: 70mm x 45mm
  • Zestaw deweloperski to świetne narzędzie do testowania nowego algorytmu dla aplikacji przetwarzania obrazu/wizji komputerowej. Jeśli nie znasz platformy Jetson Nano, zapoznaj się z tym artykułem. W przeciwnym razie, czytaj dalej, aby zobaczyć, jak możesz łatwo wdrożyć potężną aplikację do przetwarzania obrazu do rozpoznawania pasów ruchu.
Developer kit for NVIDIA Jetson Nano
Zestaw deweloperski NVIDIA Jetson Nano. [Image source]

Rozpoznawanie pasów ruchu z Jetson Nano

Do tego projektu potrzebujemy modułu COM Jetson Nano lub płyty deweloperskiej oraz kamery CSI (kamera CSI Raspberry Pi v2 będzie odpowiednia). Pokażę tę aplikację, używając płyty deweloperskiej Nano, ale możesz łatwo zbudować niestandardową płytę bazową dla modułu COM Nano i wdrożyć tę aplikację. Kamera CSI zostanie podłączona do portu kamery na Jetson Nano, chociaż można użyć kamery USB lub kamer IP. Poniżej znajdują się wymagania niezbędne do pomyślnego zrealizowania tego projektu:

Sprzęt

  • NVIDIA Jetson Nano
  • Kamera CSI

Pakiety oprogramowania

  • Python
  • OpenCV
  • Nanocamera

Implementacja

Pełna implementacja tego projektu jest dostępna na GitHub. Przejdź przez kolejne kroki, aby uruchomić demonstrację tego projektu. Te kroki są ważnymi etapami przetwarzania obrazu, które mają na celu zwiększenie dokładności rozpoznawania pasów ruchu.

Percepcja

Pierwszym krokiem naszego systemu wykrywania pasów jest możliwość odczytywania na żywo obrazów z kamery. Dla nowych użytkowników pracujących z Jetson Nano, obsługa kamer może być kłopotliwa. W tym celu będziemy używać biblioteki NanoCamera. Ta biblioteka nie jest najlepszą opcją dla aplikacji na poziomie produkcyjnym, ale sprawdza się w prostszej aplikacji, jak ta pokazana tutaj.

Najpierw zainstaluj bibliotekę za pomocą pip:

.

Odczytywanie na żywo obrazu z kamery:

.

Usuwanie szumów za pomocą rozmycia

Aby obraz był gładki i pozbyć się niechcianych szumów, możemy zastosować rozmycie gaussowskie. Polega to na obliczeniu wartości każdego piksela jako ważonej średniej z otaczających pikseli.

Gaussian blur algorithm for lane recognition
Algorytm rozmycia Gaussa do wygładzania obrazu. [Źródło obrazu]

OpenCV zawiera funkcję do stosowania rozmycia gaussowskiego na obrazie:

.

Transformacja kolorów

Po zastosowaniu rozmycia gaussowskiego obraz nadal jest w przestrzeni kolorów RGB i musi zostać przekształcony do przestrzeni kolorów HSV. Separacja kolorów zostanie użyta do usunięcia niechcianych kolorów z obrazu. Gdy obraz znajdzie się w przestrzeni HSV, możemy "podnieść" wszystkie niepotrzebne kolory z obrazu, określając zakres skali szarości.

.

Operacje morfologiczne - dylatacja

Rozszerzanie dodaje piksele do granic obiektów na obrazie. Zastosowanie rozszerzenia do obrazu pomoże zamknąć wszelkie luźne przestrzenie w liniowych obrazach.

.

Canny (Detekcja krawędzi)

Do wykrywania linii jezdni możemy użyć techniki zwanej detekcją krawędzi Canny. Detekcja krawędzi Canny może być używana do ekstrakcji użytecznych informacji strukturalnych z obiektu. Biblioteka OpenCV dostarcza funkcję detekcji krawędzi Canny, która może być używana do wykrywania krawędzi na obrazie. Aby detekcja Canny działała, musimy dostarczyć minimalne i maksymalne progi. OpenCV zazwyczaj rekomenduje wartość (100, 200) lub (200, 400), więc używamy (200, 400).

.
Canny edge detection applied to a camera image
Obraz z zastosowaną detekcją krawędzi Canny. Zwróć uwagę na pasy pokazane na obrazie.

Izolacja Regionu Zainteresowania

Obraz wyjściowy detekcji krawędzi Canny zawiera pewien szum. Wszystkie informacje inne niż pasy na obrazie mogą być izolowane przez redukcję regionu zainteresowania. Podczas wykonywania rozpoznawania pasów ruchu i nawigacji, nie musimy koniecznie widzieć całego obrazu. Łatwym sposobem na to jest po prostu wycięcie górnej połowy obrazu.

ROI reduction for lane recognition
Oryginalny obraz (po lewej) i obraz z wyciętym regionem zainteresowania (po prawej).

Kod do redukcji regionu zainteresowania to:

.

Wykrywanie segmentów linii - Linie Hougha

Po zmniejszeniu regionu zainteresowania pasy są wyraźnie widoczne z czterema odrębnymi liniami. Jednak komputer nie wie, że te linie reprezentują granice dwóch pasów. Dlatego potrzebujemy sposobu na wydobycie współrzędnych dla tych linii pasów. Transformata Hougha to technika używana w przetwarzaniu obrazów do wydobywania cech takich jak linie, koła i elipsy. Może być użyta do znajdowania prostych linii z liczby pikseli, które wydają się tworzyć linię. Można to zrobić za pomocą funkcji HoughLinesP w OpenCV. Funkcja dopasowuje wiele linii przez wszystkie białe piksele i zwraca najbardziej prawdopodobny zestaw linii podlegający pewnym minimalnym ograniczeniom progowym.

Lines found during lane recognition
Wykrywanie linii z zastosowaniem transformacji Hougha.

Oto nasz kod, który wykrywa segmenty linii za pomocą transformacji Hougha. Większość używanych tutaj parametrów można określić metodą prób i błędów lub wybierając parametry z obrazów referencyjnych.

.

Połącz segmenty linii w dwie linie pasów

Wynik funkcji detect_line_segments() produkuje zestaw małych linii z koordynatami punktów końcowych (x1, y1) i (x2, y2). Musimy znaleźć sposób, aby połączyć je w tylko dwie linie dla lewego i prawego pasa, ale jak to osiągnąć? Jednym ze sposobów jest klasyfikacja tych segmentów linii według ich nachyleń.

Wszystkie linie lewego pasa mają dodatni nachylenie, a segmenty linii należące do prawego pasa mają nachylenie ujemne. Na podstawie tych dwóch nowych grup możemy wziąć średnią z nachyleń i przecięć segmentów linii, aby uzyskać nachylenia i przecięcia linii lewego i prawego pasa. Jest to zaimplementowane za pomocą funkcji

..

average_slope_intercept(). Funkcja make_points() jest funkcją pomocniczą dla funkcji average_slope_intercept(), która przyjmuje nachylenie i przecięcie linii, i zwraca punkty końcowe segmentu linii. W tym momencie mamy już linie pasów!

Co dalej

W tym momencie wynik z tej funkcji byłby wprowadzany do innego algorytmu kontrolującego prędkość i kierunek pojazdu. Aby to zrobić, można obliczyć kąt skrętu na podstawie wykrytych linii pasów, a następnie przekazać go do kontrolera PID, aby zminimalizować kąt skrętu i utrzymać pojazd na środku.

Chociaż zostało to wykonane z użyciem płytki rozwojowej Nano, ten sam kod stanowi punkt wyjścia do wdrożenia systemu w systemie przetwarzania obrazu wbudowanym dla środowiska produkcyjnego. Aby to zrobić, musisz zbudować prawdziwą płytę bazową dla Jetson Nano. Jest to najłatwiejsze, gdy używasz modularnych narzędzi do projektowania elektroniki w aplikacji Upverter Board Builder. Przyjmując modularne podejście, możesz łatwo dostosować płytę bazową dla Jetson Nano, kamery i inne czujniki do rozpoznawania pasów ruchu.

Modularne narzędzia do projektowania elektroniki w Upverter dają dostęp do szerokiej gamy standardowych w branży COM-ów i popularnych modułów bez konieczności pobierania lub instalowania nowego oprogramowania. Możesz tworzyć sprzęt gotowy do produkcji dla różnorodnych zastosowań, w tym rozpoznawania pasów ruchu i innych zadań przetwarzania obrazu z Jetson Nano, używając interfejsu użytkownika typu przeciągnij i upuść. Jeśli twój system wymaga dodatkowej funkcjonalności, możesz dołączyć łączność bezprzewodową, szereg czujników i wiele więcej.

Zapoznaj się z niektórymi historiami sukcesu klientów Gumstix lub skontaktuj się z nami już dziś, aby dowiedzieć się więcej o naszych produktach, narzędziach do projektowania i usługach.

About Author

About Author

Zachariah Peterson ma bogate doświadczenie techniczne w środowisku akademickim i przemysłowym. Obecnie prowadzi badania, projekty oraz usługi marketingowe dla firm z branży elektronicznej. Przed rozpoczęciem pracy w przemyśle PCB wykładał na Portland State University i prowadził badania nad teorią laserów losowych, materiałami i stabilnością. Jego doświadczenie w badaniach naukowych obejmuje tematy związane z laserami nanocząsteczkowymi, elektroniczne i optoelektroniczne urządzenia półprzewodnikowe, czujniki środowiskowe i stochastykę. Jego prace zostały opublikowane w kilkunastu recenzowanych czasopismach i materiałach konferencyjnych. Napisał ponad 2000 artykułów technicznych na temat projektowania PCB dla wielu firm. Jest członkiem IEEE Photonics Society, IEEE Electronics Packaging Society, American Physical Society oraz Printed Circuit Engineering Association (PCEA). Wcześniej był członkiem z prawem głosu w Technicznym Komitecie Doradczym INCITS Quantum Computing pracującym nad technicznymi standardami elektroniki kwantowej, a obecnie jest członkiem grupy roboczej IEEE P3186 zajmującej się interfejsem reprezentującym sygnały fotoniczne przy użyciu symulatorów obwodów klasy SPICE.

Powiązane zasoby

Powrót do strony głównej
Thank you, you are now subscribed to updates.