Capitolo 4: Rilevamento del volto
Obiettivo del capitolo: far rilevare a NanoCam i volti nell'immagine, annotare il riquadro del volto e i keypoint, e leggere le coordinate per il controllo esterno.
Come funziona
Il rilevamento del volto usa la libreria di deep learning ESP-DL, basata sul modello leggero di rilevamento MobileNet. In ingresso un'immagine 320x240 RGB565, in uscita un elenco di bounding box dei volti (posizione + dimensione + confidenza). L'inferenza avviene sull'ESP32-S3, senza connessione di rete.
Formato del risultato di rilevamento
Coordinate: angolo in alto a sinistra (x,y) + larghezza e altezza (w,h)
Confidenza: numero in virgola mobile tra 0 e 1
Con più volti vengono restituiti più riquadri
Passaggi
4.1 Cambiare modalità
ai_mode:2Per tutti i comandi vedi il manuale del protocollo seriale.
4.2 Osservare il risultato
Nel browser http://<IP> si vede il riquadro di rilevamento del volto.
4.3 Ottenere le coordinate
Formato dell'output seriale:
I (xxxxx) detection_result: [ 0]: ( 45, 30, 180, 210)
I (xxxxx) detection_result: left eye: ( 90, 80), right eye: (150, 80), nose: (120, 120), mouth left: ( 95, 150), mouth right: (145, 150)Prima riga:
[indice] (x, y, w, h)— coordinate del riquadro del voltoSeconda riga: 5 keypoint — occhio sinistro, occhio destro, naso, angolo sinistro della bocca, angolo destro della bocca
Codice
Arduino: leggere le coordinate e controllare il servomotore
// analizza il formato $face:x,y,w,h#
if (nanoSerial.available()) {
String line = nanoSerial.readStringUntil('\n');
if (line.startsWith("$face:")) {
int x = line.substring(6).toInt();
int y = line.substring(line.indexOf(',')+1).toInt();
servoX.write(map(x, 0, 320, 0, 180));
}
}Lettura in Python
ser = serial.Serial("COM3", 115200)
line = ser.readline().decode()
if line.startswith("$face:"):
parts = line[6:-1].split(",")
x, y, w, h = map(int, parts)Risultato
Un volto davanti alla fotocamera → nell'immagine viene annotato un riquadro verde → le coordinate sono inviate sulla seriale.
Capitolo successivo: Capitolo 5: Rilevamento del muso del gatto

