LoginSignup
4
1

More than 3 years have passed since last update.

CameraXのCodelabs試してみた

Last updated at Posted at 2019-05-22

概要

I/Oで発表があったCameraX。Codelabsで公開されていたものを試してみました。ちょっとハマったとこがあったので、メモがてら書いておきます。
Getting Started with CameraX

というのも、I/O Extended 2019 Tokyo@GDG にてCodelabsの課題が上がっていたからです笑
当日はセッションに興味がありCodelabsには参加しませんでしたが、また機会があれば参加してみたい。

実装の流れ

実際のCodelabsをみてもらえたらいいと思うんですが、簡単に流れを書いておきます。Codelabsのセクションとはちょっと変えてます。

  1. CameraXをgradleに追加
  2. view finder layoutを準備
  3. Cameraのパーミッションを付与
  4. Permission許可&チェックのコードを記述
  5. view finder(use case)を実装
  6. image capture(use case)を実装
  7. image analysis(use case)を実装

ポイント

  • use caseを作る。

    • Preview(view finder): プレビュー
    • ImageCaputure: 画像保存
    • ImageAnalysis: 画像解析
  • 作ったuse caseを、CameraX.bindToLifecycle(this, preview, imageCapture, analyzerUseCase) でlifecycleOwner(Activity)にbindする

ハマったところ

プレビューが縦に潰れる。。

before.kt
val previewConfig = PreviewConfig.Builder().apply {
        setTargetAspectRatio(Rational(1, 1))
        setCaptureMode(ImageCapture.CaptureMode.MIN_LATENCY)
    }.build()

アスペクトをが1:1で設定しているのに、プレビューが縦に崩れる。。。

結局崩れるのはなぜかわからなかったんですが、公式のサンプル
の通りに実際のViewのディスプレイサイズを取得し設定したら治った。

after.kt
val metrics = DisplayMetrics().also { viewFinder.display.getRealMetrics(it) }
val screenAspectRatio = Rational(metrics.widthPixels, metrics.heightPixels)
val screenSize = Size(metrics.widthPixels, metrics.heightPixels)

val previewConfig = PreviewConfig.Builder().apply {
        setTargetAspectRatio(screenAspectRatio)
        setTargetResolution(screenSize)
    }.build()

Capture時に保存された画像は正常だったところを見ると、Viewに反映される際になにか問題があるのかも。時間が許せばもっと探ってみようかな。。

所感

lifecycleにbindでき、自分で面倒を見ないでいいのがすごく楽だと感じました。
もうすこしドキュメント見て、触ってみようと思えました。

4
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
1