Object recognition su Raspberry Pi Zero 2W con YOLO

YOLO

L’object recognition su dispositivi embedded è oggi una delle applicazioni più interessanti nel campo della computer vision. Il progetto analizzato mostra come sia possibile implementare un sistema completo di riconoscimento oggetti utilizzando una scheda compatta come il Raspberry Pi Zero 2W, combinando modelli leggeri, librerie open source e strumenti ben consolidati, in particolare usando YOLO.

L’approccio adottato è pratico e diretto: si basa su modelli ONNX ottimizzati e sull’utilizzo di YOLOv5n, una versione particolarmente leggera dell’algoritmo YOLO, capace di offrire un buon compromesso tra prestazioni e consumo di risorse.

Architettura del sistema e overview di YOLO

Il progetto si fonda su una configurazione hardware semplice ma efficace. Il Raspberry Pi Zero 2W rappresenta il cuore del sistema, supportato da componenti essenziali come una camera collegata tramite interfaccia CSI-2 e, opzionalmente, un display per la visualizzazione locale.

Dal punto di vista software, l’ambiente è costruito attorno a Python, con l’utilizzo di OpenCV per la gestione delle immagini e onnxruntime per l’esecuzione del modello neurale.

Un aspetto interessante è la possibilità di lavorare sia in modalità headless via SSH, limitandosi all’alimentazione, sia con configurazione completa locale tramite HDMI e periferiche USB. Questa flessibilità rende il progetto facilmente adattabile a diversi scenari.

ONNX: interoperabilità e portabilità

Il formato ONNX (Open Neural Network Exchange) svolge un ruolo centrale. Si tratta di uno standard aperto che consente di rappresentare modelli di machine learning in modo indipendente dal framework di origine.

Questo significa che un modello addestrato in un ambiente può essere esportato e utilizzato altrove senza dover essere riscritto. Nel contesto del progetto, ONNX permette di eseguire il modello YOLOv5n direttamente sul Raspberry Pi, sfruttando un runtime ottimizzato.

La struttura basata su grafi computazionali rende il modello scalabile e compatibile con diversi backend, facilitando l’integrazione in sistemi embedded.

YOLO

YOLO: rilevamento oggetti in tempo reale

YOLO (You Only Look Once) rappresenta uno degli approcci più diffusi per il rilevamento degli oggetti. Nato circa dieci anni fa, è evoluto attraverso numerose versioni fino ad arrivare a implementazioni moderne estremamente efficienti.

La caratteristica principale di YOLO è l’elaborazione in un unico passaggio: l’immagine viene analizzata una sola volta e il modello restituisce contemporaneamente bounding box e classi degli oggetti. Questo lo distingue dai metodi a due stadi, che separano il rilevamento delle regioni dalla classificazione.

Il funzionamento si basa sulla suddivisione dell’immagine in una griglia S×S. Per ogni cella, la rete predice più bounding box e un punteggio di confidenza che indica sia la presenza dell’oggetto sia la qualità della previsione. A questo si aggiungono le probabilità di appartenenza alle diverse classi.

Un elemento chiave è l’uso della metrica IoU (Intersection over Union), che misura quanto la bounding box predetta si sovrappone a quella reale. Questa informazione contribuisce al calcolo della confidenza.

Dal punto di vista architetturale, YOLO è basato su una rete convoluzionale profonda che estrae caratteristiche e produce direttamente le predizioni. La funzione di perdita combina tre componenti: classificazione, localizzazione e confidenza, rendendolo un tipico esempio di apprendimento multi-task.

Grazie alla sua velocità, YOLO è particolarmente adatto ad applicazioni real-time come il monitoraggio del traffico, il tracking sportivo e molti altri scenari embedded.

YOLOv5n: leggerezza ed efficienza

Nel progetto viene utilizzata la variante YOLOv5n, progettata per ambienti con risorse limitate. Questa versione riduce la complessità del modello mantenendo una buona accuratezza.

L’ottimizzazione riguarda sia l’architettura interna sia il bilanciamento tra velocità e precisione. Questo rende YOLOv5n ideale per il Raspberry Pi Zero 2W, dove la capacità computazionale è limitata.

Preparazione dell’ambiente

