Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
After I/O Istanbul Jetpack CameraX
Search
Hadi Tok
June 29, 2019
Technology
76
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
After I/O Istanbul Jetpack CameraX
Hadi Tok
June 29, 2019
More Decks by Hadi Tok
See All by Hadi Tok
Android Async Programming
oshamahue
0
130
Introduction to Functional Programing in Kotlin and Arrow
oshamahue
0
200
Kotlin for Java developers.
oshamahue
0
120
Kotlin Java interop and Kotlin Migration
oshamahue
0
81
Finding the View
oshamahue
0
140
Mocking Kotlin with MockK
oshamahue
0
140
After I/O Kabul Android summary
oshamahue
0
95
Mocking Kotlin with MockK
oshamahue
0
220
RxJava vs Coroutines
oshamahue
1
660
Other Decks in Technology
See All in Technology
QAタスクをスキル化したいときに考えること
aomoriringo
0
180
TypeScript入門 2026
recruitengineers
PRO
1
280
タクシーアプリ『GO』の実践的データ活用〜位置情報データの収集とStreamlitでの可視化〜
mot_techtalk
2
200
ガバメントクラウドでのランサムウェア対策
techniczna
1
760
PLaMo 3.0 Primeの事後学習
pfn
PRO
0
270
【CEDEC2026】専門性の高いデフォルメチームが挑んだ人材育成戦略 〜Cygames Academiaの企画から実施まで〜
cygames
PRO
0
270
個人OSSが、机の上から世界に広がるまでの話
shinyasaita
1
340
AI時代の強いチームの作り方
yuukiyo
23
15k
第3回しろおびセキュリティスポンサーセッション
log0417
0
140
AIQAのナレッジ構築について
qatonchan
1
160
認知負荷をGemini で溶かす — GKE 基盤「Orbit」における AI エージェントの実践
sansantech
PRO
1
250
AWS ネットワーク構築でハマった(ハマりかけた) 5選とそこから得た教訓
nagisa53
4
180
Featured
See All Featured
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
67
56k
Navigating the Design Leadership Dip - Product Design Week Design Leaders+ Conference 2024
apolaine
1
390
svc-hook: hooking system calls on ARM64 by binary rewriting
retrage
2
440
Fashionably flexible responsive web design (full day workshop)
malarkey
408
67k
Why Your Marketing Sucks and What You Can Do About It - Sophie Logan
marketingsoph
0
350
The Straight Up "How To Draw Better" Workshop
denniskardys
239
140k
Amusing Abliteration
ianozsvald
1
240
We Analyzed 250 Million AI Search Results: Here's What I Found
joshbly
1
1.7k
What’s in a name? Adding method to the madness
productmarketing
PRO
24
4.1k
How To Speak Unicorn (iThemes Webinar)
marktimemedia
1
520
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
6k
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
Transcript
Jetpack CameraX GDG Istanbul After I/O 2019
Jetpack CameraX Hadi Tok CitizenMe @hadi_tok
Android versiyonlari End Android Kamera API Problemleri Cihaz ve Üretici
Çeşitliliği Karmaşık API
CameraX nedir? • Daha kolay kamera uygulamaları geliştirmeye yardımcı •
Açık kaynak • Alpha
Android 5+ End CameraX Tüm köşe senaryolar kapsanmış Arka planda
Camera2 API kullanan basit API
CameraX • Lifecycle ile uyumlu • Portrait, HDR, Night, ve
Beauty • Eklenti alabiliyor
CameraX Ön İzleme Görüntü Analizi Görüntü Yakalama
Ön İzleme
val viewFinderConfig = PreviewConfig.Builder().build()
val viewFinderConfig = PreviewConfig.Builder().build() val preview = AutoFitPreviewBuilder.build(viewFinderConfig, viewFinder)
val viewFinderConfig = PreviewConfig.Builder().build() val preview = AutoFitPreviewBuilder.build(viewFinderConfig, viewFinder) preview.setOnPreviewOutputUpdateListener
{ previewOutput -> //use previewOutput.surfaceTexture if needed }
val viewFinderConfig = PreviewConfig.Builder().build() val preview = AutoFitPreviewBuilder.build(viewFinderConfig, viewFinder) preview.setOnPreviewOutputUpdateListener
{ previewOutput -> //use previewOutput.surfaceTexture if needed } CameraX.bindToLifecycle(this, preview)
val viewFinderConfig = PreviewConfig.Builder().build() val preview = AutoFitPreviewBuilder.build(viewFinderConfig, viewFinder) preview.setOnPreviewOutputUpdateListener
{ previewOutput -> //use previewOutput.surfaceTexture if needed } CameraX.bindToLifecycle(this, preview)
Görüntü Analizi
val imageAnalysisConfig = ImageAnalysisConfig.Builder() .setTargetResolution(Size(1280, 730)) .build()
val imageAnalysisConfig = ImageAnalysisConfig.Builder() .setTargetResolution(Size(1280, 730)) .build() val imageAnalysis =
ImageAnalysis(imageAnalysisConfig)
val imageAnalysisConfig = ImageAnalysisConfig.Builder() .setTargetResolution(Size(1280, 730)) .build() val imageAnalysis =
ImageAnalysis(imageAnalysisConfig) imageAnalysis.setAnalyzer { imageProxy, rotationDegrees -> //do image analysis }
val imageAnalysisConfig = ImageAnalysisConfig.Builder() .setTargetResolution(Size(1280, 730)) .build() val imageAnalysis =
ImageAnalysis(imageAnalysisConfig) imageAnalysis.setAnalyzer { imageProxy, rotationDegrees -> //do image analysis } CameraX.bindToLifecycle(this, imageAnalysis, preview)
val imageAnalysisConfig = ImageAnalysisConfig.Builder() .setTargetResolution(Size(1280, 730)) .build() val imageAnalysis =
ImageAnalysis(imageAnalysisConfig) imageAnalysis.setAnalyzer { imageProxy, rotationDegrees -> //do image analysis } CameraX.bindToLifecycle(this, imageAnalysis, preview)
Görüntü Yakalama
val imageCaptureConfig = ImageCaptureConfig.Builder() .build()
val imageCaptureConfig = ImageCaptureConfig.Builder() .build() val imageCapture = ImageCapture(imageCaptureConfig)
val imageCaptureConfig = ImageCaptureConfig.Builder() .build() val imageCapture = ImageCapture(imageCaptureConfig) CameraX.bindToLifecycle(
this, preview, imageCapture, imageAnalyzer)
val imageCaptureConfig = ImageCaptureConfig.Builder() .build() val imageCapture = ImageCapture(imageCaptureConfig) CameraX.bindToLifecycle(
this, preview, imageCapture, imageAnalyzer)
val imageSaveListener = object : ImageCapture.OnImageSavedListener { override fun onImageSaved(file:
File) { //use the image file } override fun onError(useCaseError: ImageCapture.UseCaseError, message: String, cause: Throwable?) { //handle error } }
val imageSaveListener = object : ImageCapture.OnImageSavedListener { override fun onImageSaved(file:
File) { //use the image file } override fun onError(useCaseError: ImageCapture.UseCaseError, message: String, cause: Throwable?) { //handle error } } val photoFile = createFile(outputDirectory, FILENAME, PHOTO_EXTENSION)
val imageSaveListener = object : ImageCapture.OnImageSavedListener { override fun onImageSaved(file:
File) { //use the image file } override fun onError(useCaseError: ImageCapture.UseCaseError, message: String, cause: Throwable?) { //handle error } } val photoFile = createFile(outputDirectory, FILENAME, PHOTO_EXTENSION) imageCapture.takePicture(photoFile, imageSaveListener)
val imageSaveListener = object : ImageCapture.OnImageSavedListener { override fun onImageSaved(file:
File) { //use the image file } override fun onError(useCaseError: ImageCapture.UseCaseError, message: String, cause: Throwable?) { //handle error } } val photoFile = createFile(outputDirectory, FILENAME, PHOTO_EXTENSION) imageCapture.takePicture(photoFile, imageSaveListener)
Kaynaklar • https://developer.android.com/training/camerax • https://www.youtube.com/watch?v=kuv8uK-5CLY • https://github.com/android/camera/tree/master/CameraXBasic
Hadi Tok, CitizenMe @hadi_tok Teşekkürler
Soru-Cevap