Google 的 ML Kit 提供裝置端機器學習 Vision API,用於偵測臉孔、掃描條碼、為圖片加上標籤等。有了 ML Kit 分析工具,就能更輕鬆整合 ML Kit 與 CameraX 應用程式。
ML Kit 分析工具是 ImageAnalysis.Analyzer
介面的其中一個實作項目。這項工具會視需要覆寫預設目標解析度來將 ML Kit 使用情形最佳化、處理座標轉換,並將影格傳遞至 ML Kit,以便傳回匯總分析結果。
實作 ML Kit 分析工具
如要實作 ML Kit 分析工具,建議使用 CameraController
類別,這個類別與 PreviewView
搭配運作可顯示 UI 元素。使用 CameraController
進行實作時,ML Kit 分析工具會代為處理原始 ImageAnalysis
串流與 PreviewView
之間的座標轉換。這項工具會從 CameraX 接收目標座標系統、計算座標轉換,並轉送至 ML Kit 的 Detector
類別用於分析。
如要將 ML Kit 分析工具與 CameraController
搭配使用,請呼叫 setImageAnalysisAnalyzer()
、向這段程式碼傳遞新的 ML Kit 分析工具物件,並將下列項目加入其建構函式:
- CameraX 依序叫用的 ML Kit
Detector
清單。 決定 ML Kit 輸出座標的目標座標系統:
COORDINATE_SYSTEM_VIEW_REFERENCED
:經過轉換的PreviewView
座標。COORDINATE_SYSTEM_ORIGINAL
:原始ImageAnalysis
串流座標。
Executor
,可叫用 Consumer 回呼,並將MlKitAnalyzer.Result
或相機影格的 ML Kit 匯總結果傳送給應用程式。有新的 ML Kit 輸出內容時,CameraX 叫用的
Consumer
。
以下程式碼使用 CameraController
實作 ML Kit 分析工具,設定用於偵測 QR code 的 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 分析工具將以下項目傳遞至 BarcodeScanner
的 Detector
類別:
- 轉換 Matrix,內容以代表目標座標系統的
COORDINATE_SYSTEM_VIEW_REFERENCED
為基礎。 - 相機影格。
如果 BarcodeScanner
發生任何問題,其 Detector
就會擲回錯誤,且 ML Kit 分析工具會將這項資訊傳送到應用程式。成功後,ML Kit 分析工具將傳回 MLKitAnalyzer.Result#getValue()
(在本例中為 Barcode
物件)。
您也可以使用 camera-core
包含的 ImageAnalysis
類別實作 ML Kit 分析工具。不過,由於 ImageAnalysis
未與 PreviewView
整合,因此您必須手動處理座標轉換。詳情請見 ML Kit 分析工具參考說明文件。
其他資源
如需具有 ML Kit 分析工具功能的可運作相機應用程式,請參閱 CameraX-MLKit 範例。