diadia

興味があることをやってみる。自分のメモを残しておきます。

CameraXについての情報

cameraXというものを認識した。

コレが何であるか情報を集める。

資料

1. コードラボ

https://codelabs.developers.google.com/codelabs/camerax-getting-started/#0

2. KotlinによるCameraXの実装例の資料

【kotlin】CameraXでAndroidカメラを実装してみた | RE:ENGINES

3. JavaによるCameraXの実装例の資料

Android CameraX|npaka|note

4. hoge

【Android】CameraX試してみた - Qiita

CameraXを使ってみよう – TECH4ALL

疑問点、自分が知りたいこと

カメラは暗黙的インテントで使うものだと思っていたが、自分でカメラに関するアクティビティを作成するってことなのか? cameraXのメリットは?

setOnPreviewOutputUpdateListenerってviewFinderが更新されるたびにみたいなことが書いてあるけどココがよく分かっていない。

Matrixがなんの役割を持つクラスなのかよくわかっていない。 画像を拡大、回転させたりすることができる。

cameraXのメリットはcamera2のAPIを簡単に利用する事ができるようになることらしい。

ユースケースについて

cameraXにはユースケースが3種類ある。

  1. プレビュー
  2. 画像解析
  3. 画像キャプチャ

プレビューって言葉の意味がわからないが、おそらくカメラを通して映る映像のことだと想像する。

CameraXを使うための準備

1. dependenciesに追加

gradleに以下を追加する。

def camerax_version = '1.0.0-alpha06'
implementation "androidx.camera:camera-core:${camerax_version}"
implementation "androidx.camera:camera-camera2:${camerax_version}"

dependenciesブロックの他にandroidブロックに以下を追加する。具体的には最終部(buildTypes)のあとに続けて以下を加える。

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
CameraXのdependenciesを説明した資料

Getting Started with CameraX

2. ManifestFileにパーミッションを追加

以下を追加する。

<uses-permission android:name="android.permission.CAMERA" />
CameraXのManifestFileに関する資料

Getting Started with CameraX

setTargetResolutionについて

カメラの解像度を設定するものがsetTargetResolution()だと思うが、ユースケースの画像キャプチャのみ使えると思っていたがプレビューでもsetTargetResolution()が存在する事がわかった。

ユースケース:プレビュー

プレビューのオブジェクトはPreviewクラスを使って生成する。 プレビューの制御についてはPreviewConfig.Builder()を使ってプレビューの設定オブジェクトを生成する。
そして両者を組み合わせてPreviewオブジェクトを生成する。

プレビューのよく使われるメソッドを調べてみたい。

プレビューの表示は、Previewオブジェクトを生成し、CameraX.bindToLifecycle()の引数として渡せば良い。

ユースケース:画像キャプチャ

画像キャプチャのオブジェクトの生成は以下のようにする。

val imageCapture = ImageCapture(キャプチャコンフィグオブジェクト)

写真撮影を実行する方法はImageCapture#takePicture()メソッドである。

戻り値 引数1 引数2 引数3 メモ
Unit @NonNull executor: Executor @NonNull callback: ImageCapture.OnImageCapturedCallback Captures a new still image for in memory access.
Unit @NonNull outputFileOptions: ImageCapture.OutputFileOptions @NonNull executor: Executor @NonNull imageSavedCallback: ImageCapture.OnImageSavedCallback Captures a new still image and saves to a file along with application specified metadata.

画像のサイズをコントロールする

画像の質が特に重要ではないアプリケーションの場合には、サーバーのストレージを逼迫するような画像サイズは避けたい。この画像データサイズは以下のようにすればサイズを下げることができる。
画像のサイズは画素数ピクセル数で定まる。ピクセル数は縦横サイズで算出される。
cameraxでは縦*横サイズを定める事ができるので結果として画像サイズを下げることができる。 サイズはImageCaptureConfigにsetTargetResolution()がある。こいつにSizeオブジェクトを渡せばよい。

val imageCaptureConfig = ImageCaptureConfig.Builder()
   .apply {
       setCaptureMode(ImageCapture.CaptureMode.MIN_LATENCY)
       setTargetResolution(Size(1051, 1406))
    }.build()

なお、画像サイズ(解像度)ついては以下がわかりやすい参考資料だった。

サイズ名と画素数の対応を示す資料

解りやすい写真のサイズ!スマホは何px?比率・解像度・画素数って?