mokapp2014 - daniele galiotto - camera e sorrisi

44
www.mokapp.com

Upload: mokapp

Post on 21-Jun-2015

124 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Mokapp2014 - Daniele Galiotto - Camera e sorrisi

www.mokapp.com

Page 2: Mokapp2014 - Daniele Galiotto - Camera e sorrisi

Daniele Galiotto

Freelance Senior iOS Developerwww.g8production.com

[email protected]

Page 3: Mokapp2014 - Daniele Galiotto - Camera e sorrisi

iOS7 - filtri fotografici, sorrisi e

cheese!

Page 4: Mokapp2014 - Daniele Galiotto - Camera e sorrisi

Core Image

Page 5: Mokapp2014 - Daniele Galiotto - Camera e sorrisi

Core Image

• Core Image è una tecnologia per processare ed analizzare immagini, quasi a real-time

• Opera in framework quali Core Graphics, Core Video e Image I/O usando GPU o CPU

Page 6: Mokapp2014 - Daniele Galiotto - Camera e sorrisi

Core Image• CI permette di lavorare a basso

livello, tramite API

• Senza conoscere OpenGL o OpenGL ES (GPU)

• Senza conoscere il GCD per beneficiare dei processori multicore (CPU)

Page 7: Mokapp2014 - Daniele Galiotto - Camera e sorrisi

Core Image

Page 8: Mokapp2014 - Daniele Galiotto - Camera e sorrisi

Core Image

• Permette di accedere ai filtri per processare le immagini

• Di scovare le caratteristiche di una immagine (es. volto)

• Concatenare filtri per creare effetti custom

Page 9: Mokapp2014 - Daniele Galiotto - Camera e sorrisi

Filtri

Page 10: Mokapp2014 - Daniele Galiotto - Camera e sorrisi

Filtri

• Esistono oltre 90 filtri installati in iOS (120 in OS X)

• Esistono decine di categorie di filtri

• I nomi dei filtri iniziano col prefisso CI (Core Image)

Page 11: Mokapp2014 - Daniele Galiotto - Camera e sorrisi

Filtri

Mono, Tonal, Noir, Fade,

Chrome, Process, Transfer, Instant

Page 12: Mokapp2014 - Daniele Galiotto - Camera e sorrisi

CIFilter

• La classe base è CIFilter

• CIImage è l’immagine non mutable

• CIContext è il contesto dove disegna l’immagine

Page 13: Mokapp2014 - Daniele Galiotto - Camera e sorrisi

How to?• CIImage dall’immagine

originale

• CIFilter e setta i valori di input

• Crea un CIContext

• Applica il filtro ed effettua il rendering dell’output (CIImage) in una CGImage tramite il context

Page 14: Mokapp2014 - Daniele Galiotto - Camera e sorrisi

[DEMO]

Page 15: Mokapp2014 - Daniele Galiotto - Camera e sorrisi

Detector

Page 16: Mokapp2014 - Daniele Galiotto - Camera e sorrisi

CIDetector

• Processa le immagini alla ricerca di elementi

• CIDetectorTypeFace permettere di scovare volti in una foto

• Usa un CIContext

Page 17: Mokapp2014 - Daniele Galiotto - Camera e sorrisi

CIFaceFeature• Permette di determinare volto,

occhi e bocca che vengono scovati da un CIDetector

• Funzionare sia su immagini che video

• Nei video permette il tracking di un volto

Page 18: Mokapp2014 - Daniele Galiotto - Camera e sorrisi

CIFaceFeature

• Determina un bounds: un rettangolo che indica la posizione e la dimensione di un volto, nelle coordinate della immagine

Page 19: Mokapp2014 - Daniele Galiotto - Camera e sorrisi

CIDetector & CIFaceFeature

• Poiché può richiedere qualche secondo di esecuzione, è consigliabile eseguire il codice in una queue in background e restituire un risultato nel thread principale

Page 20: Mokapp2014 - Daniele Galiotto - Camera e sorrisi

How to?

• CIImage dall’immagine originale

• CIDetector di tipo CIFaceFeature

• NSDictionary di “cosa ricercare” (es. sorriso)

Page 21: Mokapp2014 - Daniele Galiotto - Camera e sorrisi

How to?

• Avvio la ricerca delle caratteristiche nella immagine CIImage con le opzioni prima definite

NSArray *features = [detector featuresInImage:image options:imageOptions];

Page 22: Mokapp2014 - Daniele Galiotto - Camera e sorrisi

How to?• Ciclo tra le features gli

CIFaceFeature scovati e le loro caratteristiche:

es:

hasFaceAnglehasMouthPosition

leftEyeClosed

Page 23: Mokapp2014 - Daniele Galiotto - Camera e sorrisi

[DEMO]

Page 24: Mokapp2014 - Daniele Galiotto - Camera e sorrisi

