blog

[Android] CameraX: 過去、現在、未来を垣間見る。

CameraXは、Androidアプリにカメラ機能を簡単に追加できる、バンドルされていないAndroid Jetpackライブラリです。従来、Androidデバイスの多様性と複雑なプログラミングモデル...

Apr 14, 2020 · 9 min. read
シェア

元記事:

公開日: 2020年7月22日 - 7 min read

アンバンドルのライブラリで、Androidアプリケーションにカメラ機能を簡単に追加することができます。従来、多種多様なAndroidデバイスと複雑なプログラミングモデルのため、Android上でカメラ機能を持つアプリを構築することは非常に困難でした。現在、何千人もの開発者がCameraXを使用しており、その多くがAPKサイズの縮小、ビジネスメトリクスの改善、リソースの効率化を実現しています。

この記事では、CameraXが既存のカメラフレームワークのプログラミングモデルをどのように破壊するか、Android上でアプリを拡張するのにどのように役立つか、またML Kitのようなスマートな機能をアプリに簡単に統合できるなど、以降の新機能について紹介します。

過去の複雑さをひっくり返す

まず、皆さんが抱えている様々な問題をウェブで検索し、利用可能な機器のいくつかを使って現場で実験することから始めてください。皆さんの多くが、異なるメーカー、チップセット、さらには特定のデバイスのif-elseコードブロックを大量に使用していることに驚かれることでしょう。この動作の理由の1つは、Camera1またはCamera2フレームワークAPIを使用すると、写真を撮るなどの目的の出力を達成するために、デバイスとOS固有の入力セットから開始する必要があることです。新しいデバイスが登場したときにコードを拡張するのは大変です。

Camera1/Camera2 フレームワーク プログラミングモデル

プログラミングモデルを根本的に考え直す必要がありました。皆さんからの多くのフィードバックに触発され、ファネルを反転させ、ユースケースベースのアプローチから始めました。

CameraXプログラミングモデル

この新しいアプローチにより、チームはアンバンドル・ライブラリであるCameraXを作成しました。CameraXはすべての主要なAndroidバージョンに対応しており、デバイス固有のif-elseブロックなしで、API 21から94%以上のデバイスで動作します。CameraXでは、まずユースケースを作成し、目標を指定します。例えば、ImageCaptureユースケースで "写真を撮る "などです。その後、CameraXがOSとデバイスの具体的な構成を決定し、目標の達成を支援します。今日、ユースケースは、プレビュー、イメージ分析、イメージキャプチャに始まり、CameraX体験の基礎となっています。

開発者のテストのスケールアップを支援

既存のフレームワークAPIを実装して使用することの複雑さに加えて、多くの開発者は、多数のAndroidデバイスと異なるカメラ構成でアプリを大規模にテストすることに苦労しています。最も基本的なカメラアプリであっても、リソースのかなりの部分が多数のデバイスのテストに費やされ、前述のデバイス固有の回避策につながることを理解してください。テストが開発全体の重要な部分であることを考慮し、複数のAndroidデバイスにわたるテストカバレッジを提供するために、CameraX専用のテストラボを設立しました。

光制御のCameraXテストボックス内のサムスンGalaxy J1 Ace。

今日、このラボには90台以上のアンドロイド端末があります。カメラアプリの回転と向きをシミュレートするために、制御可能なライトとモーターを備えたカスタマイズされたテストボックス内に2台の携帯電話が取り付けられています。これらの90以上のデバイスは、すべてのOSレベル、価格層、チップセット、メーカーにわたって、約4億5000万アクティブAndroidデバイスを表していますデバイス一覧)。

差を縮める

Androidメーカーはここ数年で大きな進歩を遂げ、ハイダイナミックレンジ、ぼかしボケ、夜間撮影などの新機能をモバイルデバイスにもたらしました。CameraX Vendor Extensionsこのギャップを埋め、メーカー固有の5つの機能をすべての開発者に開放します。これには以下が含まれます。

  • HDR:メーカーのマルチフレーム処理機能を使用して複数のフレームを合成し、シーンのハイライトとローライトを保持したイメージを提供します。
  • ナイトリー:メーカーの低照度マルチフレーム処理機能を使用して、低照度条件下でより魅力的なイメージを提供します。
  • 自動的に:現在の周囲の明るさに応じて、HDRまたは夜景のイメージを自動的に判断して配信します。
  • ヴィネット:背景をぼかしたイメージで、人物撮影に最適です。
  • ビューティー:イメージのフェイスビューティー効果を有効にします。

最も優れている点は、Extensions が有効になっている場合、デバイス固有の if-else ブロックは必要ありません。ExtensionsManager.ExtensionsAvailabilityを使用して、特定のデバイスで Extensions が有効になっているかどうかを確認できます。Extensions が利用可能な場合は、必要な UI 要素をユーザーに表示し、プレビューと ImageCapture のユースケースを通常の Extensions の代わりに使用するように設定できます。を使用するように設定できます。わずか数行のコードを追加するだけで、画質と全体的なユーザーエクスペリエンスを劇的に向上させることができます。

CameraX Extensionsで撮影したSamsung S10+のHDRオフとHDRオン。

