SlideShare a Scribd company logo
1 of 27
Mettiamoci la faccia:
face detection, recognition e landmark per
applicazioni interattive
Massimo Bonanni
codetailor.blogspot.com
massimo.bonanni@tiscali.it
@massimobonanni
Agenda
La libreria libpxcclr.dll
La classe UtilMPipeline
La nostra classe Pipeline
Recuperare l’immagine
Face detection
Face landmark
Face recognition
La libreria libpxcclr.dll
Applications

C# Port
Core Framework
PXCMSession
PXCMImage
PXCMAudio
I/O
PXCMCapture
Algorithms
PXCMGesture
PXCMFaceAnalysis
PXCMVoiceRecognition
PXCMVoiceTTS
Pipeline
UtilMCapture
UtilMPipeline

Processing* Port

openFrameworks* Port

Unity* Port

PXCUPipeline (C)

UtilPipeline (C++)

UtilCapture (C++)
C++

Core Framework
PXCSession
PXCImage
PXCAudio

I/O
PXCCapture

Algorithms
PXCGesture
PXCFaceAnalysis
PXCVoiceRecognition
PXCVoiceTTS
La classe UtilMPipeline
La classe UtilMPipeline
(controparte .NET della
UtilPipeline C++) permette
l’accesso alle funzionalità
esposte dalla piattaforma
Intel© Perceptual
Computing
La classe UtilMPipeline
• LoopFrames: da «il via» al funzionamento
della pipeline. E’ un metodo bloccante
rilasciato quando la pipeline viene rilasciata;
• EnableXXX: abilita la pipeline all’utilizzo
della funzionalità XXX, ad esempio
EnableImage() abilita lo stream video;
• PauseXXX: sospende la funzionalità
XXX, ad esempio PauseFaceLocation
sospende la funzionalità di Face Detection.
La nostra classe Pipeline
Uno dei metodi per utilizzare le funzionalità
della piattaforma è implementare la nostra
classe pipeline derivando dalla
UtilMPipeline.
La nostra classe Pipeline
Nel costruttore della nostra Pipeline
possiamo abilitare le funzionalità che ci
servono.
Private ColorFormat As PXCMImage.ColorFormat = PXCMImage.ColorFormat.COLOR_FORMAT_RGB24
Public Sub New()
MyBase.New()
EnableImage(ColorFormat)
End Sub
Recuperare l’immagine
Per recuperare l’immagine fornita dalla cam, si può:
• Eseguire l’override del metodo OnImage()
Public Overrides Sub OnImage(image As PXCMImage)
MyBase.OnImage(image)
ElaborateImage(image)
End Sub

•

Eseguire l’override del metodo OnNewFrame()
Public Overrides Function OnNewFrame() As Boolean
If Not MyBase.OnNewFrame Then Return False
Dim image As PXCMImage = QueryImage(PXCMImage.ImageType.IMAGE_TYPE_COLOR)
If image IsNot Nothing Then
ElaborateImage(image)
End If
Return True
End Function

Il metodo OnNewFrame viene richiamato ogni volta che è disponibile
un nuovo frame da elaborare (non solo imagine).
Recuperare l’immagine
La classe PCXMImage (wrapper della
PCXImage C++) definisce l’imagine
Perceptual, contiene classi innestate per
la gestione delle immagini e fornisce
strumenti per la conversione in imagine
del framework.
Protected Sub ElaborateImage(ByVal image As PXCMImage)
Dim data As PXCMImage.ImageData
Dim pcmStatus = image.AcquireAccess(PXCMImage.Access.ACCESS_READ,
ColorFormat, data)
If pcmStatus = pxcmStatus.PXCM_STATUS_NO_ERROR Then
Dim bitmap As Bitmap = data.ToBitmap(640, 480)
'
'
End If
End Sub
Face detection, recognition e landmark
per applicazioni interattive

