Il riconoscimento facciale (face detection) è una tecnica di intelligenza artificiale utilizzata per verificare l’identità di una persona a partire da una o più immagini che la ritraggono. Come potrete immaginare, i campi di applicazione sono immensi: dalla sicurezza (riconoscimento della persona che si trova di fronte al sensore) alla catalogazione delle immagini (molti strumenti, come Google Foto e Facebook, permettono di riconoscere le persone nelle foto). Alcune compagnie aeree utilizzano il riconoscimento facciale per l’imbarco dei passeggeri e quasi tutti i modelli di cellulari utilizzano il riconoscimento facciale per lo sblocco del dispositivo.
Nel nostro esercizio vedremo come identificare (in maniera generica) un volto in un’immagine o in un video: vi sorprenderà come sia possibile ottenere questi risultati tramite pochissime righe di codice in R e sfruttando la famosa libreria OpenCV.
Cos’è OpenCV
OpenCV è una libreria Open Source di Machine Learning e Computer Vision, contenente diverse migliaia di algoritmi, che hanno ottime prestazioni in termini di accuratezza e velocità. Scritto in C++, possiede interfacce per i principali linguaggi utilizzati per il machine learning, compreso R, dove il package opencv (https://cran.r-project.org/web/packages/opencv/) si occupa proprio di fare da collegamento con la libreria.
Face Detection con R
Tra i vari algoritmi, esamineremo quelli di riconoscimento del volto (face detection) ed elaborazione in tempo reale delle immagini provenienti dalla webcam. Il riconoscimento dei volti è parte della visione artificiale (o computer vision), il cui scopo è riconoscere o rilevare volti umani in una qualsiasi immagine digitale ed appartiene al più ampio settore dell’Object Detection, dove si cerca più in generale di individuare e classificare specifici oggetti (animali, automobili, esseri umani, ecc).
Iniziamo con l’installazione del package:
> install.packages("opencv")
> library(opencv)
Proviamo ora ad effettuare un riconoscimento abbastanza facile: quello del nostro volto! È necessario, ovviamente, che siate in possesso di una webcam qualsiasi sul vostro pc. La funzione ocv_picture() preleva dalla webcam un’immagine, che salveremo nella variabile test1. Con la funzione ocv_write() salviamo l’immagine nel file test1.png. Sistematevi di fronte alla webcam ed eseguite il codice:
> # Face detection da webcam
> test1 <- ocv_picture()
> ocv_write(test1, 'test1.png')
A questo punto utilizziamo la funzione ocv_face() che prenderà in input l’immagine appena prelevata e proverà ad effettuare il riconoscimento del volto:
> test1_faces <- ocv_face(test1)
> ocv_write(test1_faces, 'test1_faces.png')
Potrete osservare che nel file test1_faces.png il vostro viso sarà circondato da un cerchio. Riconoscere un viso nella foto di un viso, in effetti, non è così complicato. Proviamo ad aumentare la difficoltà e scarichiamo una qualsiasi foto con tanti volti da internet:
Chiamiamola test2.jpg e posizioniamola nella cartella di lavoro di R. Eseguiamo:
> # Face detection da immagine
> test2 <- ocv_read('test2.jpg')
> test2_faces <- ocv_face(test2)
> ocv_write(test2_faces, 'test2_faces.jpg')
“C:\\..\\test2_faces.jpg”
> test2_faces
<pointer: 0x0000021a6f3fc270>
attr(,”class”)
1 “opencv-image”
Il risultato sarà:
Real Time Face Detection
Potrete notare che quasi tutti i volti sono stati correttamente identificati. L’identificazione può avvenire anche live, analizzando in tempo reale il flusso proveniente dalla webcam:
> # Live face detection
> ocv_video(ocv_face)
Oppure possiamo applicare filtri live:
> # Applica filtri
> ocv_video(ocv_edges)
> ocv_video(ocv_knn)
> ocv_video(ocv_facemask)
> ocv_video(ocv_mog2)
> ocv_video(ocv_stylize)
> ocv_video(ocv_sketch)
Elaborazione delle immagini
Proviamo ad applicare vari filtri ad un’immagine:
> # Filtri su immagini
> test3 <- ocv_read('test3.jpg')
> ocv_sketch(test3, color = T)
> ocv_blur(test3, ksize = 15)
> ocv_markers(test3)
> ocv_stylize(test3)
Per ottenere, invece, le coordinate della maschera:
> # coordinate della maschera
> facemask <- ocv_facemask(test3)
> attr(facemask, 'faces')
radius x y
1 82 418 200
Ti interessa il Machine Learning?
Tutto quello che devi conoscere (e molto di più) puoi trovarlo nel mio libro Data Science e Machine Learning, disponibile sia in versione cartacea che digitale. Puoi acquistarlo da qui:
Acquista il libro su Amazon
Acquista l’ebook su Kindle
Acquista l’ebook su Kobo
Acquista l’ebook su Play Libri
Leave a Reply