Implementazione di un sistema embedded di visione artificiale con Orange Pi 4 Pro per il riconoscimento di oggetti
L’esecuzione di algoritmi di visione artificiale su piattaforme embedded a basso consumo rappresenta oggi una soluzione concreta per applicazioni di automazione, monitoraggio intelligente e interazione uomo-macchina. Le moderne librerie di computer vision e i modelli neurali ottimizzati consentono l’inferenza locale anche su hardware ARM privo di accelerazione grafica dedicata. In questo contesto, una scheda Orange Pi equipaggiata con Ubuntu 24.04 in ambiente XFCE permette di realizzare un sistema di riconoscimento oggetti in tempo reale tramite webcam USB, con elaborazione completamente offline. Il presente lavoro descrive l’architettura software, le componenti impiegate e la procedura di configurazione dettagliata necessaria alla realizzazione del sistema.
Acquistalo su Aliexpress:
- Orange Pi 4 Pro: https://s.click.aliexpress.com/e/_c4mqL0If
- Webcam: https://s.click.aliexpress.com/e/_c3Xv0MaP
Progetto
Il sistema acquisisce un flusso video continuo da una webcam USB collegata alla Orange Pi 4 Pro e applica un modello di deep learning preaddestrato per il rilevamento e la classificazione di oggetti comuni. Ogni frame viene sottoposto a una pipeline di preprocessing che include ridimensionamento e normalizzazione, quindi convertito in una rappresentazione compatibile con l’input della rete neurale. Il motore di inferenza produce, per ciascun oggetto rilevato, una probabilità di classificazione e le coordinate spaziali della regione di interesse.

Il software sovrappone in tempo reale bounding box e etichette semantiche all’immagine acquisita, generando un output visivo immediatamente interpretabile. L’architettura dimostra la possibilità di implementare funzionalità di computer vision su dispositivi embedded, con applicazioni potenziali in sorveglianza intelligente, domotica reattiva, robotica educativa e sistemi di assistenza contestuale.
Componenti
La piattaforma hardware è costituita da una Orange Pi 4 Pro, scelta per l’equilibrio tra consumo energetico, costo e capacità di elaborazione. Il sistema operativo installato è Ubuntu 24.04 con ambiente desktop XFCE, configurazione che garantisce stabilità, disponibilità di repository aggiornati e un carico grafico contenuto rispetto ad ambienti desktop più pesanti.

La webcam USB rappresenta il sensore visivo del sistema e fornisce il flusso video in tempo reale. L’elaborazione delle immagini e l’inferenza neurale sono gestite tramite la libreria OpenCV, che integra moduli per l’acquisizione video, il preprocessing e l’esecuzione di modelli di deep learning. Il modello MobileNet-SSD viene impiegato per il rilevamento degli oggetti in quanto progettato per scenari embedded, offrendo un compromesso efficiente tra accuratezza e requisiti computazionali.

Configurazione
La configurazione del sistema prevede la predisposizione dell’ambiente software su Ubuntu 24.04 con XFCE, la verifica del riconoscimento hardware della webcam, l’installazione delle dipendenze e l’esecuzione dell’applicazione di inferenza. Tutte le operazioni vengono eseguite tramite terminale, interfaccia testuale che consente un controllo diretto del sistema.

La procedura inizia con l’avvio della Orange Pi 4 Pro e l’accesso al desktop XFCE. La procedura di installazione del sistema operativo prevede l’utilizzo di Rufus e di una immagine di sistema, da installare su MicroSD.

Una volta accesa la SBC, possiamo utilizzare Terminale da DE, oppure accedere alla Orange Pi 4 Pro da terminale remoto con PuTTY, adoperando un altro PC.
Il primo passo da compiere è l’aggiornamento del sistema, sincronizzando l’indice dei pacchetti e installando eventuali aggiornamenti disponibili, operazione fondamentale per garantire compatibilità tra librerie e runtime. Il comando di aggiornamento dei repository recupera l’elenco più recente dei pacchetti disponibili, mentre il comando di upgrade installa le versioni aggiornate dei software già presenti nel sistema. Ricordiamoci che durante l’aggiornamento il sistema può richiedere la password dell’utente (orangepi).
sudo apt update
sudo apt upgrade -y
Successivamente viene installato l’ambiente di sviluppo Python e la libreria OpenCV, utilizzata per l’acquisizione dei frame video e l’esecuzione del modello neurale. Python rappresenta il linguaggio di orchestrazione dell’intera pipeline di elaborazione, mentre OpenCV fornisce le primitive per la gestione dei flussi video e dei modelli DNN.
sudo apt install -y python3 python3-pip python3-opencv
Una volta installate le dipendenze principali, verifichiamo la corretta rilevazione della webcam da parte del sistema operativo.
ls /dev/video*
Il risultato da terminale dovrebbe essere questo:

