Bermigrasi untuk iOS

Panduan ini menjelaskan cara bermigrasi dari ML Kit for Firebase untuk iOS.

Prasyarat

Sebelum mulai memigrasikan kode, pastikan Anda memenuhi persyaratan berikut:

  • ML Kit mendukung Xcode 13.2.1 atau yang lebih baru.
  • ML Kit mendukung iOS versi 15.5 atau yang lebih baru.
  • ML Kit tidak mendukung arsitektur 32-bit (i386 dan armv7). ML Kit mendukung arsitektur 64-bit (x86_64 dan arm64).
  • Library ML Kit hanya disediakan sebagai cocoapods. Anda tidak dapat menggabungkan framework dan cocoapods, jadi untuk menggunakan library ini, Anda harus bermigrasi terlebih dahulu untuk menggunakan cocoapods.

Mengupdate Cocoapods

Update dependensi untuk cocoapods ML Kit iOS di Podfile aplikasi Anda:

APINama pod lamaNama pod baru
Pemindaian kode batang Firebase/MLVision
Firebase/MLVisionBarcodeModel
GoogleMLKit/BarcodeScanning
Deteksi wajah Firebase/MLVision
Firebase/MLVisionFaceModel
GoogleMLKit/FaceDetection
Pelabelan gambar Firebase/MLVision
Firebase/MLVisionLabelModel
GoogleMLKit/ImageLabeling
Deteksi dan pelacakan objek Firebase/MLVisionObjectDetection GoogleMLKit/ObjectDetection
Pengenalan teks Firebase/MLVision
Firebase/MLVisionTextModel
GoogleMLKit/TextRecognition
Pelabelan gambar AutoML (model gabungan) Firebase/MLVisionAutoML GoogleMLKit/ImageLabelingCustom
Pelabelan gambar AutoML (model yang didownload) Firebase/MLVisionAutoML GoogleMLKit/ImageLabelingCustom

Untuk menghosting dan mendownload model kustom, pindahkan model Anda ke Cloud Storage dan tambahkan logika download di aplikasi Anda untuk memuatnya sebagai model lokal. Untuk mengetahui detailnya, lihat panduan migrasi Firebase ML ke Cloud Storage.
ID Bahasa Firebase/MLNaturalLanguage
Firebase/MLNLLanguageID
GoogleMLKit/LanguageID
Smart Reply Firebase/MLNaturalLanguage
Firebase/MLNLSmartReply
GoogleMLKit/SmartReply
Terjemahkan Firebase/MLNaturalLanguage
Firebase/MLNLTranslate
GoogleMLKit/Translate

Mengupdate nama class, enum, dan jenis

Secara umum, class, enum, dan jenis harus diganti namanya sebagai berikut:

  • Swift: Hapus awalan Vision dari nama class dan enum
  • Objective-C: Ganti awalan nama class dan enum FIRVision dan FIR dengan MLK

Untuk beberapa nama class dan jenis, aturan umum ini tidak berlaku:

Swift

Class atau jenis lamaClass atau jenis baru
AutoMLLocalModel LocalModel
AutoMLRemoteModel LocalModel

Memerlukan download manual. Model jarak jauh yang dihosting Firebase tidak digunakan lagi. Untuk mengetahui detailnya, lihat panduan migrasi Firebase ML ke Cloud Storage.
VisionBarcodeDetectionCallback BarcodeScanningCallback
VisionBarcodeDetector BarcodeScanner
VisionBarcodeDetectorOptions BarcodeScannerOptions
VisionImage VisionImage (tidak ada perubahan)
VisionPoint VisionPoint (tidak ada perubahan)
VisionOnDeviceAutoMLImageLabelerOptions CustomImageLabelerOptions
VisionOnDeviceImageLabelerOptions ImageLabelerOptions

Objective-C

Class atau jenis lamaClass atau jenis baru
FIRAutoMLLocalModel MLKLocalModel
FIRAutoMLRemoteModel MLKLocalModel