Video

Page 25: Mokapp2014 - Daniele Galiotto - Camera e sorrisi

AVCaptureSession• AVFoundation.framework

• Gestire il flusso dati da un device AV input e output

• Input: AVCaptureDeviceInput

• Output: AVCaptureMovieFileOutput

• Audio e/o video

Page 26: Mokapp2014 - Daniele Galiotto - Camera e sorrisi

AVCaptureSession

• [session setSessionPreset:…]]

Il metodo setSessionPreset permette di customizzare qualità, bitrate, e altri settings per l’output.

Presets di defaults sono già disponibili nella classe AVCaptureSession.

Page 27: Mokapp2014 - Daniele Galiotto - Camera e sorrisi

AVCaptureSession• Input: AVCaptureDeviceInput

imposto il device di input (es. camera frontale)

• Output: AVCaptureMovieFileOutput imposto la classe dove processare i frame video

• Output: AVCaptureStillImageOutput la classe per catturare l’immagine a video

Page 28: Mokapp2014 - Daniele Galiotto - Camera e sorrisi

AVCaptureSession

• Input e output vanno poi aggiunti alla sessione che li userà

if([session canAddOutput:stillImageOutput])

[session addOutput:stillImageOutput];

Page 29: Mokapp2014 - Daniele Galiotto - Camera e sorrisi

AVCaptureSessionAVCaptureSession *captureSession = [[AVCaptureSession alloc] init];

AVCaptureDevice *audioCaptureDevice = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeAudio];

NSError *error = nil;

AVCaptureDeviceInput *audioInput = [AVCaptureDeviceInput deviceInputWithDevice:audioCaptureDevice error:&error];

if (audioInput) {

[captureSession addInput:audioInput];

}Audio Capture Session

Page 30: Mokapp2014 - Daniele Galiotto - Camera e sorrisi

AVCaptureVideoPreviewLayer

• AVCaptureVideoPreviewLayer è il layer che permette di mostrare a video cosa sta catturando il device di input

Page 31: Mokapp2014 - Daniele Galiotto - Camera e sorrisi

CIDetector

• CIDetector permette di scovare i volti nel video

Page 32: Mokapp2014 - Daniele Galiotto - Camera e sorrisi

AVCaptureSession• [session startRunning]

• [session stopRunning]

I metodi startRunning e stopRunning sono bloccanti perciò, per “liberare” il thread principale, andrebbero eseguiti in modo asincrono in una coda seriale (FIFO) DISPATCH_QUEUE_SERIAL.

Page 33: Mokapp2014 - Daniele Galiotto - Camera e sorrisi

AVCaptureSession

dispatch_async([self sessionQueue], ^{…

[session startRunning];…});

Page 34: Mokapp2014 - Daniele Galiotto - Camera e sorrisi

AVCaptureSession

• [session beginConfiguration]

• [session commitConfiguration]

Permettono di aggiornare al volo la sessione (es. per saltare dalla fotocamera anteriore alla posteriore e viceversa)

Page 35: Mokapp2014 - Daniele Galiotto - Camera e sorrisi

AVCaptureVideoDataOutputSampleBufferDel

egate• AVCaptureVideoDataOutputSa

mpleBufferDelegate

Tramite il protocollo AVCaptureVideoDataOutputSampleBufferDelegate, otteniamo i buffer video catturati.

Page 36: Mokapp2014 - Daniele Galiotto - Camera e sorrisi

AVCaptureVideoDataOutputSampleBufferDel

egate

• Con CVPixelBufferRef recupero immagine del frame, tramite l'oggetto Core Video pixel buffer, un CIImage object

Page 37: Mokapp2014 - Daniele Galiotto - Camera e sorrisi

CIDetector

• Come in precedenza, avvio la ricerca di caratteristiche in una foto (es. volti) e li elaboro ciclando su di essi

Page 38: Mokapp2014 - Daniele Galiotto - Camera e sorrisi

Activity Sharing

Page 39: Mokapp2014 - Daniele Galiotto - Camera e sorrisi

UIActivityViewController

• Permette di condividere contenuti tramite iOS con FB, Twitter, Messaggi, E-mail, Airdrop, Cloud ecc…

Page 40: Mokapp2014 - Daniele Galiotto - Camera e sorrisi

[DEMO]

Page 42: Mokapp2014 - Daniele Galiotto - Camera e sorrisi

Newsnext

mokapp

iOS8 HomeKit HealthKit Domotics

Page 43: Mokapp2014 - Daniele Galiotto - Camera e sorrisi

www.mokapp.com

Page 44: Mokapp2014 - Daniele Galiotto - Camera e sorrisi

Cosa c’è dopo il coffe break?

Aula Nerd - 11:20

Emanuele Palazzetti

Send your Android game to the next level!

Creare una universal app

Aula Geek - 11:20

Daniele Galiotto