更新 Gradle 匯入作業
新 SDK 的每個 ML Kit API 只需要一個依附元件。您不必指定
firebase-ml-vision
或 firebase-ml-natural-language
等常用程式庫。
ML Kit 會為仰賴 Google Play 服務的程式庫使用 com.google.android.gms
命名空間。
Vision API
組合模型會隨您的應用程式一起提供。必須下載精簡的模型。 部分 API 會同時提供成套組合和精簡格式,有些 API 則僅以單一形式提供 或另外:
API | 組合 | 細 |
---|---|---|
文字辨識 | x (Beta 版) | x |
臉部偵測 | x | x |
條碼掃描 | x | x |
為圖片加上標籤 | x | x |
偵測及追蹤物件 | x | - |
更新模組中 ML Kit Android 程式庫的依附元件 (應用程式
等級) Gradle 檔案 (通常為 app/build.gradle
),相關資料表如下表所示:
組合模型
API | 古物 | 新增構件 |
---|---|---|
條碼掃描 | com.google.firebase:firebase-ml-vision:24.0.1 com.google.firebase:firebase-ml-vision-barcode-model:16.0.1 |
com.google.mlkit:barcode-scanning:17.3.0 |
臉部輪廓 | com.google.firebase:firebase-ml-vision:24.0.1 com.google.firebase:firebase-ml-vision-face-model:19.0.0 |
com.google.mlkit:face-detection:16.1.7 |
為圖片加上標籤 | com.google.firebase:firebase-ml-vision:24.0.1 com.google.firebase:firebase-ml-vision-image-label-model:19.0.0 |
com.google.mlkit:image-labeling:17.0.9 |
物件偵測 | com.google.firebase:firebase-ml-vision:24.0.1 com.google.firebase:firebase-ml-vision-object-detection-model:19.0.3 |
com.google.mlkit:object-detection:17.0.2 |
精簡模型
API | 古物 | 新增構件 |
---|---|---|
條碼掃描 | com.google.firebase:firebase-ml-vision:24.0.1 | com.google.android.gms:play-services-mlkit-barcode-scanning:18.3.1 |
臉部偵測 | com.google.firebase:firebase-ml-vision:24.0.1 | com.google.android.gms:play-services-mlkit-face-detection:17.1.0 |
文字辨識 | com.google.firebase:firebase-ml-vision:24.0.1 | com.google.android.gms:play-services-mlkit-text-recognition:19.0.1 |
AutoMLVision Edge
API | 舊構件 | 新增構件 |
---|---|---|
無需下載的 AutoML | com.google.firebase:firebase-ml-vision:24.0.1 com.google.firebase:firebase-ml-vision-automl:18.0.3 |
com.google.mlkit:image-labeling-custom:17.0.3 |
具備下載的 AutoML | com.google.firebase:firebase-ml-vision:24.0.1 com.google.firebase:firebase-ml-vision-automl:18.0.3 |
com.google.mlkit:image-labeling-custom:17.0.3
com.google.mlkit:linkfirebase:17.0.0 |
Natural Language API
組合模型會隨您的應用程式一起提供。需要下載的小型模型:
API | 組合 | 細 |
---|---|---|
語言 ID | x | x |
智慧回覆 | x | x (Beta 版) |
更新模組中 ML Kit Android 程式庫的依附元件 (應用程式
等級) Gradle 檔案 (通常為 app/build.gradle
),相關資料表如下表所示:
組合模型
API | 古物 | 新增構件 |
---|---|---|
語言 ID | com.google.firebase:firebase-ml-natural-language:22.0.0 com.google.firebase:firebase-ml-natural-language-language-id-model:20.0.7 |
com.google.mlkit:language-id:17.0.6 |
智慧回覆 | com.google.firebase:firebase-ml-natural-language:22.0.0 com.google.firebase:firebase-ml-natural-language-smart-reply-model:20.0.7 |
com.google.mlkit:smart-reply:17.0.4 |
精簡模型
API | 古物 | 新增構件 |
---|---|---|
語言 ID | com.google.firebase:firebase-ml-natural-language:22.0.0 com.google.firebase:firebase-ml-natural-language-language-id-model:20.0.7 |
com.google.android.gms:play-services-mlkit-language-id:17.0.0 |
智慧回覆 | com.google.firebase:firebase-ml-natural-language:22.0.0 com.google.firebase:firebase-ml-natural-language-smart-reply-model:20.0.7 |
com.google.android.gms:play-services-mlkit-smart-reply:16.0.0-beta1 |
更新類別名稱
如果課程在此表格中,請進行對應的變更:
舊類別 | 新課程 |
---|---|
com.google.firebase.ml.common.FirebaseMLException | com.google.mlkit.common.MlKitException |
com.google.firebase.ml.vision.common.FirebaseVisionImage | com.google.mlkit.vision.common.InputImage |
com.google.firebase.ml.vision.barcode.FirebaseVisionBarcodeDetector | com.google.mlkit.vision.barcode.BarcodeScanner |
com.google.firebase.ml.vision.labeler.FirebaseVisionImageLabel | com.google.mlkit.vision.label.ImageLabeler |
com.google.firebase.ml.vision.barcode.FirebaseVisionBarcodeDetector | com.google.mlkit.vision.barcode.BarcodeScanner |
com.google.firebase.ml.vision.automl.FirebaseAutoMLLocalModel | com.google.mlkit.common.model.LocalModel |
com.google.firebase.ml.vision.automl.FirebaseAutoMLRemoteModel | com.google.mlkit.common.model.CustomRemoteModel |
com.google.firebase.ml.vision.label.FirebaseVisionOnDeviceImageLabelerOptions | com.google.mlkit.vision.label.defaults.ImageLabelerOptions |
com.google.firebase.ml.vision.label.FirebaseVisionImageLabel | com.google.mlkit.vision.label.ImageLabel |
com.google.firebase.ml.vision.label.FirebaseVisionOnDeviceAutoMLImageLabelerOptions | com.google.mlkit.vision.label.custom.CustomImageLabelerOptions |
com.google.firebase.ml.vision.objects.FirebaseVisionObjectDetectorOptions | com.google.mlkit.vision.objects.defaults.ObjectDetectorOptions |
如果是其他課程,請遵循下列規則:
- 移除類別名稱中的
FirebaseVision
前置字串。 - 從類別名稱中移除開頭是
Firebase
前置字元的其他前置字串。
此外,在套件名稱中,將取代 com.google.firebase.ml
前置字元
com.google.mlkit
。
更新方法名稱
幾乎不需要變更程式碼:
- 偵測器/掃描器/標籤器/翻譯器...建立例項已變更。每項功能現在都有專屬的進入點。例如:BarcodeScanning、TextRecognition、ImageLabeling、Translation。對 Firebase 服務
getInstance()
的呼叫會替換為功能進入點的getClient()
方法。 - 我們移除了用於識別中文和韓文等其他程式庫的其他程式庫,因此已移除 TextRecognizer 的預設例項化機制。如要搭配拉丁文指令碼文字辨識模型使用預設選項,請在
com.google.android.gms:play-services-mlkit-text-recognition
上宣告依附元件,並使用TextRecognition.getClient(TextRecognizerOptions.DEFAULT_OPTIONS)
。 - 由於我們針對這兩項功能導入自訂模型支援,因此已移除 ImageLabeler 和 ObjectDetector 的預設例項化機制。舉例來說,如要在 ImageLabeling 中使用基本模型搭配預設選項,請宣告
com.google.mlkit:image-labeling
的依附元件,並在 Java 中使用ImageLabeling.getClient(ImageLabelerOptions.DEFAULT_OPTIONS)
。 - 所有控點 (偵測器/掃描器/標籤器/翻譯器...) 都可關閉。確保不再使用這些物件時,必須呼叫
close()
方法。如果您在 Fragment 或 AppCompatActivity 中使用這些字串,最簡單的方法就是在 Fragment 或 AppCompatActivity 上呼叫 LifecycleOwner.getLifecycle(),然後呼叫 Lifecycle.addObserver。 - 為保持一致,Vision API 中的
processImage()
和detectInImage()
已重新命名為process()
。 - Natural Language API 現在使用「語言標記」(依 BCP 47 標準定義),而非「語言代碼」。
- 已移除 xxxOptions 類別中的 getter 方法。
- 公開介面不再支援 InputImage 類別 (取代
FirebaseVisionImage
) 中的 getBitmap() 方法。請參閱 ML Kit 快速入門導覽課程範例中的BitmapUtils.java
,從各種輸入內容轉換點陣圖。 - FirebaseVisionImageMetadata 已移除,您可以直接將圖片中繼資料 (例如寬度、高度、旋轉角度、格式) 傳遞至 InputImages 的建構方法。
以下列舉幾個舊版和新的 Kotlin 方法:
舊優惠
// Construct image labeler with base model and default options. val imageLabeler = FirebaseVision.getInstance().onDeviceImageLabeler // Construct object detector with base model and default options. val objectDetector = FirebaseVision.getInstance().onDeviceObjectDetector // Construct face detector with given options val faceDetector = FirebaseVision.getInstance().getVisionFaceDetector(options) // Construct image labeler with local AutoML model val localModel = FirebaseAutoMLLocalModel.Builder() .setAssetFilePath("automl/manifest.json") .build() val autoMLImageLabeler = FirebaseVision.getInstance() .getOnDeviceAutoMLImageLabeler( FirebaseVisionOnDeviceAutoMLImageLabelerOptions.Builder(localModel) .setConfidenceThreshold(0.3F) .build() )
新功能
// Construct image labeler with base model and default options. val imageLabeler = ImageLabeling.getClient(ImageLabelerOptions.DEFAULT_OPTIONS) // Optional: add life cycle observer lifecycle.addObserver(imageLabeler) // Construct object detector with base model and default options. val objectDetector = ObjectDetection.getClient(ObjectDetectorOptions.DEFAULT_OPTIONS) // Construct face detector with given options val faceDetector = FaceDetection.getClient(options) // Construct image labeler with local AutoML model val localModel = LocalModel.Builder() .setAssetManifestFilePath("automl/manifest.json") .build() val autoMLImageLabeler = ImageLabeling.getClient( CustomImageLabelerOptions.Builder(localModel) .setConfidenceThreshold(0.3F).build())
以下列舉幾個新舊 Java 方法的範例:
舊優惠
// Construct image labeler with base model and default options. FirebaseVisionImageLabeler imagelLabeler = FirebaseVision.getInstance().getOnDeviceImageLabeler(); // Construct object detector with base model and default options. FirebaseVisionObjectDetector objectDetector = FirebaseVision.getInstance().getOnDeviceObjectDetector(); // Construct face detector with given options FirebaseVisionFaceDetector faceDetector = FirebaseVision.getInstance().getVisionFaceDetector(options); // Construct image labeler with local AutoML model FirebaseAutoMLLocalModel localModel = new FirebaseAutoMLLocalModel.Builder() .setAssetFilePath("automl/manifest.json") .build(); FirebaseVisionImageLabeler autoMLImageLabeler = FirebaseVision.getInstance() .getOnDeviceAutoMLImageLabeler( FirebaseVisionOnDeviceAutoMLImageLabelerOptions.Builder(localModel) .setConfidenceThreshold(0.3F) .build());
新功能
// Construct image labeler with base model and default options. ImageLabeler imageLabeler = ImageLabeling.getClient(ImageLabelerOptions.DEFAULT_OPTIONS); // Optional: add life cycle observer getLifecycle().addObserver(imageLabeler); // Construct object detector with base model and default options. ObjectDetector objectDetector = ObjectDetection.getClient(ObjectDetectorOptions.DEFAULT_OPTIONS); // Construct face detector with given options FaceDetector faceDetector = FaceDetection.getClient(options); // Construct image labeler with local AutoML model LocalModel localModel = new LocalModel.Builder() .setAssetManifestFilePath("automl/manifest.json") .build(); ImageLabeler autoMLImageLabeler = ImageLabeling.getClient( new CustomImageLabelerOptions.Builder(localModel) .setConfidenceThreshold(0.3F).build());
API 專屬變更
條碼掃描
針對 Barcode Scanning API,系統現在有兩種方法可以提供模型:
- 透過 Google Play 服務又稱為「精簡」(建議做法):這種做法可縮減應用程式大小,並減少應用程式共用模型。不過,開發人員首次使用模型前,必須先確認已下載模型。
- 應用程式的 APK (又稱「套裝組合」):這會增加應用程式大小,但表示模型可立即使用。
這兩種導入方式略有不同,「組合」版有一些改善項目,與「精簡」版本相較。如要進一步瞭解這些差異,請參閱條碼掃描 API 指南。
臉部偵測
Face Detection API 有兩種提供模型的方式:
- 透過 Google Play 服務又稱為「精簡」(建議做法):這種做法可縮減應用程式大小,並減少應用程式共用模型。不過,開發人員首次使用模型前,必須先確認已下載模型。
- 應用程式的 APK (又稱「套裝組合」):這會增加應用程式的下載大小,但表示模型可立即使用。
這些實作方式的行為都相同。
翻譯
TranslateLanguage
現在使用可讀的名稱做為常數 (例如ENGLISH
),而非語言標記 (EN
)。這些字串現在也是 @StringDef,而不是 @IntDef,而常數值則是相符的 BCP 47 語言標記。如果應用程式使用「裝置閒置」下載條件選項,請注意這個選項已移除,無法再使用。你仍然可以使用「裝置充電」選項。如果您需要更複雜的行為,可以延遲在自己的邏輯後方呼叫
RemoteModelManager.download
。
AutoML 圖片標籤
如果應用程式使用「裝置閒置」下載條件選項,請注意這個 選項已移除,無法再使用。你仍然可以使用 「裝置充電」選項。
如要採取更複雜的行為,可以延遲呼叫
RemoteModelManager.download
。
物件偵測與追蹤
如果應用程式使用物件偵測進行粗略分類,請注意 新的 SDK 已變更偵測到偵測結果分類類別的方式 如需儲存大量結構化物件 建議使用 Cloud Bigtable
分類類別會傳回
DetectedObject.Label
,而不是整數。所有可能符合
PredefinedCategory
類別包含粗略分類。
以下是舊版與新 Kotlin 程式碼的範例:
舊優惠
if (object.classificationCategory == FirebaseVisionObject.CATEGORY_FOOD) { ... }
新功能
if (!object.labels.isEmpty() && object.labels[0].text == PredefinedCategory.FOOD) { ... } // or if (!object.labels.isEmpty() && object.labels[0].index == PredefinedCategory.FOOD_INDEX) { ... }
以下是舊、新 Java 程式碼的範例:
舊優惠
if (object.getClassificationCategory() == FirebaseVisionObject.CATEGORY_FOOD) { ... }
新功能
if (!object.getLabels().isEmpty() && object.getLabels().get(0).getText().equals(PredefinedCategory.FOOD)) { ... } // or if (!object.getLabels().isEmpty() && object.getLabels().get(0).getIndex() == PredefinedCategory.FOOD_INDEX) { ... }
系統已移除「不明」類別。如果物件的分類可信度偏低,我們不會傳回任何標籤。
移除 Firebase 依附元件 (選用)
只有在符合下列條件時,才適用這個步驟:
- Firebase ML Kit 是您唯一的 Firebase 元件。
- 你只能使用裝置端 API。
- 不要使用提供模型。
如果是這種情況,您可以在遷移後移除 Firebase 依附元件。 請按照下列步驟操作:
- 如要移除 Firebase 設定檔,請在應用程式的模組 (應用程式層級) 目錄中刪除 google-services.json 設定檔。
- 將模組 (應用程式層級) Gradle 檔案 (通常是 app/build.gradle) 中的 Google 服務 Gradle 外掛程式換成 Strict Version Matcher 外掛程式:
之前
apply plugin: 'com.android.application' apply plugin: 'com.google.gms.google-services' // Google Services plugin android { // … }
使用後
apply plugin: 'com.android.application' apply plugin: 'com.google.android.gms.strict-version-matcher-plugin' android { // … }
- 將專案 (根層級) Gradle 檔案 (build.gradle) 中的 Google 服務 Gradle 外掛程式類別路徑,換成 Strict Version Matcher 外掛程式中的 Google 服務 Gradle 外掛程式類別路徑:
之前
buildscript { dependencies { // ... classpath 'com.google.gms:google-services:4.3.3' // Google Services plugin } }
使用後
buildscript { dependencies { // ... classpath 'com.google.android.gms:strict-version-matcher-plugin:1.2.1' } }
前往 Firebase 控制台刪除 Firebase 應用程式,步驟如下: 參閱 Firebase 支援網站上的操作說明。
取得協助
如果遇到任何問題,請瀏覽我們的社群頁面,其中列出相關說明 與我們聯絡