In questo tutorial passo-passo imparerai come distribuire ed eseguire un modello di rilevamento facciale in tempo reale sul XIAO ESP32-S3-Sense utilizzando la piattaforma SenseCraft AI. Il modello verrà eseguito completamente sull’ESP32 senza necessità di interagire con un server per effettuare il rilevamento facciale.
Se stai cercando un modo semplice e veloce per fare il rilevamento facciale con un ESP32, questa guida è perfetta per te. La piattaforma SenseCraft AI ti permette di caricare ed eseguire rapidamente modelli AI pre-addestrati direttamente su microcontrollori supportati come il XIAO ESP32‑S3-Sense, senza dover scrivere codice di machine learning.
La piattaforma consente anche di configurare diverse opzioni di output come pin GPIO, UART, I2C, SPI o MQTT, rendendo facile integrare il rilevatore facciale nei tuoi progetti, ad esempio un sistema di automazione domestica, un contatore di volti o un sistema di rilevamento intrusi.
Oltre al microcontrollore stesso, questo tutorial utilizza solo le funzionalità gratuite della piattaforma SenseCraft AI, senza bisogno di registrazione. Non ti servirà un abbonamento cloud né strumenti avanzati per sviluppatori.
Iniziamo!
Componenti necessari
Ovviamente, ti servirà una scheda XIAO ESP32-S3-Sense di Seeed Studio. Nota che la scheda può scaldarsi molto sotto carico computazionale elevato. Ti consiglio di fissare un piccolo Heatsink sul retro della scheda (vedi il componente elencato qui sotto).
Se vuoi provare l’esempio di comunicazione seriale ti servirà un secondo microcontrollore. Io ho scelto un ESP32 lite più vecchio, ma va bene anche un altro ESP32 o un Arduino.

Seeed Studio XIAO ESP32-S3-Sense

ESP32-lite

Cavo USB C

Piccolo dissipatore 9×9 mm

Set di fili Dupont

Breadboard
Makerguides is a participant in affiliate advertising programs designed to provide a means for sites to earn advertising fees by linking to Amazon, AliExpress, Elecrow, and other sites. As an Affiliate we may earn from qualifying purchases.
Cos’è SenseCraft AI?
SenseCraft AI è una piattaforma di sviluppo AI edge creata da Seeed Studio che ti permette di distribuire facilmente modelli di machine learning su dispositivi embedded—senza scrivere codice complesso o gestire toolchain.
È progettata per inferenza AI in tempo reale su microcontrollori e schede edge computing, specificamente per hardware Seeed come XIAO ESP32S3 Sense, Grove Vision AI e la serie reComputer Jetson.
Con SenseCraft AI puoi:
- Distribuire rapidamente modelli AI predefiniti (come rilevamento facciale, classificazione oggetti, riconoscimento parole chiave)
- Addestrare modelli personalizzati con i tuoi dataset usando un’interfaccia web
- Caricare firmware e modelli direttamente su dispositivi supportati
- Visualizzare dati in tempo reale e feed della camera tramite il browser
- Registrare, monitorare e analizzare eventi usando la piattaforma cloud SenseCraft Data
Il diagramma architetturale seguente mostra i componenti della piattaforma SenseCraft AI. Come vedi, è una piattaforma complessa con molte funzioni:

In questo tutorial useremo solo le parti di SenseCraft AI necessarie per distribuire, eseguire e monitorare un modello pubblico di rilevamento facciale su una scheda XIAO ESP32-S3-Sense.
Seleziona modello di rilevamento facciale
Per prima cosa devi selezionare il modello da distribuire. Vai alla pagina di selezione modelli SenseCraft su https://sensecraft.seeed.cc/ai/model. Nella scheda “Pretrained Models” seleziona sotto Task “Detection” e sotto Supported Devices “XIAO ESP32S3 Sense”. Poi digita “Face” nella barra di ricerca per filtrare i modelli di rilevamento facciale:

A luglio 2025 ci sono solo due modelli. Clicca sul modello Swift-YOLO a destra (evidenziato in giallo). L’altro modello non ha funzionato nei miei test.
Si aprirà una nuova pagina con la descrizione del modello di rilevamento facciale e un pulsante verde “Deploy Model” sulla destra:

