CameraXについての情報
cameraXというものを認識した。
コレが何であるか情報を集める。
資料
1. コードラボ
https://codelabs.developers.google.com/codelabs/camerax-getting-started/#0
2. KotlinによるCameraXの実装例の資料
【kotlin】CameraXでAndroidカメラを実装してみた | RE:ENGINES
3. JavaによるCameraXの実装例の資料
4. hoge
疑問点、自分が知りたいこと
カメラは暗黙的インテントで使うものだと思っていたが、自分でカメラに関するアクティビティを作成するってことなのか? cameraXのメリットは?
setOnPreviewOutputUpdateListenerってviewFinderが更新されるたびにみたいなことが書いてあるけどココがよく分かっていない。
Matrixがなんの役割を持つクラスなのかよくわかっていない。 画像を拡大、回転させたりすることができる。
cameraXのメリットはcamera2のAPIを簡単に利用する事ができるようになることらしい。
ユースケースについて
cameraXにはユースケースが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を説明した資料
2. ManifestFileにパーミッションを追加
以下を追加する。
<uses-permission android:name="android.permission.CAMERA" />
CameraXのManifestFileに関する資料
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()
なお、画像サイズ(解像度)ついては以下がわかりやすい参考資料だった。