Memerlukan download manual. Model jarak jauh yang dihosting Firebase tidak digunakan lagi. Untuk mengetahui detailnya, lihat panduan migrasi Firebase ML ke Cloud Storage.
FIRVisionBarcodeDetectionCallback MLKBarcodeScanningCallback
FIRVisionBarcodeDetector MLKBarcodeScanner
FIRVisionBarcodeDetectorOptions MLKBarcodeScannerOptions
FIRVisionImage MLKVisionImage
FIRVisionPoint MLKVisionPoint
FIRVisionOnDeviceAutoMLImageLabelerOptions MLKCustomImageLabelerOptions
FIRVisionOnDeviceImageLabelerOptions MLKImageLabelerOptions

Mengupdate nama metode

Update nama metode sesuai dengan aturan berikut:

  • Class titik entri domain (Vision, NaturalLanguage) tidak ada lagi. Class tersebut telah diganti dengan class khusus tugas. Ganti panggilan ke berbagai metode factory untuk mendapatkan detektor dengan panggilan langsung ke metode factory setiap detektor.

  • Class VisionImageMetadata telah dihapus, bersama dengan enum VisionDetectorImageOrientation. Gunakan properti orientation dari VisionImage untuk menentukan orientasi tampilan gambar.

  • Metode onDeviceTextRecognizer yang mendapatkan instance TextRecognizer baru telah diganti namanya menjadi textRecognizer.

  • Properti tingkat keyakinan telah dihapus dari class hasil pengenalan teks, termasuk TextElement, TextLine, dan TextBlock.

  • Metode onDeviceImageLabeler dan onDeviceImageLabeler(options:) untuk mendapatkan instance ImageLabeler baru telah digabungkan dan diganti namanya menjadi imageLabeler(options:).

  • Metode objectDetector untuk mendapatkan instance ObjectDetector baru telah dihapus. Gunakan objectDetector(options:) sebagai gantinya.

  • Properti type telah dihapus dari ImageLabeler dan properti entityID telah dihapus dari class hasil pelabelan gambar, ImageLabel.

  • API pemindaian kode batang detect(in _:, completion:) telah diganti namanya menjadi process(_:, completion:) agar konsisten dengan API visi lainnya.

  • Natural Language API kini menggunakan istilah "tag bahasa" (seperti yang ditentukan oleh standar BCP-47), bukan "kode bahasa".

  • TranslateLanguage kini menggunakan nama yang mudah dibaca (seperti .english) untuk konstanta, bukan tag bahasa (seperti .en).

Berikut beberapa contoh metode Swift lama dan baru:

Lama

let options = VisionOnDeviceImageLabelerOptions()
options.confidenceThreshold = 0.75
let labeler = Vision.vision().onDeviceImageLabeler(options: options)

let detector = Vision.vision().faceDetector(options: options)

let localModel = AutoMLLocalModel(manifestPath: "automl/manifest.json")
let options = VisionOnDeviceAutoMLImageLabelerOptions(localModel: localModel)
options.confidenceThreshold = 0.75
let labeler = vision.onDeviceAutoMLImageLabeler(options: options)

let detector = Vision.vision().objectDetector()
    

Baru

let options = ImageLabelerOptions()
options.confidenceThreshold = NSNumber(value:0.75)
let labeler = ImageLabeler.imageLabeler(options: options)

let detector = FaceDetector.faceDetector(options: options)

let localModel = LocalModel(manifestPath: "automl/manifest.json")
let options = CustomImageLabelerOptions(localModel: localModel)
options.confidenceThreshold = NSNumber(value:0.75)
let labeler = ImageLabeler.imageLabeler(options: options)

let detector = ObjectDetector.objectDetector(options: ObjectDetectorOptions())
    

Berikut beberapa contoh metode Objective-C lama dan baru:

Lama

FIRVisionOnDeviceImageLabelerOptions *options =
    [[FIRVisionOnDeviceImageLabelerOptions alloc] init];
options.confidenceThreshold = 0.75;
FIRVisionImageLabeler *labeler =
    [[FIRVision vision] onDeviceImageLabelerWithOptions:options];