Collega la tua scheda XIAO ESP32-S3-Sense via USB al computer e clicca su “Deploy Model”.
Distribuisci modello di rilevamento facciale
Dopo aver cliccato su “Deploy Model” si aprirà una nuova pagina chiamata “Deploy Face Detection” con un pulsante “Connect Device” in basso:

Premilo e vedrai apparire una finestra di conferma, dove dovrai solo cliccare “Confirm”:

Dopodiché la piattaforma SenseCraft deve sapere a quale porta COM è collegata la scheda XIAO ESP32-S3-Sense. Ti mostrerà una lista delle porte usate (Paired) – di solito solo una, se hai collegato una sola scheda. Clicca sulla porta COM che vuoi usare e poi sul pulsante “Connect” in basso:

Questo avvierà il download (distribuzione) del modello di rilevamento facciale sulla scheda XIAO-ESP32-S3-Sense.
Monitoraggio del modello di rilevamento facciale
Una volta distribuito, il modello parte automaticamente e invia immagini con riquadri di rilevamento facciale al browser, dove puoi vedere uno streaming live nella sezione Preview:

In alto a destra nella sezione Preview c’è un pulsante “Stop” per fermare il modello in esecuzione. Puoi anche regolare il frame rate con uno slider nella sezione Device:

Sotto il video nella sezione Preview ci sono due impostazioni importanti (Confidence, IoU) per regolare le rilevazioni del modello, che vedremo nel dettaglio a seguire.
Soglia di confidenza
Lasoglia di confidenza filtra le rilevazioni in base a quanto il modello è sicuro che qualcosa sia un volto. Ogni rilevazione ha un punteggio di confidenza tra 0 e 100%. Se il punteggio di una rilevazione èinferiore alla soglia di confidenza, viene scartata.
Una soglia più bassa rileverà più volti ma causerà anche più errori nel rilevamento di non volti (falsi positivi). Una soglia più alta rileverà meno volti (con meno errori) ma farà anche perdere alcuni volti (falsi negativi). L’esempio sotto mostra il caso di una soglia di confidenza troppo bassa, con molte rilevazioni spurie:

C’è sempre un compromesso tra quanto vuoi che il modello sia sensibile e quanti errori sei disposto ad accettare. Dipende dall’applicazione quale soglia è la migliore. Per esempio, in un sistema di rilevamento intrusi potresti accettare più falsi positivi per essere sicuro che nessun ladro entri.
Soglia IoU
Internamente il modello di rilevamento facciale genera più riquadri di rilevamento, dato che un’immagine può contenere più volti. Tuttavia, questo può causare che un volto venga rilevato da più riquadri sovrapposti. L’esempio sotto mostra un caso del genere:

La soglia IoU (Intersection over Union) aiuta a decidere quale dei riquadri sovrapposti mantenere. È calcolata come il rapporto di sovrapposizione tra i riquadri. Se due riquadri si sovrappongono più della soglia IoU, quello con la confidenza più bassa viene rimosso.
Se noti che i volti sono rilevati da più riquadri, abbassa la soglia IoU. Potresti però ottenere riquadri troppo piccoli. In questo caso aumenta la soglia IoU.
Output del modello di rilevamento facciale
Monitorare il processo di rilevamento facciale in tempo reale è importante per capire l’accuratezza e il comportamento del modello. Ma nella maggior parte delle applicazioni vogliamo un output del modello che possiamo elaborare ulteriormente. Per esempio, un pin digitale che si attiva quando viene rilevato un volto, che a sua volta accende un allarme.
I modelli SenseCraft AI offrono tipicamente tre tipi diversi di output:
- Output digitale via GPIO
- Output seriale via UART, I2C o SPI
- Output MQTT via WiFi
Puoi configurare queste diverse opzioni di output cliccando sull’elemento corrispondente nella barra laterale:

