mokapp2014 - daniele galiotto - camera e sorrisi

Post on 21-Jun-2015

124 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

www.mokapp.com

Daniele Galiotto

Freelance Senior iOS Developerwww.g8production.com

genius@g8production.com

iOS7 - filtri fotografici, sorrisi e

cheese!

Core Image

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

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)

Core Image

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

Filtri

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)

Filtri

Mono, Tonal, Noir, Fade,

Chrome, Process, Transfer, Instant

CIFilter

• La classe base è CIFilter

• CIImage è l’immagine non mutable

• CIContext è il contesto dove disegna l’immagine

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

[DEMO]

Detector

CIDetector

• Processa le immagini alla ricerca di elementi

• CIDetectorTypeFace permettere di scovare volti in una foto

• Usa un CIContext

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

CIFaceFeature

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

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

How to?

• CIImage dall’immagine originale

• CIDetector di tipo CIFaceFeature

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

How to?

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

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

How to?• Ciclo tra le features gli

CIFaceFeature scovati e le loro caratteristiche:

es:

hasFaceAnglehasMouthPosition

leftEyeClosed

[DEMO]

Video

AVCaptureSession• AVFoundation.framework

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

• Input: AVCaptureDeviceInput

• Output: AVCaptureMovieFileOutput

• Audio e/o video

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.

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

AVCaptureSession

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

if([session canAddOutput:stillImageOutput])

[session addOutput:stillImageOutput];

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

AVCaptureVideoPreviewLayer

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

CIDetector

• CIDetector permette di scovare i volti nel video

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.

AVCaptureSession

dispatch_async([self sessionQueue], ^{…

[session startRunning];…});

AVCaptureSession

• [session beginConfiguration]

• [session commitConfiguration]

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

AVCaptureVideoDataOutputSampleBufferDel

egate• AVCaptureVideoDataOutputSa

mpleBufferDelegate

Tramite il protocollo AVCaptureVideoDataOutputSampleBufferDelegate, otteniamo i buffer video catturati.

AVCaptureVideoDataOutputSampleBufferDel

egate

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

CIDetector

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

Activity Sharing

UIActivityViewController

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

[DEMO]

[GRAZIAS]

Freelance

Senior iOS

Developerwww.g8production.com

genius@g8production.com

Newsnext

mokapp

iOS8 HomeKit HealthKit Domotics

www.mokapp.com

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

top related