gif_on_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 registrazione video GIF su rilevamento del volto
#
# Nota: per eseguire questo esempio è necessaria una scheda SD.
#
# Puoi usare la tua OpenMV Cam per registrare file gif. Puoi fornire al
# oggetto recorder fotogrammi RGB565 oppure fotogrammi in scala di grigi. Usa un software di editing fotografico
# come GIMP per comprimere e ottimizzare la Gif prima di caricarla sul web.
#
# Questo esempio mostra come usare il tracciamento del volto sulla tua OpenMV Cam per registrare un
# gif.
import csi
import image
import time
import gif
import machine
import random
csi0 = csi.CSI()
csi0.reset() # Inizializza il sensore della fotocamera.
csi0.pixformat(csi.GRAYSCALE) # Imposta il formato pixel su RGB565 (o GRAYSCALE)
csi0.framesize(csi.QVGA) # Imposta la dimensione del fotogramma su QVGA
csi0.snapshot(time=2000) # Attendi che le impostazioni abbiano effetto.
led = machine.LED("LED_RED")
# Carica un HaarCascade per il rilevamento del volto. Questo è un oggetto che la tua OpenMV Cam
# può usare per rilevare volti tramite il metodo find_features() qui sotto. La tua OpenMV
# Cam ha l'HaarCascade frontalface integrato. Per impostazione predefinita, tutti gli stadi dell'
# HaarCascade vengono caricati. Tuttavia, puoi regolare il numero di stadi per velocizzare
# l'elaborazione a scapito della precisione. L'HaarCascade frontalface ha 25
# stadi.
face_cascade = image.HaarCascade("/rom/haarcascade_frontalface.cascade", stages=25)
while True:
print("About to start detecting faces...")
csi0.snapshot(time=2000) # Dai all'utente il tempo di prepararsi.
print("Now detecting faces!")
diff = 10 # Diremo di aver rilevato un volto dopo 10 fotogrammi.
while diff:
img = csi0.snapshot()
# La soglia può essere compresa tra 0.0 e 1.0. Una soglia più alta produce un
# tasso di rilevamento più alto con più falsi positivi. Il valore di scala
# controlla la scala di corrispondenza permettendo di rilevare volti più piccoli.
faces = img.find_features(face_cascade, threshold=0.5, scale=1.5)
if faces:
diff -= 1
for r in faces:
img.draw_rectangle(r)
led.on()
g = gif.Gif("example-%d.gif" % random.getrandbits(32), loop=True)
clock = time.clock() # Traccia gli FPS.
for i in range(100):
clock.tick()
# clock.avg() restituisce i millisecondi tra i fotogrammi - il ritardo della gif è in
g.add_frame(csi0.snapshot(), delay=int(clock.avg() / 10)) # centesimi di secondo.
print(clock.fps())
g.close()
led.off()
print("Restarting...")