ML Kit Analyzer

Google の ML Kit には、顔の検出、バーコードのスキャン、画像のラベル付けなどを行うための、オンデバイスの機械学習 Vision API が用意されています。ML Kit Analyzer を使用すると、ML Kit を CameraX アプリに統合しやすくなります。

ML Kit Analyzer は、ImageAnalysis.Analyzer インターフェースの実装です。必要に応じ、デフォルトのターゲット解像度をオーバーライドして ML Kit の使用を最適化します。また、座標変換を処理し、フレームを ML Kit に渡します。これにより、分析結果の集計が返されます。

ML Kit Analyzer を実装する

ML Kit Analyzer を実装するには、PreviewView と連携して UI 要素を表示する CameraController クラスを使用することをおすすめします。CameraController を使用して実装すると、ML Kit Analyzer は、元の ImageAnalysis ストリームと PreviewView の間の座標変換を処理します。CameraX からターゲット座標系を受け取り、座標変換を計算し、ML Kit の Detector クラスに転送して分析します。

CameraController で ML Kit Analyzer を使用するには、setImageAnalysisAnalyzer() を呼び出し、コンストラクタに以下のものを含む、新しい ML Kit Analyzer オブジェクトを渡します。

  • CameraX が順番に呼び出す ML Kit Detector のリスト。
  • ML Kit の出力の座標を決定するターゲット座標系:

  • Consumer コールバックを呼び出し、カメラフレームの MlKitAnalyzer.Result(集計した ML Kit の結果)をアプリに配信する Executor

  • 新しい ML Kit の出力があったときに CameraX が呼び出す Consumer

次のコードは、CameraController を使用して ML Kit Analyzer を実装し、QR コードを検出する BarcodeScanner をセットアップします。

Kotlin

// create BarcodeScanner object
val options = BarcodeScannerOptions.Builder()
  .setBarcodeFormats(Barcode.FORMAT_QR_CODE)
  .build()
val barcodeScanner = BarcodeScanning.getClient(options)

cameraController.setImageAnalysisAnalyzer(
            ContextCompat.getMainExecutor(this),
            MlKitAnalyzer(
                listOf(barcodeScanner),
                COORDINATE_SYSTEM_VIEW_REFERENCED,
                ContextCompat.getMainExecutor(this)
            ) { result: MlKitAnalyzer.Result? ->
    // The value of result.getResult(barcodeScanner) can be used directly for drawing UI overlay.
    }
)

Java

// create BarcodeScanner object
BarcodeScannerOptions options = new BarcodeScannerOptions.Builder()
   .setBarcodeFormats(Barcode.FORMAT_QR_CODE)
   .build();
BarcodeScanner barcodeScanner = BarcodeScanning.getClient(options);

cameraController.setImageAnalysisAnalyzer(executor,
    new MlKitAnalyzer(List.of(barcodeScanner), COORDINATE_SYSTEM_VIEW_REFERENCED,
    executor, result -> {
   // The value of result.getResult(barcodeScanner) can be used directly for drawing UI overlay.
 });

上のコードサンプルでは、ML Kit Analyzer は以下のものを BarcodeScannerDetector クラスに渡します。

  • ターゲット座標系を表す COORDINATE_SYSTEM_VIEW_REFERENCED に基づく変換 Matrix
  • カメラフレーム。

BarcodeScanner でなんらかの問題が生じると、Detectorエラーをスローし、ML Kit Analyzer がアプリに伝播します。成功すると、ML Kit Analyzer は MLKitAnalyzer.Result#getValue()(この場合は Barcode オブジェクト)を返します。

camera-core の一部である ImageAnalysis クラスを使用して ML Kit Analyzer を実装することもできます。ただし、ImageAnalysisPreviewView と統合されていないため、座標変換を手動で処理する必要があります。詳細については、ML Kit Analyzer のリファレンス ドキュメントをご覧ください。

参考情報

ML Kit Analyzer の機能を備えたカメラアプリの実例については、CameraX-MLKit サンプルをご覧ください。