Creare uno script di Face Detection con Python

Creare uno script di Face Detection con Python

Uno script in grado di riconoscere le facce delle persone da un’immagine, sembra qualcosa di veramente difficile da realizzare, specialmente per un programmatore non esperto.

Tuttavia oggi vi mostreremo, come creare uno script di Face Detection con Python, utilizzando la libreria OpenCv.

La libreria OpenCv

OpenCV è una libreria enorme usata per il machine learning e per l’elaborazione delle immagini.

Iniziamo con l’installazione di OpenCV:

pip install opencv-python

A questo punto possiamo scaricare il file XML contente i dati, direttamente su OpenCv.

Fatto questo abbiamo tutti gli strumenti che ci occorrono per poter creare uno script di Face Detection con Python.

Importiamo OpenCv in Python (modulo cv2) e carichiamo il file XML citato precedente tramite queste linee di codice:

import cv2
cascade_classifier = cv2.CascadeClassifier("file_cv2_default.xml")

A questo punto scegliamo un’immagine per poter testare il nostro algoritmo per il riconoscimento facciale, ma attenzione però perchè la libreria che stiamo usando è in grado di fare il riconoscimento, solo su immagini in scala di grigi.

Per ovviare questo possiamo comunque utilizzare una funzione di OpenCv, per cui creiamo un oggetto per la nostro foto di prova ed utilizziamo la funzione cvtColor per poterla utilizzare nella scala di grigi:

photo = cv2.imread("photo_sample.png")
photo_gray = cv2.cvtColor(photo, cv2.COLOR_BGR2GRAY)

Fatto questo adesso possiamo utilizzare il metodo detectMultiScale del classificatore importato prima nella variabile cascade_classifier:

faces = cascade_classifier.detectMultiScale(photo_gray, 1.1, 4)

I 3 parametri che il metodo richiede sono:

  • foto in scala di grigi (la nostro photo_sample.png che abbiamo poi convertito con il metodo cvtColor di OpenCv);
  • un fattore di scala usato dal classificatore Haar-Cascade, per realizzare una rappresentazione dell’immagine da analizzare e per fare il riconoscimento facciale vero e proprio;
  • numero di regioni da considerare per il riconoscimento facciale. Un numero più alto permette di riconoscere meno volti, ma con maggiore precisione, mentre invece un numero più basso permette di riconoscere più volti, ma con una precisione inferiore.

Il risultato del nostro script di Face Detection

A questo punto non ci resta che scrivere le ultime righe del nostro script di Face Detection con Python e di goderci il risultato.

La variabile faces contiene i risultati del metodo detectMultiScale, che corrispondo a delle coordinate. Per cui possiamo disegnare dei rettangoli attorno ai volti che sono stati riconosciuti dal nostro algoritmo di riconoscimento facciale:

for(x, y, width, height) in faces:
    cv2.rectangle(photo, (x,y), (x+width, y+height), (0, 0, 255), 3)
cv2.imshow('photo', photo)
cv2.waitKey()

Bene con queste poche righe di codice abbiamo terminato il nostro script di Face Detection fatto con Python. Semplice no?