Realizato da

Pubblicato il

computer

vision

opencv

python

riconoscimento

facciale


Ciao a tutti e benvenuti in questa nuova guida su come fare il riconoscimento facciale su una foto di una persona con Python. In questa guida andremo a vedere come utilizzare una delle librerie più comuni per la visione artificiale per riconoscere una faccia e occhi prese da una foto.

Per seguire questa guida avrete bisogno di avere installato sul vostro pc: Python, numpy e la libreria openCV

Il riconoscimento facciale può essere eseguito in qualsiasi linguaggio di programmazione come Java e C++, infatti esistono implementazione della stessa libreria OpenCV anche in altri linguaggi ma per questa guida andremo ad utilizzare Python.

Per una guida su come installare openCV sul vostro PC potete vedere qui: come installare openCV su Windows, come installare OpenCV su Linux, o potete seguire questo video tutorial in inglese che vi mostra un modo più semplice per installare la libreria.

Ok cominciamo con la guida

Prima di tutto parliamo un po’ di come funziona il riconoscimento facciale nella programmazione. 

Uno dei metodi più comuni per il riconoscimento del volto usato da molte librerie è il metodo haar-cascade.

Questo metodo funziona aprendo un file chiamato il cascade. Un cascade è un file xml enorme contenente delle caratteristiche riguardanti un particolare oggetto. Queste caratteristiche sono state generate utilizzando milioni di campioni di immagini (di volti o altri oggetti per altri cascade) e salvate in un file accessibile da tutti.

Con openCV possiamo fare uso di queste cascade per creare un riconoscimento di qualsiasi oggetto (a patto che il cascade per l’oggetto esista). È possibili creare un cascade custom, ma questo non è lo scopo della lezione di oggi.

Creare un programma per riconoscere un volto e occhi

Con il progetto OpenCV sono stati messi a disposizioni vari cascade che possono essere trovati sulla pagina GitHub di OpenCV.

Nel nostro caso andremo ad utilizzare i cascade per il riconoscimento di un volto e un altro per il riconoscimento automatico degli occhi.

Questi cascade sono: haarcascade_frontalface_default.xmlhaarcascade_eye.xml.

Potete scaricare questi due cascade cliccando sui due link, selezionando RAW, e salvare con nome cliccando con il mouse destro:

come fare riconoscimento facciale del volto con programmazione python

Salvate i due file nella stessa directory in cui andrete a creare lo script Python. Per esempio in una nuova cartella chiamata opencv.

Se non lo avete già fatto create una cartella chiamata opencv in cui andremo a salvare i due cascade ed un file chiamato app.py

In secondo luogo andiamo a salvare nella stessa directory una foto contenente un volto. Io ho usato una foto di Mark Zuckerberg.

Ora siamo pronti per scrivere il nostro programma per il riconoscimento facciale (face detection).

Aprendo il file app.py con un text editor andiamo ad inserire il seguente codice:

import numpy as np
import cv2
face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
eye_cascade = cv2.CascadeClassifier('haarcascade_eye.xml')
img = cv2.imread('mark.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
faces = face_cascade.detectMultiScale(gray, 1.3, 5)
for (x,y,w,h) in faces:
    cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)
    roi_gray = gray[y:y+h, x:x+w]
    roi_color = img[y:y+h, x:x+w]
    eyes = eye_cascade.detectMultiScale(roi_gray)
    for (ex,ey,ew,eh) in eyes:
        cv2.rectangle(roi_color,(ex,ey),(ex+ew,ey+eh),(0,255,0),2)
cv2.imshow('img',img)
cv2.waitKey(0)
cv2.destroyAllWindows()


Questo codice potrebbe risultare complicato se non siete abituati alla programmazione con Python o OpenCV, ma i passi principali che questo codice esegue sono:

  1. caricare l’immagine
  2. salvare coordinate della faccia nella variabile faces
  3. disegnare rettangolo intorno a faces
  4. salvare coordinate degli occhi in eyes
  5. disegnare rettangolo intorno a eyes
  6. mostrare immagine completa con rettangoli sulla faccia e occhi

E questo è tutto ciò che ci serve per riconoscere un volto in una foto utilizzando Python con OpenCV.

Se salviamo il file e dal terminal eseguiamo il file con il comando:

python app.py


Dovremo vedere in output il bel volto di Mark con tre rettangoli intorno a faccia e occhi.

guida riconoscimento facciale del volto con programma python opencv

Il risultato del riconoscimento facciale a volte può risultare errato se la foto non è di alta qualità. Per esempio a volte il programma scambia le narici o bocca per occhi, quindi cercate di utilizzare foto ad alta risoluzione. (non troppo alta o il programma gira lento)

Grazie per aver seguito la guida, spero che sia andato tutto liscio. Se avete qualsiasi domanda non esitate a chiedere. Risponderò immediatamente.

Grazie e ci vediamo alla prossima :)