DEMO
ImageCamPipeline
Face detection – Cos’è
Tecnologia informatica che determina le
posizioni e le dimensioni di volti umani
all'interno di immagini (o di video).
Rileva le caratteristiche facciali e ignora tutto
il resto, come edifici, alberi, corpi.
Face Detection è un caso specifico della
tecnologia che va sotto il nome di ObjectClass Detection (dove la classe di oggetto
è il volto umano).
Face detection
Per utilizzare la funzionalità di Face
Detection, è necessario abilitarla con il
metodo EnableFaceLocation() della
UtilMPipeline.
Il comando EnableFaceLocation() fa in
modo che, nel momento in cui andremo a
richiedere le funzionalità di face
location, queste siano disponibili (e non si
ottenga un errore).
Face detection
Attivata la localizzazione facciale, l'algoritmo da
seguire per verificare la presenza di una "faccia"
è il seguente:
1.

recuperare l'istanza della classe
PXCMFaceAnalysis che si occupa
dell'effettivo algoritmo di face detection;

2.

per ogni indice dell'eventuale Face da
recuperare, eseguire una query per capire
quale è il suo identificativo;

3.

tramite l'identificativo si recuperano (se ci
sono) i dati veri e propri della posizione del
viso.

Il posto più adatto dove eseguire il tutto è nel
metodo OnNewFrame() della pipeline.
Face detection
La struttura
PXCMFaceAnalysis.Detection.Data contiene i
dati relativi alla faccia rilevata:
•

rectangle: struttura PXCRectU32 che
individua fisicamente la faccia rilevata. La
struttura è composta dalle coordinate x e y
del punto in alto a sinistra, dall'altezza e
dalla larghezza;

•

fid: l'identificativo della faccia rilevata;

•

confidence: indica la precisione con cui la
faccia è stata rilevata. E' un valore intero da
0 a 100;

•

viewAngle: contiene l'angolo che la faccia
rilevata forma con la telecamera. Si tratta di
un enumerazione a maschera di bit.
Face detection, recognition e landmark
per applicazioni interattive

DEMO
Face Detection
Face landmark

I landmark sono i punti salienti di un volto.
Intel Perceptual Computing consente di
recuperare 6 o 7 punti.
Per ogni punto vengono fornite le tre
coordinate spaziali.
Face landmark
Assieme ai Landmark possono
essere recuperate anche le
informazioni relative alla
posizione del volto nello spazio
(Pose).

Per poter recuperare i Face Landmark, è necessario
richiamare il metodo EnableFaceLandmark() della
UtilMPipeline.
Face landmark
L’algoritmo per il recupero dei landmark è il seguente:
1.

recuperare l'istanza della classe
PXCMFaceAnalysis che si occupa dell'effettivo
algoritmo di face detection e di face landmark;

2.

per ogni indice della faccia di cui recuperare le
informazioni, eseguire una query per ottenere
l’identificativo;

3.

se la faccia è disponibile, recuperare l'istanza
della classe PXCMFaceAnalysis.Landmark da
utilizzare per il recupero delle informazioni;

4.

abilitare il profilo della
PXCMFaceAnalysis.Landmark per il recupero
dei 7 (o dei 6) punti della faccia;

5.

tramite l'identificativo si recuperano, se
disponibili, le informazioni relative ai landmark.
Face landmark
La struttura
PXCMFaceAnalysis.Landmark.LandmarkData
contiene i dati al singolo landmark:
•

label: valore dell'enumerazione
PXCMFaceAnalysis.Landmark.Label indicante
il tipo di punto in esame. Ad esempio il valore
LABEL_LEFT_EYE_OUTER_CORNER
corrisponde all'angolo esterno dell'occhio
sinistro;

•

fid: l'identificativo della faccia rilevata;

•

position: struttura PXCMPoint3DF32 in cui
sono contenute le coordinate spaziali del punto
rispetto alle coordinate dell'immagine recuperata
dalla web cam. Le coordinate bidimensionali x e
y sono disponibili anche utilizzando una normale
web cam fornita di serie su un notebook, mentre
la coordinata z è disponibile solo con la Creative
Cam;
Face landmark
La struttura dati
PXCMFaceAnalysis.Landmark.PoseData contiene i
valori di pose:
•

fid: identificativo della faccia rilevata;

•

pitch: valore del beccheggio cioè della rotazione
della faccia lungo il proprio asse trasversale
(quello, per intenderci, che passa per le orecchie);

•

roll: valore del rollio cioè della rotazione della
faccia lungo il proprio asse longitudinale (quello,
che esce dal naso);

•

