face_eye_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 di volto e occhi
#
# Questo script usa il rilevatore frontalface integrato per trovare un volto e poi
# gli occhi all'interno del volto. Se si desidera determinare la direzione dello sguardo, consultare lo
# script iris_detection per un esempio su come farlo.
import csi
import time
import image
csi0 = csi.CSI()
csi0.reset()
csi0.contrast(1)
csi0.gainceiling(16)
csi0.framesize(csi.HQVGA)
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)
eyes_cascade = image.HaarCascade("/rom/haarcascade_eye.cascade", stages=24)
print(face_cascade, eyes_cascade)
# Clock FPS
clock = time.clock()
while True:
clock.tick()
# Catturare lo snapshot
img = csi0.snapshot()
# Trovare un volto!
# 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.5, scale=1.5)
# Disegnare i volti
for face in objects:
img.draw_rectangle(face)
# Ora trovare gli occhi all'interno di ciascun volto.
# Nota: qui usare una soglia più alta (più rilevamenti) e una scala più bassa (per trovare oggetti piccoli)
eyes = img.find_features(
eyes_cascade, threshold=0.5, scale=1.2, roi=face
)
for e in eyes:
img.draw_rectangle(e)
# Stampa gli FPS.
# Nota: l'FPS effettivo è più alto; lo streaming del framebuffer lo rallenta.
print(clock.fps())