mokapp2014 - daniele galiotto - camera e sorrisi
Post on 21-Jun-2015
124 Views
Preview:
TRANSCRIPT
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
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