yaw: valore dell'imbardata cioè della rotazione
della faccia lungo il suo asse verticale (quello, che
esce dalla parte superiore della testa).
Face detection, recognition e landmark
per applicazioni interattive

DEMO
Face Landmark
Face recognition
La parola d'ordine del face recognition secondo
Perceptual Computing è face model.
Una volta individuata la presenza di una faccia davanti
allo schermo, possiamo utilizzare le funzionalità dell'SDK
per generare un modello della faccia. Utilizzando il
modello possiamo verificare se la faccia è o meno nota.
Face recognition
Per poter "riconoscere" un volto dobbiamo
individuare una faccia, generare il suo modello
e confrontare tale modello con una serie di
modelli noti.
Nel momento in cui abbiamo a disposizione
l'identificativo della faccia, possiamo utilizzare il
metodo CreateModel() della classe
PXCMFaceAnalysis.Recognition per generare
il modello
(PXCMFaceAnalysis.Recognition.Model).
Il modello, infine, prevede il metodo Compare()
in grado di dirci se il modello su cui stiamo
agendo è presente in un array di modelli passati
per argomento.
Face recognition
La classe
PXCMFaceAnalysis.Recognition.Model
mette a disposizione il metodo Serialize() per
ottenere la rappresentazione come array di
byte del modello stesso.
La funzione inversa, la deserializzazione, si
può ottenere con il metodo
DeserializeModel().

La dimensione del modello (in byte) è
contenuta nel profilo attivo della classe
PXCMFaceAnalysis.Recognition.
Face recognition
Dato un modello, per ottenere la sua rappresentazione in byte:
1. Recuperare l'istanza della classe PXCMFaceAnalysis;
2. Ottenere, da quest'ultima, l'istanza della classe
PXCMFaceAnalysis.Recognition;
3. Recuperare il profilo attivo della
PXCMFaceAnalysis.Recognition;
4. Dimensionare opportunamente il buffer che conterrà la
rappresentazione binaria del modello;
5. Recuperare la rappresentazione binaria tramite il metodo
serialize.
Face detection, recognition e landmark
per applicazioni interattive

DEMO
Face Recognition
Riferimenti
Intel Development Zone – Perceptual
Computing
http://software.intel.com/it-it/vcsource/tools/perceptualcomputing-sdk

 Intel Development Zone – Forum
http://software.intel.com/en-us/forums/intel-perceptualcomputing-sdk

 Articoli in italiano – CodeTailor
http://codetailor.blogspot.it/p/intel-perceptual-computing.html

More Related Content

Similar to Mettiamoci la faccia: face detection, recognition e landmark per applicazioni interattive

A static Analyzer for Finding Dynamic Programming Errors
A static Analyzer for Finding Dynamic Programming ErrorsA static Analyzer for Finding Dynamic Programming Errors
A static Analyzer for Finding Dynamic Programming ErrorsLino Possamai
 
Non Conventional Android Programming (Italiano)
Non Conventional Android Programming (Italiano)Non Conventional Android Programming (Italiano)
Non Conventional Android Programming (Italiano)Davide Cerbo
 
Mocking Objects Practices
Mocking Objects PracticesMocking Objects Practices
Mocking Objects PracticesGrUSP
 
Simulazione di un sistema fisico ts inginf
Simulazione di un sistema fisico ts inginfSimulazione di un sistema fisico ts inginf
Simulazione di un sistema fisico ts inginfIonutAlexandruPascar
 
Mobile APPs con Objective-C (iOS 3.1+) - Day 01/02
Mobile APPs con Objective-C (iOS 3.1+) - Day 01/02Mobile APPs con Objective-C (iOS 3.1+) - Day 01/02
Mobile APPs con Objective-C (iOS 3.1+) - Day 01/02Alberto Pasca
 
Netbeans e Xdebug per debugging e profiling di applicazioni PHP
Netbeans e Xdebug per debugging e profiling di applicazioni PHPNetbeans e Xdebug per debugging e profiling di applicazioni PHP
Netbeans e Xdebug per debugging e profiling di applicazioni PHPGiorgio Cefaro
 

Similar to Mettiamoci la faccia: face detection, recognition e landmark per applicazioni interattive (6)

