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 の出力の座標を決定するターゲット座標系:
COORDINATE_SYSTEM_VIEW_REFERENCED
: 変換されたPreviewView
の座標。COORDINATE_SYSTEM_ORIGINAL
: 元のImageAnalysis
ストリームの座標。
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 は以下のものを BarcodeScanner
の Detector
クラスに渡します。
- ターゲット座標系を表す
COORDINATE_SYSTEM_VIEW_REFERENCED
に基づく変換 Matrix。 - カメラフレーム。
BarcodeScanner
でなんらかの問題が生じると、Detector
がエラーをスローし、ML Kit Analyzer がアプリに伝播します。成功すると、ML Kit Analyzer は MLKitAnalyzer.Result#getValue()
(この場合は Barcode
オブジェクト)を返します。
camera-core
の一部である ImageAnalysis
クラスを使用して ML Kit Analyzer を実装することもできます。ただし、ImageAnalysis
は PreviewView
と統合されていないため、座標変換を手動で処理する必要があります。詳細については、ML Kit Analyzer のリファレンス ドキュメントをご覧ください。
参考情報
ML Kit Analyzer の機能を備えたカメラアプリの実例については、CameraX-MLKit サンプルをご覧ください。