face_detection.py
# Questo lavoro è concesso in licenza MIT.
# Copyright (c) 2013-2023 OpenMV LLC. Tutti i diritti riservati.
# https://github.com/openmv/openmv/blob/master/LICENSE
#
# Esempio di rilevamento del volto
#
# Questo esempio mostra la funzione di rilevamento del volto integrata nella OpenMV Cam.
#
# Il rilevamento del volto funziona utilizzando il rilevatore di feature Haar Cascade su un'immagine. Un
# Haar Cascade è una serie di semplici controlli di contrasto di area. Per il rilevatore
# frontalface integrato ci sono 25 fasi di controlli, ognuna delle quali contiene
# centinaia di controlli. Gli Haar Cascade sono veloci perché le fasi successive
# vengono valutate solo se le fasi precedenti vengono superate. Inoltre, la OpenMV Cam usa
# una struttura dati chiamata immagine integrale per eseguire rapidamente ogni
# controllo di contrasto di area in tempo costante (il motivo per cui il rilevamento delle feature è
# limitato alla scala di grigi è il requisito di spazio dell'immagine integrale).
import csi
import time
import image
csi0 = csi.CSI()
csi0.reset()
csi0.contrast(3)
csi0.gainceiling(16)
csi0.framesize(csi.HQVGA) # HQVGA e GRAYSCALE sono i migliori per il tracciamento del volto.
csi0.pixformat(csi.GRAYSCALE)
# Carica Haar Cascade
# Per impostazione predefinita verranno usati tutti gli stage; un numero inferiore di stage è più veloce ma meno accurato.
face_cascade = image.HaarCascade("/rom/haarcascade_frontalface.cascade", stages=25)
print(face_cascade)
# Clock FPS
clock = time.clock()
while True:
clock.tick()
# Catturare lo snapshot
img = csi0.snapshot()
# Trova oggetti.
# Nota: un fattore di scala più basso riduce maggiormente l'immagine e rileva oggetti più piccoli.
# Una soglia più alta comporta un tasso di rilevamento più elevato, con più falsi positivi.
objects = img.find_features(face_cascade, threshold=0.75, scale=1.25)
# Disegna oggetti
for r in objects:
img.draw_rectangle(r)
# Stampa gli FPS.
# Nota: l'FPS effettivo è più alto; lo streaming del framebuffer lo rallenta.
print(clock.fps())