NVIDIA Jetson Nano: Rilevamento e Tracciamento della Corsia

Zachariah Peterson
|  Creato: aprile 9, 2020  |  Aggiornato: marzo 23, 2021
Aerei stealth e radar quantistico

I veicoli autonomi stanno lentamente diventando una parte importante dell'industria automobilistica. Molti credono che i veicoli completamente autonomi saranno presto in grado di guidare al fianco degli umani, e le aziende tecnologiche sono in gara per implementare veicoli completamente autonomi. Nel dicembre 2018, Waymo, l'azienda nata dal progetto di auto a guida autonoma di Google, ha ufficialmente avviato il suo servizio commerciale di auto a guida autonoma nei sobborghi di Phoenix. Aziende come May Mobility, Drive.ai e Uber stanno seguendo lo stesso percorso.

I veicoli autonomi possono sembrare una visione grandiosa, ma i veicoli semi-autonomi sono già tra noi. Le nuove auto Tesla hanno la funzione Tesla Autopilot, che è capace di riconoscimento e tracciamento della corsia, controllo adattivo della velocità di crociera e parcheggio autonomo. La capacità di identificare e tracciare le corsie sulla strada è uno dei molti prerequisiti per i veicoli senza conducente. Anche se il riconoscimento delle corsie può sembrare un problema difficile, puoi iniziare a sviluppare algoritmi di riconoscimento e tracciamento delle corsie con la piattaforma hardware NVIDIA Jetson Nano.

Introduzione a Jetson Nano

Il COM Jetson Nano è leggermente più grande di un Raspberry Pi 3, ma può eseguire reti neurali in parallelo con una potenza di 472 Gflops. Questo è circa 22 volte più potente del Raspberry Pi 3 ed è estremamente efficiente dal punto di vista energetico, consumando appena 5 W. Questa scheda è perfetta per applicazioni di intelligenza artificiale embedded che girano su un kernel Linux ridotto. Ha abbastanza potenza di elaborazione e memoria a bordo per applicazioni di elaborazione di immagini e video di alta qualità. Le caratteristiche chiave di Jetson Nano includono:

  • GPU: GPU NVIDIA Maxwell™ da 128-core
  • CPU: Quad-core ARM® A57
  • Camera: Corsie MIPI CSI-2 DPHY, 12x (Modulo) e 1x (Kit per Sviluppatori)
  • Memoria: 4 GB LPDDR4 a 64-bit; 25,6 gigabyte/secondo
  • Connettività: Ethernet Gigabit
  • Supporto OS: Linux per Tegra®
  • Dimensioni Modulo: 70mm x 45mm
  • Il kit per sviluppatori è uno strumento fantastico per testare un nuovo algoritmo per applicazioni di visione artificiale/elaborazione di immagini. Se non sei familiare con la piattaforma Jetson Nano, dai un'occhiata a questo articolo. Altrimenti, continua a leggere per vedere come puoi facilmente implementare una potente applicazione di elaborazione di immagini per il riconoscimento delle corsie.
Developer kit for NVIDIA Jetson Nano
Kit di sviluppo NVIDIA Jetson Nano. [Image source]

Riconoscimento delle Corsie con Jetson Nano

Per questo progetto, abbiamo bisogno di un Jetson Nano COM o di una scheda di sviluppo e di una telecamera CSI (una telecamera CSI Raspberry Pi v2 funziona bene). Mostrerò questa applicazione utilizzando la scheda di sviluppo Nano, ma è possibile costruire facilmente una baseboard personalizzata per un Nano COM e distribuire questa applicazione. La telecamera CSI sarà collegata alla porta della telecamera sul Jetson Nano, anche se si potrebbe utilizzare una telecamera USB o telecamere IP. Di seguito sono riportati i requisiti necessari per far funzionare con successo questo progetto:

Hardware

  • NVIDIA Jetson Nano
  • Telecamera CSI

Pacchetti Software

  • Python
  • OpenCV
  • Nanocamera

Implementazione

