La scheda Nvidia Jetson Nano dispone di una uscita HDMI digitale su scheda attraverso input CSI. Ma è possibile gestire una webcam via USB?
I kit per sviluppatori NVIDIA Jetson supportano l’integrazione della telecamera a connessione diretta utilizzando due metodi principali. Il primo consiste nell’utilizzare un’interfaccia seriale per fotocamera MIPI (CSI). La MIPI Alliance è il nome del gruppo industriale che sviluppa specifiche tecniche per l’ecosistema mobile. Su schede Jetson come il Nano, questo potrebbe essere un modulo sensore come la familiare fotocamera Raspberry Pi V2 basata sul sensore di immagine Sony IMX219.
Il secondo tipo di periferica è una fotocamera che si collega tramite una porta USB, ad esempio una webcam. In questo articolo, liberamente ispirato dal lavoro di JetsonHacks, parleremo di come collegare una fotocamera USB.
V4L2
Al loro interno, le schede Nvidia Jetson utilizzano il modulo del kernel Linux chiamato Video Four Linux (version 2) (V4L2). V4L2 è una parte di Linux, non specifico delle schede Jetson. Chi utilizza ad esempio software come OBS Studio sotto Linux trovrà sicuramente qualche riferimento a tale modulo nella sezione di configurazione video. V4L2 esegue un gran numero di operazioni, ma in questo articolo ci concentreremo sulla cattura video da obiettivo esterno.
CSI, ovvero…
Come accennato in precedenza, ci sono due modi principali per acquisire video da telecamere direttamente collegate al Jetson. Il primo, tramite le porte CSI, utilizza libargus che è una libreria specifica di Jetson che collega il sensore della fotocamera al processore del segnale di immagine SoC Tegra (ISP). L’hardware dell’ISP esegue un’ampia varietà di attività di elaborazione delle immagini, come il debayering di un’immagine, gestisce il bilanciamento del bianco, il contrasto e così via. Non si trata di una operazione banale, e richiede strumenti e competenze speciali per produrre video di alta qualità.
Un minimo di attenzione va posta nell scelta della scheda. Nvidia ha infatti rilasciato diversi developer kit per Jetson Nano. Oltre alla classica opzione con 2GB anziché 4GB di memoria RAM a bordo, ricordiamo anche che la differenza tra versione A02 e B01 consiste nella possibilità di utilizzare due porte CSI per la visione stereo.
USB, vale a dire…
Il video da una fotocamera USB prende un percorso diverso. Il driver USB Video Class (uvcvideo) è un modulo del kernel Linux. Il modulo uvcvideo supporta i controlli dell’unità di estensione (controlli XU) su V4l2 tramite la mappatura e un’interfaccia ioctl specifica del driver. I controlli di input/output (ioctls) sono l’interfaccia per l’API V4L2. Per ulteriori informazioni: il driver Linux USB Video Class (UVC).
Ciò significa che un driver in un dispositivo con fotocamera USB può specificare diversi controlli dipendenti dal dispositivo, senza che uvcvideo o V4l2 debbano comprenderli in modo specifico. Il driver della fotocamera USB consegna un codice per una funzione, insieme a un intervallo di valori possibili, a uvcvideo. Quando l’utente specifica un valore di funzione per la telecamera, uvcvideo controlla i limiti dell’argomento e lo passa alla telecamera insieme al codice della funzione. La fotocamera quindi si regola di conseguenza.
Tool di sviluppo
Nell’architettura della fotocamera Jetson, un flusso della fotocamera V4L2 è disponibile per un’applicazione in due modi diversi. Il primo modo è utilizzare l’interfaccia V4L2 direttamente attraverso i controlli ioctl o tramite una libreria che dispone di un backend V4L2. Il secondo modo è utilizzare GStreamer che è un framework di elaborazione multimediale.
ioctl
La libreria più popolare su Jetson per l’interfacciamento con le telecamere V4L2 tramite ioctl su Jetson è il repository Github dusty-nv/jetson-utils. Dustin Franklin di NVIDIA ha utility Linux wrapper C/C++ per fotocamera, codec, GStreamer, CUDA e OpenCV nel repository.
GStreamer
GStreamer è una parte importante dell’architettura della fotocamera Jetson. L’architettura GStreamer è estensibile. NVIDIA implementa elementi DeepStream che, una volta aggiunti alla pipeline GStreamer, forniscono analisi di deep learning di un flusso video. NVIDIA chiama questo Intelligent Video Analytics.
GStreamer dispone di strumenti che gli consentono di funzionare come un’applicazione autonoma. Ci sono anche librerie che consentono a GStreamer di far parte di un’applicazione. GStreamer può essere integrato in un’applicazione in diversi modi, ad esempio utilizzando OpenCV. Ad esempio, la popolare libreria Python su Github NVIDIA-AI-IOT/jetcam utilizza OpenCV per gestire la fotocamera e il display.
OpenCV
OpenCV è un framework popolare per la creazione di applicazioni di visione artificiale. Molte persone usano OpenCV per gestire l’input della telecamera e visualizzare il video in una finestra usando poche righe di codice. OpenCV è flessibile. Nella distribuzione Jetson predefinita, OpenCV può utilizzare un’interfaccia V4L2 (ioctl) o un’interfaccia GStreamer. Inoltre, OpenCV può implementare display GTK+ o QT per la grafica.
Note USB
Come accennato nel video, la larghezza di banda USB per Jetson potrebbe non corrispondere alle aspettative. Ad esempio su Jetson Nano e Xavier NX, ci sono 4 porte USB 3. Tuttavia, le porte USB sono collegate a un hub internamente sulle schede Jetson Jetson. Ciò significa che saremo limitati alla velocità dell’hub, che è inferiore a quella di 4 porte USB super veloci.
Inoltre, per risparmiare energia, Jetson implementa quella che viene chiamata “sospensione automatica USB”. Questo spegne una porta USB quando non è in uso. La maggior parte delle fotocamere USB lo gestisce correttamente e non consente la sospensione automatica della porta USB. Tuttavia, occasionalmente potremmo incontrare una fotocamera che non lo fa.
Considerazioni finali
Come abbiamo visto, lavorare su video con le schede Jetson è sempre divertente (tempo fa abbiamo presentato un sistema per codifica FFMPEG in parallelo con Nano). Oggi l’articolo di JetsonHacks ci ha mostrato le differenze hardware e software insite nell’uso di una videocamera esterna attraverso USB rispetto alla classica CSI fornita a corredo dello Starter Kit.
Nei prossimi articoli vedremo come confrontare uno script OpenCV che giri su Raspberry PI e su Jetson Nano.
Link utili
- Jetson Nano 2GB
- Jetson Nano 4GB developement kit
- Camera modules supporting Jetson Nano
- Metal case per Jetson Nano
- Touch-screen display per Jetson Nano
Join our groups onTelegram…