A static Analyzer for Finding Dynamic Programming Errors
A static Analyzer for Finding Dynamic Programming ErrorsA static Analyzer for Finding Dynamic Programming Errors
A static Analyzer for Finding Dynamic Programming Errors
 
Non Conventional Android Programming (Italiano)
Non Conventional Android Programming (Italiano)Non Conventional Android Programming (Italiano)
Non Conventional Android Programming (Italiano)
 
Mocking Objects Practices
Mocking Objects PracticesMocking Objects Practices
Mocking Objects Practices
 
Simulazione di un sistema fisico ts inginf
Simulazione di un sistema fisico ts inginfSimulazione di un sistema fisico ts inginf
Simulazione di un sistema fisico ts inginf
 
Mobile APPs con Objective-C (iOS 3.1+) - Day 01/02
Mobile APPs con Objective-C (iOS 3.1+) - Day 01/02Mobile APPs con Objective-C (iOS 3.1+) - Day 01/02
Mobile APPs con Objective-C (iOS 3.1+) - Day 01/02
 
Netbeans e Xdebug per debugging e profiling di applicazioni PHP
Netbeans e Xdebug per debugging e profiling di applicazioni PHPNetbeans e Xdebug per debugging e profiling di applicazioni PHP
Netbeans e Xdebug per debugging e profiling di applicazioni PHP
 

More from Massimo Bonanni

Empower every Azure Function to achieve more!!
Empower every Azure Function to achieve more!!Empower every Azure Function to achieve more!!
Empower every Azure Function to achieve more!!Massimo Bonanni
 
Durable Functions vs Logic App : la guerra dei workflow!!
Durable Functions vs Logic App : la guerra dei workflow!!Durable Functions vs Logic App : la guerra dei workflow!!
Durable Functions vs Logic App : la guerra dei workflow!!Massimo Bonanni
 
Stateful pattern con Azure Functions
Stateful pattern con Azure FunctionsStateful pattern con Azure Functions
Stateful pattern con Azure FunctionsMassimo Bonanni
 
Architetture Serverless con SQL Server e Azure Functions
Architetture Serverless con SQL Server e Azure FunctionsArchitetture Serverless con SQL Server e Azure Functions
Architetture Serverless con SQL Server e Azure FunctionsMassimo Bonanni
 