La fase iniziale prevede l’installazione delle librerie necessarie. OpenCV viene installato tramite il gestore pacchetti del sistema, mentre onnxruntime richiede l’utilizzo di pip.

Nel caso di incompatibilità, è possibile installare manualmente il pacchetto appropriato in formato .whl, scegliendolo in base alla versione di Python e all’architettura del sistema.

È importante verificare l’ambiente con comandi come:

  • uname -a per informazioni sul sistema
  • python --version per la versione del linguaggio

Download e gestione del modello

Il modello YOLOv5n in formato ONNX viene scaricato direttamente dal repository ufficiale. Una volta salvato nella directory locale, può essere caricato dal codice Python.

Questo approccio evita la necessità di training locale, rendendo il progetto immediatamente operativo.

Pipeline di elaborazione

Il flusso di esecuzione segue una pipeline ben definita:

  1. Caricamento del modello tramite onnxruntime
  2. Lettura dell’immagine con OpenCV
  3. Pre-processing (resize, normalizzazione, conversione)
  4. Inferenza del modello
  5. Post-processing dei risultati

Durante il pre-processing, l’immagine viene ridimensionata a 640×640 e normalizzata. Dopo l’inferenza, i risultati vengono filtrati in base alla confidenza e convertiti in coordinate utilizzabili.

Post-processing e NMS

Una parte fondamentale è il filtraggio delle predizioni. Vengono eliminate le rilevazioni con confidenza bassa o coordinate non valide.

Successivamente si applica la Non-Maximum Suppression (NMS), che serve a rimuovere bounding box sovrapposte mantenendo solo le più rilevanti.

Questo passaggio è essenziale per ottenere risultati puliti e interpretabili.

Visualizzazione dei risultati

I risultati vengono disegnati direttamente sull’immagine:

  • Bounding box colorate per ogni oggetto
  • Etichette con nome della classe e confidenza
  • Colori distinti per migliorare la leggibilità

Un dettaglio interessante è il calcolo automatico del colore del testo in base allo sfondo, per garantire sempre un buon contrasto.

L’immagine finale viene mostrata in una finestra popup, mentre il terminale stampa informazioni dettagliate sulle rilevazioni.

YOLO YOLO

Esecuzione e dimostrazione

L’esecuzione avviene tramite comando:

python or_onnx.py ./img/road.jpg

Il sistema produce sia un output visivo sia una serie di log nel terminale, inclusi:

  • Numero totale di predizioni
  • Numero di rilevazioni valide
  • Coordinate e confidenza degli oggetti

Questo doppio livello di output è utile sia per debugging sia per analisi.

Considerazioni pratiche

Dai commenti e dall’esperienza generale emergono alcuni aspetti impliciti ma importanti:

  • L’uso di modelli leggeri è fondamentale su hardware limitato
  • La configurazione dell’ambiente può richiedere attenzione, soprattutto per le dipendenze
  • La qualità dei risultati dipende fortemente dal pre-processing

Si percepisce anche come il progetto sia pensato più come dimostrazione tecnica che come soluzione pronta all’uso, ma rappresenta una base solida per sviluppi futuri.

Conclusione

Questo progetto dimostra come sia possibile implementare un sistema di object recognition completo anche su una piattaforma compatta come il Raspberry Pi Zero 2W.

L’integrazione tra ONNX e YOLOv5n consente di ottenere prestazioni adeguate in un contesto embedded, mantenendo semplicità e portabilità. Il risultato è una soluzione accessibile, estendibile e adatta a numerosi scenari applicativi.

Pur trattandosi di una realizzazione essenziale, il lavoro evidenzia chiaramente il potenziale delle tecnologie di deep learning anche su dispositivi a basso consumo, aprendo la strada a ulteriori sperimentazioni e ottimizzazioni.

Iscriviti ai nostri gruppi Telegram

Link utili

Seguici per non perdere le prossime novità!

Simone Candido è un ragazzo appassionato del mondo tech nella sua totalità. Simone ama immedesimarsi in nuove esperienze, la sua filosofia si basa sulla irrefrenabile voglia di ampliare a 360° le sue conoscenze abbracciando tutti i campi del sapere, in quanto ritiene che il sapere umano sia il connubio perfetto tra cultura umanistica e scientifica.

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.