L'implementazione completa di questo progetto può essere trovata su GitHub. Segui i passaggi successivi per ottenere una demo di questo progetto funzionante. Questi passaggi sono importanti per il processo di elaborazione delle immagini che è inteso a rendere il riconoscimento delle corsie più accurato.

Percezione

Il primo passo del nostro sistema di rilevamento delle corsie consiste nella capacità di leggere immagini in diretta dalla telecamera. Per i nuovi utenti che lavorano con Jetson Nano, gestire le telecamere potrebbe risultare complicato. Per questo, utilizzeremo la libreria NanoCamera. Questa libreria non è l'opzione migliore per un'applicazione di livello produttivo, ma funziona per un'applicazione più semplice come quella mostrata qui.

Prima di tutto, installa la libreria con pip:

.

Leggere l'immagine in diretta dalla telecamera:

.

Rimuovere il Rumore con la Sfocatura

Per rendere l'immagine più fluida e rimuovere il rumore indesiderato, possiamo applicare una sfocatura gaussiana. Questo comporta il calcolo del valore di ogni pixel come media ponderata dei pixel circostanti.

Gaussian blur algorithm for lane recognition
Algoritmo di sfocatura gaussiana per il lisciamento delle immagini.

OpenCV include una funzione per applicare la sfocatura gaussiana a un'immagine:

.

Trasformazione del Colore

Dopo la sfocatura gaussiana, l'immagine è ancora in RGB e deve essere trasformata nello spazio colore HSV. La separazione dei colori verrà utilizzata per rimuovere i colori indesiderati dall'immagine. Una volta che l'immagine è in HSV, possiamo "eliminare" tutti i colori non necessari dall'immagine specificando un intervallo di scala di grigi.

.

Operazioni Morfologiche - Dilatazione

La dilatazione aggiunge pixel ai contorni degli oggetti in un'immagine. Applicare la dilatazione all'immagine aiuterà a chiudere eventuali spazi aperti nelle immagini delle linee.

.

Canny (Rilevamento dei Bordi)

Per rilevare le linee di corsia, possiamo utilizzare una tecnica chiamata rilevamento dei bordi di Canny. Il rilevamento dei bordi di Canny può essere utilizzato per estrarre informazioni strutturali utili da un oggetto. La libreria OpenCV fornisce una funzione di rilevamento dei bordi di Canny che può essere utilizzata per rilevare i bordi in un'immagine. Perché il rilevamento di Canny funzioni, dobbiamo fornire soglie minime e massime. OpenCV di solito raccomanda il valore di (100, 200) o (200, 400), quindi stiamo utilizzando (200, 400).

.
Canny edge detection applied to a camera image
Immagine con rilevamento dei bordi di Canny. Notare le corsie mostrate nell'immagine.

Isolare la Regione di Interesse

L'immagine di output del bordo di Canny contiene del rumore. Tutte le informazioni diverse dalle corsie nell'immagine possono essere isolate riducendo la regione di interesse. Quando si esegue il riconoscimento delle corsie e la navigazione, non è necessariamente necessario vedere l'intera immagine. Un modo semplice per fare ciò è semplicemente ritagliare la metà superiore dell'immagine.

ROI reduction for lane recognition
Immagine originale (a sinistra) e immagine con regione di interesse ritagliata (a destra).

Il codice per ridurre la regione di interesse è:

.

Rilevare Segmenti di Linea - Linee di Hough

Dopo che la regione di interesse è stata ridotta, le corsie sono chiaramente visibili con quattro linee distinte. Tuttavia, il computer non sa che queste linee rappresentano i confini di due corsie. Quindi, abbiamo bisogno di un modo per estrarre le coordinate per queste linee delle corsie. Una trasformata di Hough è una tecnica utilizzata nel trattamento delle immagini per estrarre caratteristiche come linee, cerchi ed ellissi. Può essere utilizzata per trovare linee rette da un numero di pixel che sembrano formare una linea. Questo può essere fatto con la funzione HoughLinesP in OpenCV. La funzione adatta molte linee attraverso tutti i pixel bianchi e restituisce l'insieme più probabile di linee soggetto ad alcuni vincoli di soglia minima.

