遷移 Android 應用程式

更新 Gradle 匯入作業

新版 SDK 只需要每個 ML Kit API 一個依附元件。您不需要指定常見的程式庫,例如 firebase-ml-visionfirebase-ml-natural-language。ML Kit 會將 com.google.android.gms 命名空間用於依附 Google Play 服務的程式庫。

Vision API

隨附模型會以應用程式的形式提供。必須下載精簡模型。 部分 API 會以組合式和精簡格式提供,其他 API 僅能以一種格式提供,或以另一種格式提供:

API組合
文字辨識x (測試版)x
臉部偵測xx
條碼掃描xx
為圖片加上標籤xx
物件偵測和追蹤x-

根據下列資料表,更新模組 (應用程式層級) Gradle 檔案 (通常為 app/build.gradle) 中 ML Kit Android 程式庫的依附元件:

組合模型

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.2.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.6
為圖片加上標籤 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.8
物件偵測 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.1

精簡模型

API舊文物新增構件
條碼掃描 com.google.firebase:firebase-ml-vision:24.0.1 com.google.android.gms:play-services-mlkit-barcode-scanning:18.3.0
臉部偵測 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.0

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.2
可供下載的 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.2
com.google.mlkit:linkfirebase:17.0.0

Natural Language API

隨附模型會以應用程式的形式提供。必須下載精簡模型:

API組合
語言 IDxx
智慧回覆xx (測試版)

根據下列資料表,更新模組 (應用程式層級) Gradle 檔案 (通常為 app/build.gradle) 中 ML Kit Android 程式庫的依附元件:

組合模型

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.5
智慧回覆 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.3

精簡模型

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 已移除,您可以直接將寬度、高度、旋轉角度等圖片中繼資料、格式傳遞至 InputImage 的建構方法。

以下是一些新舊 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 稱為「隨附」:這會增加應用程式大小,但表示模型可立即使用。

這兩種導入做法略有不同,「隨附」版本比「精簡型」版本提供許多改善項目。如需這些差異的詳細資料,請參閱 Barcode Scanning API 指南。

臉部偵測

Face Detection API 有兩種方式提供模型:

  • 透過 Google Play 服務 (又稱為「精簡型」) - 這樣可以縮減應用程式大小,並讓應用程式共用模型。不過,開發人員必須先確保已下載模型,才能首次使用。
  • 當應用程式的 APK 等於「隨附」:這會增加應用程式下載大小,但表示該模型可立即使用。

實作方式的行為相同。

Translation

  • TranslateLanguage 現在使用可讀取的常數名稱 (例如 ENGLISH),而非語言標記 (EN)。現在這些常數也是 @StringDef,而非 @IntDef,而常數值是相符的 BCP 47 語言標記

  • 請注意,如果您的應用程式使用「裝置閒置」這項下載條件選項,該選項已遭移除,無法再使用。你仍然可以使用「裝置充電」選項。如需更複雜的行為,可以延遲在邏輯後方呼叫 RemoteModelManager.download

AutoML 圖片標籤

如果應用程式使用「裝置閒置」下載條件選項,請注意,這個選項已移除,無法再使用。你仍然可以使用「裝置充電」選項

如果您想使用更複雜的行為,可以延遲在邏輯後方呼叫 RemoteModelManager.download

物件偵測和追蹤

請注意,如果應用程式使用物件偵測功能進行粗略分類,請注意,新的 SDK 已變更為偵測到的物件傳回分類類別的方式。

分類類別會傳回 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 依附元件。請按照下列步驟操作:

  • 刪除應用程式模組 (應用程式層級) 目錄中的 google-services.json 設定檔,藉此移除 Firebase 設定檔。
  • 將模組 (應用程式層級) Gradle 檔案 (通常為 app/build.gradle) 中的 Google Services Gradle 外掛程式替換為嚴格版本比對工具外掛程式:

完成前

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 Services 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 支援網站上的instructions,在 Firebase 控制台刪除 Firebase 應用程式。

取得協助

如果您遇到任何問題,請參閱社群頁面,簡單介紹可與我們聯繫的頻道。