これらの拡張機能は、Samsung、Motorola、Oppo、およびUnisocモバイルプロセッサを使用する多くのエントリーレベルの携帯電話で利用できます。Extensionsでギャップを縮めることができるのは素晴らしいことであり、これらの機能を搭載したデバイスの数を拡大し続けているすべてのメーカーに感謝します。

新機能の有効化

Google I/O 2019でのCameraXのPreview 、2020年2月のBetaリリース 、そして今日。最新のベータリリースでは、CameraXの互換性の改善、シームレスなプレビューを可能にするPreviewViewの導入、CameraXをさらに使いやすくする新しいサンプルやユーティリティに関する情報を共有できるのは素晴らしいことです。まず、デバイスのアスペクト比のエラー、場合によってはカメラの切り替えができない、クリックトゥフォーカスの解決など、デバイス固有の問題に対処するために、CameraXに修正と回避策を追加することで、デバイスの互換性が改善されています。さらに、公開されたバグレポートからのご意見に基づき、UIウィジェットの統合やアスペクト比のテストなどの追加テストがCameraXテストラボに追加されました。もし、特定のデバイスで何か問題がありましたら、お知らせください。

CameraXはビューティーユースケースを提供していますが、多くの人が画面上のプレビューを取得するためのシンプルなソリューションを求めていましたPreviewView、カメラと対話するビューをアプリケーションに追加する最も簡単な方法です。カメラAPIや基礎となるハードウェアに関する深い知識は必要なく、CameraXを使用しているため、電力効率が良く、ユーザーへの待ち時間が非常に少なくなっています。デフォルトでSurfaceView使用し、デバイスがSurfaceViewと互換性がない場合は自動的にTextureViewフォールバックします。

PreviewView、ユーザーエクスペリエンスの向上にも役立ちます。新しいgetPreviewStreamState()APIは、プレビューがストリーミングまたはアイドルであるときにアプリケーションに通知することを可能にします。この新しいAPIを使用すると、プレビューがアイドル状態のときにPreviewViewの上部にプレースホルダイメージを表示し、プレビューがストリーミング状態のときにプレースホルダを非表示にすることができます。これにより、プレビュー開始時の不快なブラックスクリーンを避けることができます。PreviewViewの使用方法については、こちらのブログポストを参照してください。

ML Suite + CameraX Google翻訳デモGitHub

最後に、ImageAnalysisフレーム単位のバッファアクセスを提供することから始まります。このユースケースをImageCaptureターンキーAPIと組み合わせると、テキスト認識、イメージラベリング、さらには独自の学習済みTensorflow Liteモデルを使用したオブジェクトの検出と認識など、多くの新しい可能性が開けます。また、TensorFlow LiteランタイムGitHub)でCameraXを直接使用することもできます。CameraXの最新アップデートの詳細については、こちらのビデオをご覧ください:

CameraXベータ版について

現在Playストアには、自動車、銀行、出会い系、チャット、eコマース、検索、ソーシャルなど様々なカテゴリでCameraXを導入しているアプリが数千あります。CameraXが役立っているデベロッパーには以下のようなものがあります。

  • Monzo銀行はCameraXを使用して、a) UIコードを含む9,000行のコードを削除し、b) 認識イメージキャプチャと自撮りビデオ撮影のドロップアウト率を25%から約5%に削減しました。
  • YouCam Perfectは、CameraXによってコード行数を70%削減し、新製品の開発効率を劇的に向上させました。
  • Ufotoは、CameraXを使用してリソースを効率化し、エンジニアがクールな新機能の開発に集中できるようになりました。また、Camera1からCameraXに移行した際、大幅な改善が見られました。例えば、一部のデバイスではイメージキャプチャ速度が10%向上し、一部のデバイスではプレビューフレームレートが30%向上しました。

次のステップ

Androidとのデバイスの互換性と信頼性は、CameraXをより使いやすくしながら、引き続き改善されます。例えば、今後数ヶ月のうちにCameraXテストラボにさらに多くのデバイスが追加される予定です。開発者は、基礎となるカメラスタックやデバイスの仕様について心配する必要がなく、ユーザーに愛される素晴らしいアプリの開発に集中できると強く信じています。2,000人以上の開発者が本番環境でCameraXを使用しているため、最新バージョンのCameraXベータ版を採用し、デプロイすることをお勧めします。CameraXを試してみたい方は、チュートリアルや公式サンプルをご覧ください。CameraXをお試しになった後、どのような改善が見られたかお知らせいただけると幸いです。また、Android CameraXディスカッショングループにメールで質問を送るか、StackOverflowに"android-camerax "タグを使って投稿してください。

CameraX Jetpackライブラリの開発、構築にご協力いただいた素晴らしい開発者、パートナー、メーカー、CameraXチームメンバーの皆様に心より感謝いたします。

www.DeepL.com/Translator翻译 経由

Read next

Spring Extension-1-カスタム環境変数のバリデーション

言うまでもないことですが、公式のコメントを見て、キーメソッドの場所を特定できるはずです。 ご覧のように、スプリングコンテナの初期化は、コレクションからすべてのキーを取り出し、これらのキーを取得します...

Apr 14, 2020 · 4 min read