Lines found during lane recognition
Line detection with a Hough transform applied.

Ecco il nostro codice che rileva segmenti di linea utilizzando una trasformata di Hough. La maggior parte dei parametri utilizzati qui può essere determinata tramite tentativi ed errori o selezionando parametri da immagini di riferimento.

.

Combinare i segmenti di linea in due linee di corsia

L'output della funzione detect_line_segments() produce un insieme di piccole linee con coordinate dei punti finali (x1, y1) e (x2, y2). Abbiamo bisogno di trovare un modo per combinarle in solo due linee per le linee di corsia sinistra e destra, ma come possiamo fare ciò? Un modo è classificare questi segmenti di linea in base alle loro pendenze.

Tutte le linee della corsia di sinistra hanno una pendenza positiva, e i segmenti di linea appartenenti alla corsia di destra hanno una pendenza negativa. Basandoci su questi due nuovi gruppi, possiamo prendere la media delle pendenze e delle intercette dei segmenti di linea per ottenere le pendenze e le intercette delle linee delle corsie di sinistra e destra. Questo è implementato con la funzione average_slope_intercept():

..

La funzione make_points() è una funzione di supporto per la funzione average_slope_intercept(), che prende la pendenza e l'intercetta di una linea, e restituisce i punti finali del segmento di linea. A questo punto, abbiamo ora le linee delle corsie!

Cosa c'è dopo

A questo punto, l'output di questa funzione sarebbe l'input per un altro algoritmo per controllare la velocità e la direzione del veicolo. Per fare ciò, può essere calcolato un angolo di sterzata dalle linee delle corsie rilevate e poi passato a un controller PID per minimizzare l'angolo di sterzata e mantenere il veicolo centrato.

Sebbene ciò sia stato fatto con una scheda di sviluppo Nano, lo stesso codice fornisce un punto di partenza per implementare un sistema in un sistema di elaborazione immagini incorporato per un ambiente di produzione. Per fare ciò, avrai bisogno di costruire una vera e propria baseboard per il Jetson Nano. Questo è più semplice quando si utilizzano gli strumenti di progettazione elettronica modulare nell'applicazione Upverter Board Builder. Adottando un approccio modulare, puoi facilmente personalizzare una baseboard per un Jetson Nano, telecamere e altri sensori per il riconoscimento delle corsie.

Gli strumenti di progettazione elettronica modulare in Upverter ti danno accesso a una vasta gamma di COM standard del settore e moduli popolari senza scaricare o installare alcun nuovo software. Puoi creare hardware di grado produttivo per una varietà di applicazioni, inclusi il riconoscimento delle corsie e altri compiti di elaborazione delle immagini con Jetson Nano, utilizzando un'interfaccia utente drag-and-drop. Se il tuo sistema necessita di funzionalità aggiuntive, puoi includere connettività wireless, un array di sensori e molto altro.

Dai un'occhiata ad alcune storie di successo dei clienti Gumstix o contattaci oggi per saperne di più sui nostri prodotti, strumenti di progettazione e servizi.

Sull'Autore

Sull'Autore

Zachariah Peterson ha una vasta esperienza tecnica nel mondo accademico e industriale. Prima di lavorare nel settore dei PCB, ha insegnato alla Portland State University. Ha condotto la sua Fisica M.S. ricerche sui sensori di gas chemisorptivi e il suo dottorato di ricerca in fisica applicata, ricerca sulla teoria e stabilità del laser casuale. Il suo background nella ricerca scientifica abbraccia temi quali laser a nanoparticelle, dispositivi semiconduttori elettronici e optoelettronici, sistemi ambientali e analisi finanziaria. Il suo lavoro è stato pubblicato in diverse riviste specializzate e atti di conferenze e ha scritto centinaia di blog tecnici sulla progettazione di PCB per numerose aziende. Zachariah lavora con altre società del settore PCB fornendo servizi di progettazione e ricerca. È membro della IEEE Photonics Society e dell'American Physical Society.

Risorse correlate

Tornare alla Pagina Iniziale
Thank you, you are now subscribed to updates.