Face Detection in Python con YOLO

In questo tutorial ti mostro come fare Face Detection in Python con YOLO con una sola riga di codice (al massimo due)

Face Detection in Python
L’immagine è stata creata con l’AI di Bing.

Nell’ambito dei task di Computer Vision uno dei più importanti è quello dell’Object Detection.

Quando ti ho parlato di Computer Vision infatti ho elencato tre principali task:

  • Image Classification
  • Object Detection
  • Image Segmentation

Nell’articolo che ho dedicato all’Image Classification in un capitolo ho parlato della differenza con l’Object Detection, in quanto ho notato che spesso c’è confusione tra i due.

Possiamo definire l‘Object Detection come il riconoscimento di uno o più oggetti all’interno di un’immagine. Nel caso della Face Detection, come è facile immagine, l’oggetto che l’algoritmo cercherà di riconoscere è una o più facce.

Esistono molti algoritmi per compiere questa operazioni, alcuni più euristici e altri più “intelligenti”. L’algoritmo di cui ti parlo oggi fa parte di un modello molto famoso e importante di CV che si chiama YOLO.

Prima di entrare nel vivo di questo tutorial, ti consiglio il mio profilo LinkedIn e Medium, dove parlo spesso di questi temi. Se ti interessa, ho parlato proprio di Computer Vision in questi due articoli: A Gentle Introduction to Computer Vision e Unlock the Power of Computer Vision using Python: 7 Essential OpenCV Features You Need to Know.

YOLO e Computer Vision in Python

Probabilmente conoscerai già questo nome. Si tratta infatti di uno dei modelli più famosi del pianeta e probabilmente ne hai sentito parlare anche se non hai lavorato direttamente nell’ambito CV.

YOLO, acronimo di “You Only Look Once”, è un algoritmo di Object Detection utilizzato nel Machine Learning. L’obiettivo di YOLO è individuare e classificare gli oggetti all’interno di un’immagine in tempo reale.

Nel tempo è stato addestrato anche per altri task, come per esempio l’Image Classification e l’Image Segmentation. Per esempio viene usato per riconoscere l’emozione sulla faccia di una persona (caso di IC), oppure per scontornare una foto (IS).

La caratteristica principale di YOLO è che esegue la rilevazione degli oggetti in un’unica passata sull’immagine, contrariamente ad altri algoritmi che richiedono più passaggi.

Questo lo rende estremamente efficiente e veloce ed è il motivo che sta alla base del nome.

YOLO divide l’immagine in una griglia di celle e, per ogni cella, predice i bounding box degli oggetti presenti, insieme alla probabilità di appartenenza a una classe. Questo processo viene eseguito simultaneamente per tutte le celle dell’immagine.

Vediamo come possiamo usare YOLO per fare Face Detection in Python.

Face Detection in Python

Per prima cosa abbiamo bisogno di installare YOLO. Possiamo usare il package ultralytics, che ci fornirà una comodissima interfaccia Python al modello. Trovi tutte le informazioni su questo package qui.

Quindi prima cosa installiamo il package:

pip install ultralytics

Successivamente, devi scaricare il file del modello che trovi a questo link. Il modello si chiama yolov8m-face.pt e pesa circa 49 megabyte,

Parliamo un secondo del nome del modello:

  • V8: si tratta delle versione 8 dell’algoritmo. Se vuoi più informazioni sulle versioni, le trovi qui
  • m: la m sta per medium. Con YOLO infatti solitamente hai 5 size di modelli: nano (n), small (s), medium (m), large (l) ed x (extra).
  • face: l’algoritmo è un Face Detection quindi quel face sta per l’oggetto che l’algoritmo identifica.

Possiamo usare una singola riga o due righe di codice per il Face Detection in Python usando Yolo.

L’immagine che useremo per testare l’algoritmo è la seguente:

Face Detection in Python con yolo

Prima di iniziare, ricordati di aver scaricato il modello e di averlo posizionato nella working directory.

Face Detection in Python con Yolo: 1 riga

Da Google Colab o da un qualunque Notebook, ci basterà far girare questo codice in una cella:

!yolo task=detect mode=predict model=yolov8m-face.pt conf=0.25 source='https://ultralytics.com/images/zidane.jpg'

Ricordati di aver scaricato il modello e di averlo posizionato nella working directory.

Face Detection in Python con Yolo: 2 righe

Da riga di comando come nel caso precedente è comodo ma è meno maneggiabile in un programma Python se poi vogliamo usare il modello in qualche modo.

La versione in due righe invece prevede di caricare il modello e poi lanciare il modello sull’immagine:

from ultralytics import YOLO


model = YOLO('yolov8m-face.pt')
results = model('https://ultralytics.com/images/zidane.jpg')

Se non consideriamo l’import, si tratta davvero di due righe di codice!

Output di YOLO

YOLO costruisce un path molto particolare per il salvataggio. Ti troverai questa alberatura di cartelle:

runs -> detect -> predict -> zidane.jpg

E l’output del nostro modello sarà, come per magia…

Face Detection in Python

Conclusioni

In questo tutorial ti ho fatto vedere come puoi applicare un algoritmo di Face Detection in Python utilizzando YOLO, il più importante modello di Computer Vision esistente.

Puoi trovare altri continuti simili nella home del blog Pulp Learning e sui miei canali social, in particolare LinkedIn e Medium.

Se ti è piaciuto questo articolo aiutami a diffondere il blog! Te ne sono molto grato 🙂