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 匯總結果傳送給應用程式。Consumer
,供 CameraX 在有新的 ML Kit 輸出結果時叫用。
以下程式碼會使用 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 範例。