SlideShare a Scribd company logo
1 of 48
Download to read offline
1
AppDevKit x
CameraKit
Anistar Sung - Yahoo Senior Engineer Manager
7
Making Camera Amazing
Self
Introduction
2
Working for Yahoo

Top 10 Camera apps - The New York Times
AppDevKit iOS open source project

iOS app development experience
Making Camera Amazing
What the CameraKit can do?

High performance real-time computing with camera

CPU & GPU rendering solutions

Demos with sample apps
3
Agenda
Making Camera Amazing
4Making Camera Amazing
UIImagePickerController
5Making Camera Amazing
6Making Camera Amazing
Customization

Functional limitation

Memory usage
7
Issues of Using
UIImagePickController API
Making Camera Amazing
8Making Camera Amazing
AVFoundation
What the CameraKit
can do?
9Making Camera Amazing
10
R-Finder 2013
11Making Camera Amazing
SNAP & BUY 2014
12
CameraKit
13
AppDevKit x CameraKit
Making Camera Amazing
UI
Image
Camera
Animation
List
Common
14Making Camera Amazing
ADKCameraPosition
ADKCameraFlashMode
ADKCameraTorchMode
ADKCameraMirrorMode
ADKCameraFocusMode
ADKCameraExposureMode
ADKCameraWhiteBlanceMode
ADKCameraErrorCodealignDeviceOrientation
trackLiveVideoData
cameraQuality
captureVideoPreviewLayer
recording
exposureBias
shutterSpeed
ISO
zoomFactor lensPosition
whiteBalanceTemperature
whiteBalanceTint
lowLightBoost
stabilization
cameraPermission
microphonePermission
frontCameraAvailable
rearCameraAvailable
optimizeForHighestFrameRate
flashAvailable
torchAvailable
focusAtPoint
exposureAtPoint
startCamera
stopCamera
captureImage
startCaptureVideo
stopCaptureVideo
ADKCamera
15
Initializing a camera
Making Camera Amazing
camera = [[ADKCamera alloc] initCameraWithDelegate:self

quality:AVCaptureSessionPresetLow

position:ADKCameraPositionRear];

camera.alignDeviceOrientation = YES;
16Making Camera Amazing
17
Camera Viewfinder Preview
Making Camera Amazing
// Adding preview layer on the screen.
[view.layer addSublayer:camera.captureVideoPreviewLayer]