L’output digitale via GPIO è ottimo per azioni semplici, come aprire una porta quando viene rilevato un volto. Se ti servono informazioni più dettagliate come quanti volti sono stati rilevati, dove e con quale confidenza, allora l’outputserialeè quello che ti serve. Infine, se vuoi collegare il rilevatore facciale a un sistema di automazione domestica, come Home Assistant, probabilmente vorrai usare MQTT.
Nelle sezioni successive esamineremo più da vicino le opzioni di output GPIO e Serial. L’opzione MQTT è già descritta nel SenseCraft AI MQTT output for XIAO ESP32-S3tutorial.
Output digitale GPIO
Per configurare l’output GPIO clicca sull’elemento GPIO nella barra laterale:

Puoi quindi aggiungere un’”Azione trigger quando le condizioni dell’evento sono soddisfatte”:

Si apre la seguente finestra, dove puoi specificare i dettagli dell’azione. Per esempio, potresti voler accendere il LED integrato se un volto viene rilevato con una confidenza maggiore di 50 %:

Se premi il pulsante “Confirm” questa azione viene aggiunta alla lista delle azioni trigger e diventa attiva:

Il LED giallo sulla scheda XIAO ESP32-S3-Sense dovrebbe ora accendersi se la camera rileva un volto con la confidenza specificata.
Invece del LED, puoi anche selezionare un altro pin GPIO e definire il suo stato di default e attivo:

Questo ti permetterebbe di collegare un dispositivo, ad esempio un apriporta o un allarme a GPIO1 e attivarlo se la camera vede un volto.
Le azioni trigger rimangono impostate anche dopo aver scollegato o spento l’ESP32. Anche se la documentazione dice il contrario, per me le azioni trigger hanno funzionato anche quando il XIAO ESP32-S3-Sense non era connesso all’interfaccia web.
Output seriale via I2C
L’output GPIO è limitato a “volto rilevato” o “nessun volto rilevato”. Per informazioni più dettagliate, come il numero di volti rilevati, i loro riquadri di rilevamento e il valore di confidenza, puoi usare l’output seriale. Tuttavia, dovrai collegare un secondo microcontrollore via UART, I2C o SPI per elaborare le rilevazioni.
Il codice per il rilevamento facciale viene distribuito tramite SenseCraft e gira sul XIAO ESP32-S3-Sense. Il codice per elaborare le rilevazioni viene caricato tramite Arduino IDE e gira sul secondo microcontrollore – nel mio caso un ESP32-lite. L’immagine sotto mostra le parti principali del sistema, usando I2C per la comunicazione:

Collegare il ESP32-lite al XIAO ESP32-S3-Sense via I2C è semplice. L’immagine sotto mostra lo schema di collegamento:

I pin I2C sull’ESP32-lite sono SDA=GPIO19 e SCL=GPIO23. I pin corrispondenti sull’ESP32-S3-Sense sono SDA=D4/GPIO5 e SCL=D5/GPIO4. Nota che lo schema sopra mostra il retro delle schede, dove sono etichettati gli output digitali (D0…D10).
| ESP32-lite | XIAO | |
|---|---|---|
| SDA | GPIO19 | D4 / GPIO5 |
| SCL | GPIO23 | D5 / GPIO4 |
Qui sotto il pinout completo del XIAO ESP32-S3-Sense visto da davanti. Puoi vedere i pin SDA e SCL a sinistra della scheda.

Nella prossima sezione scriveremo il codice che gira sull’ESP32-lite e elabora le rilevazioni facciali generate dal XIAO ESP32-S3-Sense.
Codice per comunicazione seriale
Per far funzionare il codice seguente devi prima installare la Seeed_Arduino_SSCMA libreria. Apri il LIBRARY MANAGER, cerca “Seeed_Arduino_SSCMA” e clicca su INSTALL:

Poi collega l’ESP32-lite al computer e carica il codice seguente:
#include <Wire.h>
#include <Seeed_Arduino_SSCMA.h>
SSCMA detector;
void setup() {
Serial.begin(115200);
Wire.begin();
detector.begin(&Wire);
Serial.println("running...");
}
void loop() {
if (!detector.invoke(1, false, false)) {
for (int i = 0; i < detector.boxes().size(); i++) {
boxes_t &b = detector.boxes()[i];
Serial.printf("Box[%d] conf=%d [%3d %3d %3d %3d]\n",
i, b.score, b.x, b.y, b.w, b.h);
}
}
}
Questo codice richiama il rilevatore facciale che gira sull’ESP32-S3-Sense e stampa i punteggi di confidenza e i riquadri di rilevamento per ogni volto rilevato sul Monitor Seriale. Vediamo il codice più da vicino.
librerie
Per prima cosa includiamo le librerie Wire e Seeed_Arduino_SSCMA. Ci serve Wire per la comunicazione I2C e Seeed_Arduino_SSCMA per comunicare con il rilevatore facciale.
#include <Wire.h> #include <Seeed_Arduino_SSCMA.h>
oggetto
Poi creiamo l’oggetto detector, che fornisce funzioni per avviare un rilevamento facciale e per recuperare i risultati:
SSCMA detector;
setup
Nella funzionesetupinizializziamo la comunicazione seriale con il Monitor Seriale e la comunicazione I2C con il detector:
void setup() {
Serial.begin(115200);
Wire.begin();
detector.begin(&Wire);
Serial.println("running...");
}
Questo presuppone che tu stia usando i pin I2C di default. Altrimenti dovrai specificarli creando un oggettoWireseparato.
loop
Infine, nella funzionelooprichiamiamo il detector e poi stampiamo la confidenza e il bounding box dei volti rilevati sul Monitor Seriale:
void loop() {
if (!detector.invoke(1, false, false)) {
for (int i = 0; i < detector.boxes().size(); i++) {
boxes_t &b = detector.boxes()[i];
Serial.printf("Box[%d] conf=%d [%3d %3d %3d %3d]\n",
i, b.score, b.x, b.y, b.w, b.h);
}
}
}
Se tutto è collegato e funzionante correttamente, vedrai i risultati delle rilevazioni stampati sul Monitor Seriale così:

Ora potresti facilmente modificare il codice, per esempio per contare il numero di volti rilevati, fare il tracciamento facciale o attivare un’azione se un volto si avvicina (bounding box grande).
Infine, nota che le soglie di confidenza e IoU sono impostate tramite l’interfaccia web SenseCraft e memorizzate sull’ESP32-S3-Sense. Potresti impostarle a zero e fare la tua soglia nel codice.
Conclusioni e commenti
In questo tutorial hai imparato come distribuire ed eseguire un modello di rilevamento facciale in tempo reale sul XIAO ESP32-S3-Sense usando la piattaforma SenseCraft AI.
La piattaforma SenseCraft AI rende molto facile integrare un modello AI pre-addestrato nei tuoi progetti TinyML. Non devi scrivere codice per distribuire o eseguire il modello.
L’interfaccia web ti permette di configurare diverse opzioni di output (GPIO, Serial, MQTT), sempre senza scrivere codice. Ma l’interfaccia seriale ti consente di scrivere il tuo codice per elaborare ulteriormente i risultati, se necessario. Tuttavia, dovrai collegare un secondo microcontrollore.
Un limite della piattaforma SenseCraft AI è che non puoi estendere il codice del modello distribuito. Tutto il codice di elaborazione aggiuntiva deve girare su un secondo microcontrollore. D’altra parte, nella maggior parte dei casi il carico computazionale del modello è così alto che è meglio usare comunque un microcontrollore separato.
Per esempio, se vuoi costruire un gimbal per il tracciamento facciale, ha senso eseguire il rilevamento facciale su un microcontrollore e il controllo dei servo su un altro.
Se vuoi saperne di più sul XIAO ESP32-S3-Sense dai un’occhiata al nostro Getting started with XIAO-ESP32-S3-Sense tutorial. E Seeed Studio ha molte altre informazioni nel suo Getting Started Wiki.
Un’applicazione comune delle schede microcontrollore con camera è lo streaming e la sorveglianza. Se è quello che cerchi, i tutorial Stream Video with with XIAO-ESP32-S3-Sense e Surveillance Camera with ESP32-CAM possono esserti utili.
Infine, se vuoi rilevare persone invece che volti, dai un’occhiata al tutorial Edge AI Room Occupancy Sensor with ESP32 and Person Detection.
Se hai domande sentiti libero di lasciarle nella sezione commenti.
Buon divertimento con il tinkering 😉