Tutto quello che avreste voluto sapere sull'API Management (e non avete mai o...
Tutto quello che avreste voluto sapere sull'API Management (e non avete mai o...Tutto quello che avreste voluto sapere sull'API Management (e non avete mai o...
Tutto quello che avreste voluto sapere sull'API Management (e non avete mai o...Massimo Bonanni
 
Stateful patterns in Azure Functions
Stateful patterns in Azure FunctionsStateful patterns in Azure Functions
Stateful patterns in Azure FunctionsMassimo Bonanni
 
The art of Azure Functions (unit) testing and monitoring
The art of Azure Functions (unit) testing and monitoringThe art of Azure Functions (unit) testing and monitoring
The art of Azure Functions (unit) testing and monitoringMassimo Bonanni
 
Empower every Azure Function to achieve more!!
Empower every Azure Function to achieve more!!Empower every Azure Function to achieve more!!
Empower every Azure Function to achieve more!!Massimo Bonanni
 
The art of Azure Functions (unit) testing and monitoring
The art of Azure Functions (unit) testing and monitoringThe art of Azure Functions (unit) testing and monitoring
The art of Azure Functions (unit) testing and monitoringMassimo Bonanni
 
Everything you always wanted to know about API Management (but were afraid to...
Everything you always wanted to know about API Management (but were afraid to...Everything you always wanted to know about API Management (but were afraid to...
Everything you always wanted to know about API Management (but were afraid to...Massimo Bonanni
 
Workflow as code with Azure Durable Functions
Workflow as code with Azure Durable FunctionsWorkflow as code with Azure Durable Functions
Workflow as code with Azure Durable FunctionsMassimo Bonanni
 
Xmas Serverless Transformation: when the elf doesn’t scale!
Xmas Serverless Transformation: when the elf doesn’t scale!Xmas Serverless Transformation: when the elf doesn’t scale!
Xmas Serverless Transformation: when the elf doesn’t scale!Massimo Bonanni
 
Welcome Azure Functions 2. 0
Welcome Azure Functions 2. 0Welcome Azure Functions 2. 0
Welcome Azure Functions 2. 0Massimo Bonanni
 
Discovering the Service Fabric's actor model
Discovering the Service Fabric's actor modelDiscovering the Service Fabric's actor model
Discovering the Service Fabric's actor modelMassimo Bonanni
 
Testing a Service Fabric solution and live happy!!
Testing a Service Fabric solution and live happy!!Testing a Service Fabric solution and live happy!!
Testing a Service Fabric solution and live happy!!Massimo Bonanni
 
Discovering the Service Fabric's actor model
Discovering the Service Fabric's actor modelDiscovering the Service Fabric's actor model
Discovering the Service Fabric's actor modelMassimo Bonanni
 
Soluzioni IoT con le tecnologie Microsoft
Soluzioni IoT con le tecnologie MicrosoftSoluzioni IoT con le tecnologie Microsoft
Soluzioni IoT con le tecnologie MicrosoftMassimo Bonanni
 
Project Gesture & Real Sense: il potere nelle mani!!
Project Gesture & Real Sense: il potere nelle mani!!Project Gesture & Real Sense: il potere nelle mani!!
Project Gesture & Real Sense: il potere nelle mani!!Massimo Bonanni
 

More from Massimo Bonanni (20)

Empower every Azure Function to achieve more!!
Empower every Azure Function to achieve more!!Empower every Azure Function to achieve more!!
Empower every Azure Function to achieve more!!
 
Durable Functions vs Logic App : la guerra dei workflow!!
Durable Functions vs Logic App : la guerra dei workflow!!Durable Functions vs Logic App : la guerra dei workflow!!
Durable Functions vs Logic App : la guerra dei workflow!!
 
Stateful pattern con Azure Functions
Stateful pattern con Azure FunctionsStateful pattern con Azure Functions
Stateful pattern con Azure Functions
 
Architetture Serverless con SQL Server e Azure Functions
Architetture Serverless con SQL Server e Azure FunctionsArchitetture Serverless con SQL Server e Azure Functions
Architetture Serverless con SQL Server e Azure Functions
 
IoT in salsa serverless
IoT in salsa serverlessIoT in salsa serverless
IoT in salsa serverless
 
Tutto quello che avreste voluto sapere sull'API Management (e non avete mai o...
Tutto quello che avreste voluto sapere sull'API Management (e non avete mai o...Tutto quello che avreste voluto sapere sull'API Management (e non avete mai o...
Tutto quello che avreste voluto sapere sull'API Management (e non avete mai o...
 
Stateful patterns in Azure Functions
Stateful patterns in Azure FunctionsStateful patterns in Azure Functions
Stateful patterns in Azure Functions
 
IoT in salsa Serverless
IoT in salsa ServerlessIoT in salsa Serverless
IoT in salsa Serverless
 
The art of Azure Functions (unit) testing and monitoring
The art of Azure Functions (unit) testing and monitoringThe art of Azure Functions (unit) testing and monitoring
The art of Azure Functions (unit) testing and monitoring
 
Empower every Azure Function to achieve more!!
Empower every Azure Function to achieve more!!Empower every Azure Function to achieve more!!
Empower every Azure Function to achieve more!!
 
The art of Azure Functions (unit) testing and monitoring
The art of Azure Functions (unit) testing and monitoringThe art of Azure Functions (unit) testing and monitoring
The art of Azure Functions (unit) testing and monitoring
 
Everything you always wanted to know about API Management (but were afraid to...
Everything you always wanted to know about API Management (but were afraid to...Everything you always wanted to know about API Management (but were afraid to...
Everything you always wanted to know about API Management (but were afraid to...
 
Workflow as code with Azure Durable Functions
Workflow as code with Azure Durable FunctionsWorkflow as code with Azure Durable Functions
Workflow as code with Azure Durable Functions
 
Xmas Serverless Transformation: when the elf doesn’t scale!
Xmas Serverless Transformation: when the elf doesn’t scale!Xmas Serverless Transformation: when the elf doesn’t scale!
Xmas Serverless Transformation: when the elf doesn’t scale!
 
Welcome Azure Functions 2. 0
Welcome Azure Functions 2. 0Welcome Azure Functions 2. 0
Welcome Azure Functions 2. 0
 
Discovering the Service Fabric's actor model
Discovering the Service Fabric's actor modelDiscovering the Service Fabric's actor model
Discovering the Service Fabric's actor model
 
Testing a Service Fabric solution and live happy!!
Testing a Service Fabric solution and live happy!!Testing a Service Fabric solution and live happy!!
Testing a Service Fabric solution and live happy!!
 
Discovering the Service Fabric's actor model
Discovering the Service Fabric's actor modelDiscovering the Service Fabric's actor model
Discovering the Service Fabric's actor model
 
Soluzioni IoT con le tecnologie Microsoft
Soluzioni IoT con le tecnologie MicrosoftSoluzioni IoT con le tecnologie Microsoft
Soluzioni IoT con le tecnologie Microsoft
 
Project Gesture & Real Sense: il potere nelle mani!!
Project Gesture & Real Sense: il potere nelle mani!!Project Gesture & Real Sense: il potere nelle mani!!
Project Gesture & Real Sense: il potere nelle mani!!
 

Recently uploaded

Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...
Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...
Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...Associazione Digital Days
 
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...Associazione Digital Days
 
Programma Biennale Tecnologia 2024 Torino
Programma Biennale Tecnologia 2024 TorinoProgramma Biennale Tecnologia 2024 Torino
Programma Biennale Tecnologia 2024 TorinoQuotidiano Piemontese
 
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...Associazione Digital Days
 
Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...
Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...
Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...Associazione Digital Days
 
Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...
Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...
Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...Associazione Digital Days
 
Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”
Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”
Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”Associazione Digital Days
 
Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...
Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...
Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...Associazione Digital Days
 
Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...
Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...
Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...Associazione Digital Days
 

Recently uploaded (9)

Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...
Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...
Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...
 
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...
 
Programma Biennale Tecnologia 2024 Torino
Programma Biennale Tecnologia 2024 TorinoProgramma Biennale Tecnologia 2024 Torino
Programma Biennale Tecnologia 2024 Torino
 
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...
 
Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...
Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...
Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...
 
Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...
Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...
Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...
 
Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”
Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”
Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”
 
Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...
Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...
Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...
 
Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...
Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...
Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...
 

Mettiamoci la faccia: face detection, recognition e landmark per applicazioni interattive

  • 1. Mettiamoci la faccia: face detection, recognition e landmark per applicazioni interattive Massimo Bonanni codetailor.blogspot.com massimo.bonanni@tiscali.it @massimobonanni
  • 2. Agenda La libreria libpxcclr.dll La classe UtilMPipeline La nostra classe Pipeline Recuperare l’immagine Face detection Face landmark Face recognition
  • 3. La libreria libpxcclr.dll Applications C# Port Core Framework PXCMSession PXCMImage PXCMAudio I/O PXCMCapture Algorithms PXCMGesture PXCMFaceAnalysis PXCMVoiceRecognition PXCMVoiceTTS Pipeline UtilMCapture UtilMPipeline Processing* Port openFrameworks* Port Unity* Port PXCUPipeline (C) UtilPipeline (C++) UtilCapture (C++) C++ Core Framework PXCSession PXCImage PXCAudio I/O PXCCapture Algorithms PXCGesture PXCFaceAnalysis PXCVoiceRecognition PXCVoiceTTS
  • 4. La classe UtilMPipeline La classe UtilMPipeline (controparte .NET della UtilPipeline C++) permette l’accesso alle funzionalità esposte dalla piattaforma Intel© Perceptual Computing
  • 5. La classe UtilMPipeline • LoopFrames: da «il via» al funzionamento della pipeline. E’ un metodo bloccante rilasciato quando la pipeline viene rilasciata; • EnableXXX: abilita la pipeline all’utilizzo della funzionalità XXX, ad esempio EnableImage() abilita lo stream video; • PauseXXX: sospende la funzionalità XXX, ad esempio PauseFaceLocation sospende la funzionalità di Face Detection.
  • 6. La nostra classe Pipeline Uno dei metodi per utilizzare le funzionalità della piattaforma è implementare la nostra classe pipeline derivando dalla UtilMPipeline.
  • 7. La nostra classe Pipeline Nel costruttore della nostra Pipeline possiamo abilitare le funzionalità che ci servono. Private ColorFormat As PXCMImage.ColorFormat = PXCMImage.ColorFormat.COLOR_FORMAT_RGB24 Public Sub New() MyBase.New() EnableImage(ColorFormat) End Sub
  • 8. Recuperare l’immagine Per recuperare l’immagine fornita dalla cam, si può: • Eseguire l’override del metodo OnImage() Public Overrides Sub OnImage(image As PXCMImage) MyBase.OnImage(image) ElaborateImage(image) End Sub • Eseguire l’override del metodo OnNewFrame() Public Overrides Function OnNewFrame() As Boolean If Not MyBase.OnNewFrame Then Return False Dim image As PXCMImage = QueryImage(PXCMImage.ImageType.IMAGE_TYPE_COLOR) If image IsNot Nothing Then ElaborateImage(image) End If Return True End Function Il metodo OnNewFrame viene richiamato ogni volta che è disponibile un nuovo frame da elaborare (non solo imagine).
  • 9. Recuperare l’immagine La classe PCXMImage (wrapper della PCXImage C++) definisce l’imagine Perceptual, contiene classi innestate per la gestione delle immagini e fornisce strumenti per la conversione in imagine del framework. Protected Sub ElaborateImage(ByVal image As PXCMImage) Dim data As PXCMImage.ImageData Dim pcmStatus = image.AcquireAccess(PXCMImage.Access.ACCESS_READ, ColorFormat, data) If pcmStatus = pxcmStatus.PXCM_STATUS_NO_ERROR Then Dim bitmap As Bitmap = data.ToBitmap(640, 480) ' ' End If End Sub
  • 10. Face detection, recognition e landmark per applicazioni interattive DEMO ImageCamPipeline
  • 11. Face detection – Cos’è Tecnologia informatica che determina le posizioni e le dimensioni di volti umani all'interno di immagini (o di video). Rileva le caratteristiche facciali e ignora tutto il resto, come edifici, alberi, corpi. Face Detection è un caso specifico della tecnologia che va sotto il nome di ObjectClass Detection (dove la classe di oggetto è il volto umano).
  • 12. Face detection Per utilizzare la funzionalità di Face Detection, è necessario abilitarla con il metodo EnableFaceLocation() della UtilMPipeline. Il comando EnableFaceLocation() fa in modo che, nel momento in cui andremo a richiedere le funzionalità di face location, queste siano disponibili (e non si ottenga un errore).
  • 13. Face detection Attivata la localizzazione facciale, l'algoritmo da seguire per verificare la presenza di una "faccia" è il seguente: 1. recuperare l'istanza della classe PXCMFaceAnalysis che si occupa dell'effettivo algoritmo di face detection; 2. per ogni indice dell'eventuale Face da recuperare, eseguire una query per capire quale è il suo identificativo; 3. tramite l'identificativo si recuperano (se ci sono) i dati veri e propri della posizione del viso. Il posto più adatto dove eseguire il tutto è nel metodo OnNewFrame() della pipeline.
  • 14. Face detection La struttura PXCMFaceAnalysis.Detection.Data contiene i dati relativi alla faccia rilevata: • rectangle: struttura PXCRectU32 che individua fisicamente la faccia rilevata. La struttura è composta dalle coordinate x e y del punto in alto a sinistra, dall'altezza e dalla larghezza; • fid: l'identificativo della faccia rilevata; • confidence: indica la precisione con cui la faccia è stata rilevata. E' un valore intero da 0 a 100; • viewAngle: contiene l'angolo che la faccia rilevata forma con la telecamera. Si tratta di un enumerazione a maschera di bit.
  • 15. Face detection, recognition e landmark per applicazioni interattive DEMO Face Detection
  • 16. Face landmark I landmark sono i punti salienti di un volto. Intel Perceptual Computing consente di recuperare 6 o 7 punti. Per ogni punto vengono fornite le tre coordinate spaziali.
  • 17. Face landmark Assieme ai Landmark possono essere recuperate anche le informazioni relative alla posizione del volto nello spazio (Pose). Per poter recuperare i Face Landmark, è necessario richiamare il metodo EnableFaceLandmark() della UtilMPipeline.
  • 18. Face landmark L’algoritmo per il recupero dei landmark è il seguente: 1. recuperare l'istanza della classe PXCMFaceAnalysis che si occupa dell'effettivo algoritmo di face detection e di face landmark; 2. per ogni indice della faccia di cui recuperare le informazioni, eseguire una query per ottenere l’identificativo; 3. se la faccia è disponibile, recuperare l'istanza della classe PXCMFaceAnalysis.Landmark da utilizzare per il recupero delle informazioni; 4. abilitare il profilo della PXCMFaceAnalysis.Landmark per il recupero dei 7 (o dei 6) punti della faccia; 5. tramite l'identificativo si recuperano, se disponibili, le informazioni relative ai landmark.
  • 19. Face landmark La struttura PXCMFaceAnalysis.Landmark.LandmarkData contiene i dati al singolo landmark: • label: valore dell'enumerazione PXCMFaceAnalysis.Landmark.Label indicante il tipo di punto in esame. Ad esempio il valore LABEL_LEFT_EYE_OUTER_CORNER corrisponde all'angolo esterno dell'occhio sinistro; • fid: l'identificativo della faccia rilevata; • position: struttura PXCMPoint3DF32 in cui sono contenute le coordinate spaziali del punto rispetto alle coordinate dell'immagine recuperata dalla web cam. Le coordinate bidimensionali x e y sono disponibili anche utilizzando una normale web cam fornita di serie su un notebook, mentre la coordinata z è disponibile solo con la Creative Cam;
  • 20. Face landmark La struttura dati PXCMFaceAnalysis.Landmark.PoseData contiene i valori di pose: • fid: identificativo della faccia rilevata; • pitch: valore del beccheggio cioè della rotazione della faccia lungo il proprio asse trasversale (quello, per intenderci, che passa per le orecchie); • roll: valore del rollio cioè della rotazione della faccia lungo il proprio asse longitudinale (quello, che esce dal naso); • yaw: valore dell'imbardata cioè della rotazione della faccia lungo il suo asse verticale (quello, che esce dalla parte superiore della testa).
  • 21. Face detection, recognition e landmark per applicazioni interattive DEMO Face Landmark
  • 22. Face recognition La parola d'ordine del face recognition secondo Perceptual Computing è face model. Una volta individuata la presenza di una faccia davanti allo schermo, possiamo utilizzare le funzionalità dell'SDK per generare un modello della faccia. Utilizzando il modello possiamo verificare se la faccia è o meno nota.
  • 23. Face recognition Per poter "riconoscere" un volto dobbiamo individuare una faccia, generare il suo modello e confrontare tale modello con una serie di modelli noti. Nel momento in cui abbiamo a disposizione l'identificativo della faccia, possiamo utilizzare il metodo CreateModel() della classe PXCMFaceAnalysis.Recognition per generare il modello (PXCMFaceAnalysis.Recognition.Model). Il modello, infine, prevede il metodo Compare() in grado di dirci se il modello su cui stiamo agendo è presente in un array di modelli passati per argomento.
  • 24. Face recognition La classe PXCMFaceAnalysis.Recognition.Model mette a disposizione il metodo Serialize() per ottenere la rappresentazione come array di byte del modello stesso. La funzione inversa, la deserializzazione, si può ottenere con il metodo DeserializeModel(). La dimensione del modello (in byte) è contenuta nel profilo attivo della classe PXCMFaceAnalysis.Recognition.
  • 25. Face recognition Dato un modello, per ottenere la sua rappresentazione in byte: 1. Recuperare l'istanza della classe PXCMFaceAnalysis; 2. Ottenere, da quest'ultima, l'istanza della classe PXCMFaceAnalysis.Recognition; 3. Recuperare il profilo attivo della PXCMFaceAnalysis.Recognition; 4. Dimensionare opportunamente il buffer che conterrà la rappresentazione binaria del modello; 5. Recuperare la rappresentazione binaria tramite il metodo serialize.
  • 26. Face detection, recognition e landmark per applicazioni interattive DEMO Face Recognition
  • 27. Riferimenti Intel Development Zone – Perceptual Computing http://software.intel.com/it-it/vcsource/tools/perceptualcomputing-sdk  Intel Development Zone – Forum http://software.intel.com/en-us/forums/intel-perceptualcomputing-sdk  Articoli in italiano – CodeTailor http://codetailor.blogspot.it/p/intel-perceptual-computing.html