// Starting to capture images.
[camera startCamera];
18
Taking photos / videos
Making Camera Amazing
// Capturing a high quality photo.
[camera captureImage:^(UIImage *image,

NSDictionary *exifDic, 

NSError *error) {

// Using the image to do something…

}
19
Demo
Making Camera Amazing
Powering up a simple camera app by
CameraKit
Catherine Shu, Lead Engineer
High performance
real-time computing
with camera
20Making Camera Amazing
21Making Camera Amazing
22Making Camera Amazing
23
Goal
Making Camera Amazing
1. Making an awesome effect to make girls happy

2. Could be previewed effects immediately 

3. Supporting selfies mode
24
Demo
Making Camera Amazing
Using CameraKit to create a Selfies CAM
Catherine Shu, Lead Engineer
25Making Camera Amazing
camera = [[ADKCamera alloc] initCameraWithDelegate:self

quality:AVCaptureSessionPresetHigh

position:ADKCameraPositionFront];

camera.trackLiveVideoData = YES;

camera.liveVideoDataDlegate = self;
Getting Real-time Images
26Making Camera Amazing
27
Doing Face Detection
Making Camera Amazing
- (void)ADKCamera:(ADKCamera *)camera didUpdateSampleBuffer:
(CMSampleBufferRef)sampleBuffer

{

// Converting sample buffer to core image.

CVImageBufferRef imageBuffer = CMSampleBufferGetImageBuffer(sampleBuffer);

CIImage *sourceCoreImage = [CIImage imageWithCVPixelBuffer:

(CVPixelBufferRef)imageBuffer options:nil];
28
CoreImage
29
Doing Face Detection
Making Camera Amazing
faceDetector = [CIDetector detectorOfType:CIDetectorTypeFace 

context:nil

options:opts];

// Fetching features
NSArray *features = [faceDetector featuresInImage:sourceCoreImage];
30Making Camera Amazing
31
Using CoreImage
Making Camera Amazing
CIFilter *filter = [CIFilter filterWithName:@“CIBumpDistortion"];

[filter setValue:filteredCoreImage forKey:kCIInputImageKey];

[filter setValue:[CIVector vectorWithCGPoint:leftEyePoint] 

forKey:kCIInputCenterKey];

[filter setValue:@(eyeRadius) forKey:kCIInputRadiusKey];

[filter setValue:@(0.55) forKey:kCIInputScaleKey];

filteredCoreImage = filter.outputImage;
32Making Camera Amazing
33
Add Instant Effect
Making Camera Amazing
CIFilter *filter = [CIFilter filterWithName:@"CIPhotoEffectInstant"];

[filter setValue:filteredCoreImage 

forKey:kCIInputImageKey];

filteredCoreImage = filter.outputImage;
34Making Camera Amazing
35
Display Images
Making Camera Amazing
dispatch_async(dispatch_get_main_queue(), ^{

// Actually, this is a bad idea!
UIImage *image = [UIImage imageWithCIImage:filteredCoreImage];

imageView.image = image;

});
CPU & GPU rendering
solutions
36Making Camera Amazing
37
Poor Performance Flow
Making Camera Amazing
CVPixelBuffer
CIImage
CVPixelBuffer
CIContext
EAGLContext
UIImage UIImageView
38
Requirements in Real-time
Process
Making Camera Amazing
60 fps
Frame 1 Frame 2 Frame 3 Frame 60Frame 4
16.6 ms 16.6 ms 16.6 ms 16.6 ms 16.6 ms
39Making Camera Amazing
40Making Camera Amazing
41
Better Performance Flow
Making Camera Amazing
CVPixelBuffer
CIImage
CVPixelBuffer
CIContext
EAGLContext GLKView
UIImage UIImageView
42
ADKOpenGLImageView
Making Camera Amazing
CIImage *image

UIColor *backgroundColor

ADKOpenGLImageViewContentMode *contentMode
43Making Camera Amazing
ADKOpenGLImageViewContentModeScaleToFill

ADKOpenGLImageViewContentModeScaleAspectFit

ADKOpenGLImageViewContentModeScaleAspectFill

ADKOpenGLImageViewContentModeCenter

ADKOpenGLImageViewContentModeTop

ADKOpenGLImageViewContentModeBottom

ADKOpenGLImageViewContentModeLeft

ADKOpenGLImageViewContentModeRight

ADKOpenGLImageViewContentModeTopLeft

ADKOpenGLImageViewContentModeTopRight

ADKOpenGLImageViewContentModeBottomLeft

ADKOpenGLImageViewContentModeBottomRight
44
Better Performance Flow
Making Camera Amazing
CVPixelBuffer
CIImage
CVPixelBuffer
CIContext
EAGLContext ADKOpenGLImageView
UIImage UIImageView
45
Using ADKOpenGlImageView
Making Camera Amazing
// Set up config and assign a image for displaying.
glImageView.contentMode =
ADKOpenGLImageViewContentModeScaleAspectFill;

glImageView.backgroundColor = [UIColor black];

glImageView.image = finalCoreImage;
46
Perfomance comparison
Making Camera Amazing
300% +
* It only for testing the performance
of image assignment and rendering
ADKCamera makes things simple 

Using GPU to process image will be better (EX: CoreImage…)

ADKOpenGLImageView provides an OpenGL solution
47
Summary
Making Camera Amazing
48
Q + A
Making Camera Amazing

More Related Content

What's hot

What is image in Swift?/はるふ
What is image in Swift?/はるふWhat is image in Swift?/はるふ
What is image in Swift?/はるふha1f Yamaguchi
 
Android jetpack compose | Declarative UI
Android jetpack compose | Declarative UI Android jetpack compose | Declarative UI
Android jetpack compose | Declarative UI Ajinkya Saswade
 
GoogleVisualr - A Ruby library for Google Visualization API
GoogleVisualr - A Ruby library for Google Visualization APIGoogleVisualr - A Ruby library for Google Visualization API
GoogleVisualr - A Ruby library for Google Visualization APIWinston Teo
 
Basic Android Animation
Basic Android Animation Basic Android Animation
Basic Android Animation Shilu Shrestha
 
ReactiveCocoa - TDC 2016
ReactiveCocoa - TDC 2016ReactiveCocoa - TDC 2016
ReactiveCocoa - TDC 2016vinciusreal
 
Google maps and GPS, camera, SD card, tips & tricks
Google maps and GPS, camera, SD card, tips & tricksGoogle maps and GPS, camera, SD card, tips & tricks
Google maps and GPS, camera, SD card, tips & tricksNikola Kapraljevic Nixa
 
GDG Kuwait - Modern android development
GDG Kuwait - Modern android developmentGDG Kuwait - Modern android development
GDG Kuwait - Modern android developmentGDGKuwaitGoogleDevel
 
Decorator design pattern (A Gift Wrapper)
Decorator design pattern (A Gift Wrapper)Decorator design pattern (A Gift Wrapper)
Decorator design pattern (A Gift Wrapper)Sameer Rathoud
 
React native introduction
React native introductionReact native introduction
React native introductionInnerFood
 
Jetpack Compose - Android’s modern toolkit for building native UI
Jetpack Compose - Android’s modern toolkit for building native UIJetpack Compose - Android’s modern toolkit for building native UI
Jetpack Compose - Android’s modern toolkit for building native UIGilang Ramadhan
 
Lessons learned from porting Roloengine from iOS to Android
Lessons learned from porting Roloengine from iOS to AndroidLessons learned from porting Roloengine from iOS to Android
Lessons learned from porting Roloengine from iOS to AndroidManish Mathai
 
OpenGLES - Graphics Programming in Android
OpenGLES - Graphics Programming in Android OpenGLES - Graphics Programming in Android
OpenGLES - Graphics Programming in Android Arvind Devaraj
 
Android animation
Android animationAndroid animation
Android animationKrazy Koder
 
Recap of Android Dev Summit 2018
Recap of Android Dev Summit 2018Recap of Android Dev Summit 2018
Recap of Android Dev Summit 2018Hassan Abid
 
OpenGLES Android Graphics
OpenGLES Android GraphicsOpenGLES Android Graphics
OpenGLES Android GraphicsArvind Devaraj
 
2013-48. Game Progamming
2013-48. Game Progamming2013-48. Game Progamming
2013-48. Game ProgammingSyiroy Uddin
 
Write once, ship multiple times
Write once, ship multiple timesWrite once, ship multiple times
Write once, ship multiple timesŽeljko Plesac
 

What's hot (19)

What is image in Swift?/はるふ
What is image in Swift?/はるふWhat is image in Swift?/はるふ
What is image in Swift?/はるふ
 
Android jetpack compose | Declarative UI
Android jetpack compose | Declarative UI Android jetpack compose | Declarative UI
Android jetpack compose | Declarative UI
 
GoogleVisualr - A Ruby library for Google Visualization API
GoogleVisualr - A Ruby library for Google Visualization APIGoogleVisualr - A Ruby library for Google Visualization API
GoogleVisualr - A Ruby library for Google Visualization API
 
Basic Android Animation
Basic Android Animation Basic Android Animation
Basic Android Animation
 
ReactiveCocoa - TDC 2016
ReactiveCocoa - TDC 2016ReactiveCocoa - TDC 2016
ReactiveCocoa - TDC 2016
 
Google maps and GPS, camera, SD card, tips & tricks
Google maps and GPS, camera, SD card, tips & tricksGoogle maps and GPS, camera, SD card, tips & tricks
Google maps and GPS, camera, SD card, tips & tricks
 
GDG Kuwait - Modern android development
GDG Kuwait - Modern android developmentGDG Kuwait - Modern android development
GDG Kuwait - Modern android development
 
Decorator design pattern (A Gift Wrapper)
Decorator design pattern (A Gift Wrapper)Decorator design pattern (A Gift Wrapper)
Decorator design pattern (A Gift Wrapper)
 
React native introduction
React native introductionReact native introduction
React native introduction
 
Jetpack Compose - Android’s modern toolkit for building native UI
Jetpack Compose - Android’s modern toolkit for building native UIJetpack Compose - Android’s modern toolkit for building native UI
Jetpack Compose - Android’s modern toolkit for building native UI
 
Lessons learned from porting Roloengine from iOS to Android
Lessons learned from porting Roloengine from iOS to AndroidLessons learned from porting Roloengine from iOS to Android
Lessons learned from porting Roloengine from iOS to Android
 
OpenGLES - Graphics Programming in Android
OpenGLES - Graphics Programming in Android OpenGLES - Graphics Programming in Android
OpenGLES - Graphics Programming in Android
 
Android animation
Android animationAndroid animation
Android animation
 
Open Cv Tutorial Ii
Open Cv Tutorial IiOpen Cv Tutorial Ii
Open Cv Tutorial Ii
 
Recap of Android Dev Summit 2018
Recap of Android Dev Summit 2018Recap of Android Dev Summit 2018
Recap of Android Dev Summit 2018
 
Voluminous_Weibo
Voluminous_WeiboVoluminous_Weibo
Voluminous_Weibo
 
OpenGLES Android Graphics
OpenGLES Android GraphicsOpenGLES Android Graphics
OpenGLES Android Graphics
 
2013-48. Game Progamming
2013-48. Game Progamming2013-48. Game Progamming
2013-48. Game Progamming
 
Write once, ship multiple times
Write once, ship multiple timesWrite once, ship multiple times
Write once, ship multiple times
 

Similar to Mopcon2017 - AppDevKit x CameraKit

Droidcon NYC 2014: Building Custom Camera Applications
Droidcon NYC 2014: Building Custom Camera ApplicationsDroidcon NYC 2014: Building Custom Camera Applications
Droidcon NYC 2014: Building Custom Camera ApplicationsHuyen Dao
 
Droidcon NYC 2014: Building Custom Camera Applications
Droidcon NYC 2014: Building Custom Camera ApplicationsDroidcon NYC 2014: Building Custom Camera Applications
Droidcon NYC 2014: Building Custom Camera ApplicationsHuyen Tue Dao
 
Rendering Techniques for Augmented Reality and a Look Ahead at AR Foundation
Rendering Techniques for Augmented Reality and a Look Ahead at AR FoundationRendering Techniques for Augmented Reality and a Look Ahead at AR Foundation
Rendering Techniques for Augmented Reality and a Look Ahead at AR FoundationUnity Technologies
 
COSCUP 2017 FACE OFF
COSCUP 2017 FACE OFFCOSCUP 2017 FACE OFF
COSCUP 2017 FACE OFFPRADA Hsiung
 
CameraX: Make photography easier on Android!
CameraX: Make photography easier on Android!CameraX: Make photography easier on Android!
CameraX: Make photography easier on Android!Bapusaheb Patil
 
06.Programming Media on Windows Phone
06.Programming Media on Windows Phone06.Programming Media on Windows Phone
06.Programming Media on Windows PhoneNguyen Tuan
 
Hidden Camera 3 APIs in Android 4.4 (KitKat)
Hidden Camera 3 APIs in Android 4.4 (KitKat)Hidden Camera 3 APIs in Android 4.4 (KitKat)
Hidden Camera 3 APIs in Android 4.4 (KitKat)Balwinder Kaur
 
Introduction of Android Camera1
Introduction of Android Camera1Introduction of Android Camera1
Introduction of Android Camera1Booch Lin
 
Breizhcamp Rennes 2011
Breizhcamp Rennes 2011Breizhcamp Rennes 2011
Breizhcamp Rennes 2011sekond0
 
426 lecture 4: AR Developer Tools
426 lecture 4: AR Developer Tools426 lecture 4: AR Developer Tools
426 lecture 4: AR Developer ToolsMark Billinghurst
 
How to implement camera recording for USB webcam or IP camera in C#.NET
How to implement camera recording for USB webcam or IP camera in C#.NETHow to implement camera recording for USB webcam or IP camera in C#.NET
How to implement camera recording for USB webcam or IP camera in C#.NETOzeki Informatics Ltd.
 
Philipp Nagele (Wikitude) Wikitude SDK Tutorial
Philipp Nagele (Wikitude) Wikitude SDK Tutorial Philipp Nagele (Wikitude) Wikitude SDK Tutorial
Philipp Nagele (Wikitude) Wikitude SDK Tutorial AugmentedWorldExpo
 
Camera 2.0 in Android 4.2
Camera 2.0 in Android 4.2 Camera 2.0 in Android 4.2
Camera 2.0 in Android 4.2 Balwinder Kaur
 
MobileConf 2015: Desmistificando o Phonegap (Cordova)
MobileConf 2015: Desmistificando o Phonegap (Cordova)MobileConf 2015: Desmistificando o Phonegap (Cordova)
MobileConf 2015: Desmistificando o Phonegap (Cordova)Loiane Groner
 
Detection and tracking of red color by using matlab
Detection and tracking of red color by using matlabDetection and tracking of red color by using matlab
Detection and tracking of red color by using matlabAbhiraj Bohra
 
Building a Native Camera Access Library - Part I - Transcript.pdf
Building a Native Camera Access Library - Part I - Transcript.pdfBuilding a Native Camera Access Library - Part I - Transcript.pdf
Building a Native Camera Access Library - Part I - Transcript.pdfShaiAlmog1
 
Desmistificando o Phonegap (Cordova)
Desmistificando o Phonegap (Cordova)Desmistificando o Phonegap (Cordova)
Desmistificando o Phonegap (Cordova)Loiane Groner
 

Similar to Mopcon2017 - AppDevKit x CameraKit (20)

Droidcon NYC 2014: Building Custom Camera Applications
Droidcon NYC 2014: Building Custom Camera ApplicationsDroidcon NYC 2014: Building Custom Camera Applications
Droidcon NYC 2014: Building Custom Camera Applications
 
Droidcon NYC 2014: Building Custom Camera Applications
Droidcon NYC 2014: Building Custom Camera ApplicationsDroidcon NYC 2014: Building Custom Camera Applications
Droidcon NYC 2014: Building Custom Camera Applications
 
Rendering Techniques for Augmented Reality and a Look Ahead at AR Foundation
Rendering Techniques for Augmented Reality and a Look Ahead at AR FoundationRendering Techniques for Augmented Reality and a Look Ahead at AR Foundation
Rendering Techniques for Augmented Reality and a Look Ahead at AR Foundation
 
COSCUP 2017 FACE OFF
COSCUP 2017 FACE OFFCOSCUP 2017 FACE OFF
COSCUP 2017 FACE OFF
 
CameraX: Make photography easier on Android!
CameraX: Make photography easier on Android!CameraX: Make photography easier on Android!
CameraX: Make photography easier on Android!
 
06.Programming Media on Windows Phone
06.Programming Media on Windows Phone06.Programming Media on Windows Phone
06.Programming Media on Windows Phone
 
Cloud Spin - building a photo booth with the Google Cloud Platform
Cloud Spin - building a photo booth with the Google Cloud PlatformCloud Spin - building a photo booth with the Google Cloud Platform
Cloud Spin - building a photo booth with the Google Cloud Platform
 
QXCameraKit
QXCameraKitQXCameraKit
QXCameraKit
 
Hidden Camera 3 APIs in Android 4.4 (KitKat)
Hidden Camera 3 APIs in Android 4.4 (KitKat)Hidden Camera 3 APIs in Android 4.4 (KitKat)
Hidden Camera 3 APIs in Android 4.4 (KitKat)
 
Introduction of Android Camera1
Introduction of Android Camera1Introduction of Android Camera1
Introduction of Android Camera1
 
Breizhcamp Rennes 2011
Breizhcamp Rennes 2011Breizhcamp Rennes 2011
Breizhcamp Rennes 2011
 
Drone ppt
Drone pptDrone ppt
Drone ppt
 
426 lecture 4: AR Developer Tools
426 lecture 4: AR Developer Tools426 lecture 4: AR Developer Tools
426 lecture 4: AR Developer Tools
 
How to implement camera recording for USB webcam or IP camera in C#.NET
How to implement camera recording for USB webcam or IP camera in C#.NETHow to implement camera recording for USB webcam or IP camera in C#.NET
How to implement camera recording for USB webcam or IP camera in C#.NET
 
Philipp Nagele (Wikitude) Wikitude SDK Tutorial
Philipp Nagele (Wikitude) Wikitude SDK Tutorial Philipp Nagele (Wikitude) Wikitude SDK Tutorial
Philipp Nagele (Wikitude) Wikitude SDK Tutorial
 
Camera 2.0 in Android 4.2
Camera 2.0 in Android 4.2 Camera 2.0 in Android 4.2
Camera 2.0 in Android 4.2
 
MobileConf 2015: Desmistificando o Phonegap (Cordova)
MobileConf 2015: Desmistificando o Phonegap (Cordova)MobileConf 2015: Desmistificando o Phonegap (Cordova)
MobileConf 2015: Desmistificando o Phonegap (Cordova)
 
Detection and tracking of red color by using matlab
Detection and tracking of red color by using matlabDetection and tracking of red color by using matlab
Detection and tracking of red color by using matlab
 
Building a Native Camera Access Library - Part I - Transcript.pdf
Building a Native Camera Access Library - Part I - Transcript.pdfBuilding a Native Camera Access Library - Part I - Transcript.pdf
Building a Native Camera Access Library - Part I - Transcript.pdf
 
Desmistificando o Phonegap (Cordova)
Desmistificando o Phonegap (Cordova)Desmistificando o Phonegap (Cordova)
Desmistificando o Phonegap (Cordova)
 

Mopcon2017 - AppDevKit x CameraKit