Iniziamo con questo video una breve serie sul riconoscimento facciale automatico con Python, utilizzando il modulo specifico face_recognition.
Il riconoscimento facciale è il processo di identificazione o verifica dell’identità di una persona utilizzando il suo volto. Cattura, analizza e confronta i modelli in base ai dettagli facciali della persona. Ciascun video tratterà di alcuni metodi per l’acquisizione, il riconsocimento e la modifica di immagini. La libreria è disponibile anche per i sistemi ARM, quindi Raspberry PI e compagnia sono serviti.
Configurazione
Per prima cosa sarà necessario installare i moduli necessari al programma. Nel caso specifico useremo Pillow (un modulo per il trattamento delle immagini).
Aggiorniamo PIP e lanciamo l’install/upgrade di Pillow. Dovremo ottenere la versione 10.0
1 2 |
python3 -m pip install --uprgade pip python3 -m pip install --uprgade Pillow |
Installiamo quindi il modulo face_recognition, secondo le specifiche riportate nella sezione di download. Notare che è possibile utilizzare il modulo anche con Raspberry PI.
Il programma
Il programma è abbastanza semplice:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
# Find faces in picture # https://github.com/ageitgey/face_recognition/blob/master/examples/find_faces_in_picture.py from PIL import Image import face_recognition # Load the jpg file into a numpy array image = face_recognition.load_image_file("st_tng.jpg") # Find all the faces in the image using the default HOG-based model. # This method is fairly accurate, but not as accurate as the CNN model and not GPU accelerated. # See also: find_faces_in_picture_cnn.py face_locations = face_recognition.face_locations(image) for face_location in face_locations: # Print the location of each face in this image top, right, bottom, left = face_location # You can access the actual face itself like this: face_image = image[top:bottom, left:right] pil_image = Image.fromarray(face_image) pil_image.show() |
Dopo l’import dei moduli necessari, carichiamo l’immagine (riga 8) in una struttura specifica. Nel nostro caso useremo la foto del cast di Star Trek: The Next Generation, posta nella stessa cartella del programma.
Quindi richiamiamo la funzione face_locations(image), che ci restituirà le coordinate cartesiane dei rettangoli che incorniciano ciascuna delle facce.
Se adesso eseguissimo il comando
1 |
print(face_locations) |
otterremo una lista di quadruple con le coordinate. Per utilizzare le coordinate sarà sufficiente:
- Ciclare all’interno di questa lista di coordinate (riga 15)
- Assegnare i valori di ciascuna quadrupla ad altrettante variabili, nel nostro caso top, right, bottom, left (riga 17)
- Assegnare alla variabile face_image i valori delle sezioni che avevamo ritagliato a riga 17 dall’immagine originale caricata a riga 8
- Richiamare il metodo fromarray(face_image) dell’oggetto Image, estratto dal modulo PIL, e inserirlonella variabile pil_image (riga 21)
- richiamare un visualizzatore di immagini attraverso il metodo pil_image.show() (riga22)
Considerazioni finali
Python potrà non rappresentarfe il linguaggio più veloce del West, ma dispone di moduli e librrie particolarmente efficienti, che permettono all’utente finale una prototipazione rapida ed efficace. Nel caso specifico, con una manciata di sitruzioni abbiamo visto come “ritagliare” da una foto la sezione relativa ai volti, senza utilizzare (esplicitamente) nemmeno una riga di codice per il machine learning.
Prossimamente vedremo come estendere tali caratteristiche per ottenere risultati ancor più sorprendenti. Continuate a seguirci!
Join our groups on Telegram…