Creiamo una cartella dedicata al progetto, allo scopo di isolare file applicativi e risorse del modello.
mkdir riconoscimento
Una volta creata, entriamo nella cartella.
cd riconoscimento
All’interno della cartella di lavoro dobbiamo installare le librerie Python di supporto e scaricati i file del modello neurale. Le librerie aggiuntive gestiscono operazioni numeriche e utilità per l’elaborazione delle immagini. I file del modello comprendono la descrizione architetturale della rete e i pesi appresi durante.
pip3 install numpy imutils
wget https://github.com/robmarkcole/object-detection-app/raw/master/model/MobileNetSSD_deploy.caffemodel
wget -O MobileNetSSD_deploy.prototxt "https://gist.githubusercontent.com/mm-aditya/797a3e7ee041ef88cd4d9e293eaacf9f/raw/MobileNetSSD_deploy.prototxt"
Verifichiamo che MobileNetSSD_deploy.caffemodel e MobileNetSSD_deploy.prototxt occupino rispettivamente 23MB e 29KB circa:
ls -lh
Il risultato dovrebbe essere simile a questo:

Tocca a noi creare con il comando nano un applicativo. Il codice Python carica il modello MobileNet-SSD, inizializza il flusso video e implementa il ciclo continuo di acquisizione, inferenza e visualizzazione dei risultati.
nano riconosci.py
Nel file appena generato andiamo ad inserite le istruzioni che caricano la rete neurale, definiscono le classi riconoscibili e gestiscono la pipeline di elaborazione dei frame video.
import cv2
net = cv2.dnn.readNetFromCaffe(
"MobileNetSSD_deploy.prototxt",
"MobileNetSSD_deploy.caffemodel"
)
classes = ["sfondo", "aeroplano", "bicicletta", "uccello", "barca",
"bottiglia", "autobus", "auto", "gatto", "sedia",
"mucca", "tavolo", "cane", "cavallo", "moto",
"persona", "pianta", "pecora", "divano",
"treno", "tv"]
cap = cv2.VideoCapture(0)
while True:
ret, frame = cap.read()
if not ret:
break
blob = cv2.dnn.blobFromImage(
cv2.resize(frame, (300, 300)),
0.007843, (300, 300), 127.5
)
net.setInput(blob)
detections = net.forward()
h, w = frame.shape[:2]
for i in range(detections.shape[2]):
confidence = detections[0, 0, i, 2]
if confidence > 0.5:
idx = int(detections[0, 0, i, 1])
label = classes[idx]
box = detections[0, 0, i, 3:7] * [w, h, w, h]
(x1, y1, x2, y2) = box.astype("int")
cv2.rectangle(frame, (x1, y1), (x2, y2), (0,255,0), 2)
cv2.putText(frame, label, (x1, y1 - 10),
cv2.FONT_HERSHEY_SIMPLEX, 0.6, (0,255,0), 2)
cv2.imshow("IA che vede", frame)
if cv2.waitKey(1) & 0xFF == ord("q"):
break
cap.release()
cv2.destroyAllWindows()
Salviamo con CTRL+X e confermiamo con Y. Avviamo a questo punto l’applicativo. Durante l’esecuzione il sistema acquisisce i frame dalla webcam, esegue l’inferenza e visualizza il risultato in tempo reale. L’interruzione manuale del processo avviene tramite input da tastiera.
python3 riconosci.py
All’avvio si apre una finestra grafica contenente il flusso video e le etichette degli oggetti riconosciuti. Il sistema realizza così una pipeline completa di acquisizione, inferenza e visualizzazione interamente eseguita su hardware embedded.
