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

27
@ @ Mettiamoci la faccia: face detection, recognition e landmark per applicazioni interattive Massimo Bonanni codetailor.blogspot.com [email protected] @massimobonanni

description

Sessione su Face Detection, Face Recognition e Face Landmark con Intel Perceptual Computing SDK tenuta durante l'evento "Intel® Software Community Day" del 13/12/2013 a Roma.

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

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

@@Mettiamoci la faccia: face detection, recognition e landmark

per applicazioni interattive

Massimo Bonannicodetailor.blogspot.com

[email protected]

@massimobonanni

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

@La libreria libpxcclr.dllLa classe UtilMPipelineLa nostra classe PipelineRecuperare l’immagineFace detectionFace landmarkFace recognition

Agenda

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

@La libreria libpxcclr.dll

PXCUPipeline (C)

Core Framework I/O AlgorithmsPXCSession PXCCapture PXCGesturePXCImage PXCFaceAnalysisPXCAudio PXCVoiceRecognition

PXCVoiceTTS

UtilCapture (C++)

UtilPipeline (C++)

Processing* Port Unity* PortopenFrameworks* PortC# Port

Core FrameworkPXCMSessionPXCMImagePXCMAudioI/OPXCMCaptureAlgorithmsPXCMGesturePXCMFaceAnalysisPXCMVoiceRecognitionPXCMVoiceTTSPipelineUtilMCaptureUtilMPipeline

C++

Applications

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

@La classe UtilMPipeline (controparte .NET della UtilPipeline C++) permette l’accesso alle funzionalità esposte dalla piattaforma Intel© Perceptual Computing

La classe UtilMPipeline

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

@• 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 classe UtilMPipeline

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

@Uno dei metodi per utilizzare le funzionalità della piattaforma è implementare la nostra classe pipeline derivando dalla UtilMPipeline.

La nostra classe Pipeline

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

@Nel costruttore della nostra Pipeline possiamo abilitare le funzionalità che ci servono.

La nostra classe Pipeline

Private ColorFormat As PXCMImage.ColorFormat = PXCMImage.ColorFormat.COLOR_FORMAT_RGB24

Public Sub New() MyBase.New() EnableImage(ColorFormat)End Sub

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

@Per recuperare l’immagine fornita dalla cam, si può:• Eseguire l’override del metodo OnImage()

• Eseguire l’override del metodo OnNewFrame()

Il metodo OnNewFrame viene richiamato ogni volta che è disponibile un nuovo frame da elaborare (non solo imagine).

Recuperare l’immagine

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 TrueEnd Function

Public Overrides Sub OnImage(image As PXCMImage) MyBase.OnImage(image) ElaborateImage(image)End Sub

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

@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.

Recuperare l’immagine

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 IfEnd Sub

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

@Face detection, recognition e landmark per applicazioni interattive

DEMOImageCamPipeline

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

@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 Object-Class Detection (dove la classe di oggetto è il volto umano).

Face detection – Cos’è

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

@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

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

@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

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

@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

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

@Face detection, recognition e landmark per applicazioni interattive

DEMOFace Detection

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

@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

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

@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

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

@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

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

@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

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

@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 landmark

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

@Face detection, recognition e landmark per applicazioni interattive

DEMOFace Landmark

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

@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

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

@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

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

@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

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

@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 recognition

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

@Face detection, recognition e landmark per applicazioni interattive

DEMOFace Recognition

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

@Intel Development Zone – Perceptual Computinghttp://software.intel.com/it-it/vcsource/tools/perceptual-computing-sdk

Intel Development Zone – Forumhttp://software.intel.com/en-us/forums/intel-perceptual-computing-sdk

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

Riferimenti