Your SlideShare is downloading. ×
Mettiamoci la faccia: face detection, recognition e landmark per applicazioni interattive
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

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

3,326
views

Published on

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.

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.

Published in: Technology

0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
3,326
On Slideshare
0
From Embeds
0
Number of Embeds
5
Actions
Shares
0
Downloads
9
Comments
0
Likes
1
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 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