FIRVisionFaceDetector *detector =
    [[FIRVision vision] faceDetectorWithOptions: options];

FIRAutoMLLocalModel *localModel =
    [[FIRAutoMLLocalModel alloc] initWithManifestPath:@"automl/manifest.json"];
FIRVisionOnDeviceAutoMLImageLabelerOptions *options =
    [[FIRVisionOnDeviceAutoMLImageLabelerOptions alloc]
        initWithLocalModel: localModel];
options.confidenceThreshold = 0.75
FIRVisionImageLabeler *labeler =
    [[FIRVision vision] onDeviceAutoMLImageLabelerWithOptions:options];

FIRVisionObjectDetector *detector =
    [[FIRVision vision] objectDetector];
    

Baru

MLKImageLabelerOptions *options =
    [[MLKImageLabelerOptions alloc] init];
options.confidenceThreshold = @(0.75);
MLKImageLabeler *labeler =
    [MLKImageLabeler imageLabelerWithOptions:options];

MLKFaceDetector *detector =
    [MLKFaceDetector faceDetectorWithOptions:options];

MLKLocalModel *localModel =
    [[MLKLocalModel alloc]
        initWithManifestPath:@"automl/manifest.json"];
MLKCustomImageLabelerOptions *options =
    [[MLKCustomImageLabelerOptions alloc] initWithLocalModel:localModel];
options.confidenceThreshold = @(0.75)
MLKImageLabeler *labeler =
    [MLKImageLabeler imageLabelerWithOptions:options];

MLKObjectDetectorOptions *options = [[MLKObjectDetectorOptions alloc] init];
MLKObjectDetector *detector = [MLKObjectDetector objectDetectorWithOptions:options];
    

Perubahan khusus API

Deteksi dan pelacakan objek

Jika aplikasi Anda menggunakan klasifikasi objek, perhatikan bahwa SDK baru telah mengubah cara menampilkan kategori klasifikasi untuk objek yang terdeteksi.

VisionObjectCategory di VisionObject ditampilkan sebagai text dalam objek ObjectLabel, bukan bilangan bulat. Semua kemungkinan kategori string disertakan dalam enum DetectedObjectLabel.

Perhatikan bahwa kategori .unknown telah dihapus. Jika tingkat keyakinan dalam mengklasifikasikan objek rendah, pengklasifikasi tidak akan menampilkan label sama sekali.

Berikut contoh kode Swift lama dan baru:

Lama

if (object.classificationCategory == .food) {
    ...
}

Baru

if let label = object.labels.first {
  if (label.text == DetectedObjectLabel.food.rawValue) {
    ...
  }
}
// or
if let label = object.labels.first {
  if (label.index == DetectedObjectLabelIndex.food.rawValue) {
    ...
  }
}

Berikut contoh kode Objective-C lama dan baru:

Lama

if (object.classificationCategory == FIRVisionObjectCategoryFood) {
    ...
}

Baru

if ([object.labels[0].text isEqualToString:MLKDetectedObjectLabelFood]) {
  ...
}
// or
if ([object.labels[0].index == MLKDetectedObjectLabelIndexFood]) {
  ...
}

Menghapus dependensi Firebase

Hapus dependensi Firebase setelah migrasi. Ikuti langkah-langkah berikut:

  • Hapus file konfigurasi Firebase dengan menghapus file GoogleService-Info.plist dari direktori aplikasi dan project Xcode Anda.
  • Hapus cocoapod Firebase, seperti pod 'Firebase/Analytics', dari Podfile Anda.
  • Hapus inisialisasi FirebaseApp, seperti FirebaseApp.configure() dari kode Anda.
  • Hapus aplikasi Firebase Anda di Firebase console sesuai dengan petunjuk di situs dukungan Firebase.

Mendapatkan Bantuan

Jika Anda mengalami masalah, lihat halaman Komunitas kami yang menguraikan saluran yang tersedia untuk menghubungi kami.