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
CameraX使ってみた
Search
Takuji Nishibayashi
July 31, 2024
Technology
310
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
CameraX使ってみた
Takuji Nishibayashi
July 31, 2024
More Decks by Takuji Nishibayashi
See All by Takuji Nishibayashi
compose-hot-reload を試そうとした話
takuji31
0
160
kotlinx.datetime 使ってみた
takuji31
0
1.1k
HiltのCustom Componentについて
takuji31
0
380
java.timeをAndroidで使う
takuji31
0
200
KSPを使ってコード生成
takuji31
0
470
Kotlin Symbol Processing API (KSP) を使って Kotlin ア プリケーションの開発を効率化する
takuji31
1
3.2k
kotlinx.serialization
takuji31
0
690
kanmoba-returns-02.pdf
takuji31
0
290
AndroidXとKotlin Coroutines
takuji31
0
440
Other Decks in Technology
See All in Technology
【セミナー資料】Claude Code をセキュアに使うための考え方と設定の勘どころ / Claude Code Webinar 20260616
masahirokawahara
2
460
Agile and AI Redmine Japan 2026
hiranabe
4
480
2026-06-24_人とAIの責務分離に基づく開発プロセスの提案.pdf
takahiromatsui
0
120
PostgreSQL 19 新機能概要 OSC Hokkaido 2026
nori_shinoda
0
240
Zenoh on Zephyr on LiteX
takasehideki
2
110
週末にループ・エンジニアリングの理解を深めるためのスライド
nagatsu
0
130
Kiro Ambassador を目指す話
k_adachi_01
0
130
OTel × Datadog で 「AI活用」を計測し、改善に繋げる
shihochan
2
630
ぼっちではじめた登壇が「51名」「241件」の発信に化けた
subroh0508
1
310
AIAU_UMEMOGU_ninomiya_slide
ninomiya_ii
0
260
AIはどのように 組織のアジリティを変えるのか?
junki
4
1.4k
事業会社における 機械学習・推薦システム技術の活用事例と必要な能力 / ml-recsys-in-layerx-wantedly-2026
yuya4
0
160
Featured
See All Featured
Gemini Prompt Engineering: Practical Techniques for Tangible AI Outcomes
mfonobong
2
450
Six Lessons from altMBA
skipperchong
29
4.3k
The World Runs on Bad Software
bkeepers
PRO
72
12k
BBQ
matthewcrist
89
10k
We Are The Robots
honzajavorek
0
250
Speed Design
sergeychernyshev
33
1.9k
A better future with KSS
kneath
240
18k
世界の人気アプリ100個を分析して見えたペイウォール設計の心得
akihiro_kokubo
PRO
72
40k
Effective software design: The role of men in debugging patriarchy in IT @ Voxxed Days AMS
baasie
0
430
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.8k
Code Review Best Practice
trishagee
74
20k
エンジニアに許された特別な時間の終わり
watany
107
250k
Transcript
CameraX を使ってみた 関西モバイルアプリ研究会 A #4 @takuji31
自己紹介 西林 拓志 (にしばやし たくじ ) Twitter/GitHub takuji31 Sansan 株式会社
技術本部 Mobile Application グループ Eight Android テックリード Android (2009〜 ) Kotlin (2014〜 ) 1
スマートフォンのカメラ使ってますか? 2
今年で世界初のカメラ付き携帯電話が発売されて 25(!)年 3
スマートフォンにも当たり前のようにカメラがついてます ね 4
アプリ開発者ならスマートフォンのカメラで遊びたいはず 5
CameraX 6
Jetpack の一つでカメラを扱うライブラリー 7
幅広いデバイスをサポート 8
拡張機能(ボケ、 HDR、夜間モード等)に対応 9
API 21 から使える 10
セットアップ 11
libs.versions.toml [versions] camerax = "1.4.0-beta02" [libraries] androidx-camera-camera2 = { module
= "androidx.camera:camera-camera2", version.ref = "camerax" } androidx-camera-lifecycle = { module = "androidx.camera:camera-lifecycle", version.ref = "camerax" } androidx-camera-view = { module = "androidx.camera:camera-view", version.ref = "camerax" } androidx-camera-extensions = { module = "androidx.camera:camera-extensions", version.ref = "camerax" } 12
build.gradle.kts dependencies { implementation(libs.androidx.camera.camera2) implementation(libs.androidx.camera.lifecycle) implementation(libs.androidx.camera.view) implementation(libs.androidx.camera.extensions) } 13
使い方 14
使い方 val controller = LifecycleCameraController(this) controller.bindToLifecycle(this) controller.cameraSelector = CameraSelector.DEFAULT_BACK_CAMERA setContent
{ AndroidView( factory = { context -> PreviewView(context).apply { layoutParams = ViewGroup.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT ) setController(controller) } }, onRelease = { controller.unbind() } ) } 15
16
カメラ切り替え 17
カメラ切り替え val cameraSelector = if (controller.cameraSelector == CameraSelector.DEFAULT_BACK_CAMERA) { CameraSelector.DEFAULT_FRONT_CAMERA
} else { CameraSelector.DEFAULT_BACK_CAMERA } controller.cameraSelector = cameraSelector 18
撮影 19
撮影 val values = ContentValues().apply { put(MediaStore.Images.Media.MIME_TYPE, "image/jpeg") } val
imageUri = contentResolver.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values) controller.takePicture( ImageCapture .OutputFileOptions .Builder( contentResolver.openOutputStream(imageUri!!)!! ).build(), ContextCompat.getMainExecutor(this), object : ImageCapture.OnImageSavedCallback { override fun onImageSaved(outputFileResults: ImageCapture.OutputFileResults) { Toast.makeText(this, "Image captured", Toast.LENGTH_SHORT).show() } override fun onError(exception: ImageCaptureException) { Toast.makeText(this, "Image capture failed", Toast.LENGTH_SHORT).show() } }) 20
拡張機能 21
ボケ、 HDR、夜間モード等デフォルト以外の機能 22
拡張機能 val cameraSelector = CameraSelector.DEFAULT_BACK_CAMERA val mainExecutor = ContextCompat.getMainExecutor(this) val
cameraProviderFuture = ProcessCameraProvider.getInstance(this) val imageCapture = ImageCapture.Builder().build() val preview = CameraXPreview.Builder().build() 23
拡張機能 cameraProviderFuture.addListener({ val cameraProvider = cameraProviderFuture.get() val extensionsManagerFuture = ExtensionsManager.getInstanceAsync(this@MainActivity,
cameraProvider) //... }, mainExecutor) 24
拡張機能 extensionsManagerFuture.addListener({ val extensionsManager = extensionsManagerFuture.get() if (extensionsManager.isExtensionAvailable(cameraSelector, ExtensionMode.NIGHT)) {
val newSelector = extensionsManager.getExtensionEnabledCameraSelector( cameraSelector, ExtensionMode.NIGHT ) preview.surfaceProvider = findViewById<PreviewView>(R.id.previewView).surfaceProvider cameraProvider.bindToLifecycle(this, newSelector, imageCapture, preview) } }, mainExecutor) 25
Pixel 8 Pro で試してみた 26
BOKEH 27
HDR 28
NIGHT 29
他にも MLKit と統合して QR コードスキャナーを作った りできるっぽい 30
https://github.com/android/camera-samples 31
Thank you 32