Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
CameraX使ってみた
Search
Takuji Nishibayashi
July 31, 2024
Technology
320
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
170
kotlinx.datetime 使ってみた
takuji31
0
1.1k
HiltのCustom Componentについて
takuji31
0
440
java.timeをAndroidで使う
takuji31
0
220
KSPを使ってコード生成
takuji31
0
490
Kotlin Symbol Processing API (KSP) を使って Kotlin ア プリケーションの開発を効率化する
takuji31
1
3.3k
kotlinx.serialization
takuji31
0
710
kanmoba-returns-02.pdf
takuji31
0
300
AndroidXとKotlin Coroutines
takuji31
0
450
Other Decks in Technology
See All in Technology
株式会社シーエーシー エンジニア向け会社紹介資料
cac
0
57k
絵ではじめるKubernetesセキュリティ
aoi1
4
660
エージェントはローカル、検証はMicroVM — Lambda MicroVMsでつくるServerless CI
fujioka6789
3
260
フルカイテン株式会社 エンジニア向け採用資料
fullkaiten
0
12k
Genieを崇めよ
kameitomohiro
0
160
登壇の自信を奪う3匹のオバケ / 3 Ghosts That Rob You of Your Confidence in Public Speaking
pauli
9
990
AIエージェントを最高のパートナーに育てる方法|評価と判断軸を育てる5つのステップ
koichiaoki
1
150
例外の正しい扱い方 そのエラー try-catchして大丈夫?
jinwatanabe
3
510
OpenTelemetryのメトリクスをCloudWatchに送ってPromQLで見てみた
ota1022
0
150
データ_AIの事業の勝敗をわけるもの
nek0128
1
440
Railsのように考える: See through the Master
snoozer05
PRO
4
1k
2026-09-11 【Snowflake World Tour Tokyo 2026】Snowflakeを起点に、AI Agentが自律稼働し続ける未来へ / Driving AI Agents with Snowflake
civitaspo
0
690
Featured
See All Featured
Getting science done with accelerated Python computing platforms
jacobtomlinson
2
480
Dominate Local Search Results - an insider guide to GBP, reviews, and Local SEO
greggifford
PRO
0
330
Leading Effective Engineering Teams in the AI Era
addyosmani
9
2.6k
GraphQLとの向き合い方2022年版
quramy
50
15k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
1.3k
Efficient Content Optimization with Google Search Console & Apps Script
katarinadahlin
PRO
1
850
The World Runs on Bad Software
bkeepers
PRO
72
12k
Lessons Learnt from Crawling 1000+ Websites
charlesmeaden
PRO
1
1.6k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
232
55k
svc-hook: hooking system calls on ARM64 by binary rewriting
retrage
2
580
SEO for Brand Visibility & Recognition
aleyda
0
4.7k
How Software Deployment tools have changed in the past 20 years
geshan
1
34k
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