Bermigrasi untuk iOS

Prasyarat

Sebelum mulai memigrasikan kode, pastikan Anda memenuhi persyaratan berikut:

  • ML Kit mendukung Xcode 13.2.1 atau versi yang lebih tinggi.
  • ML Kit mendukung iOS versi 10 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 cocoapod. Anda tidak dapat mencampur framework dan cocoapods, jadi agar dapat menggunakan library ini, Anda harus bermigrasi terlebih dahulu untuk menggunakan cocoapods.

Mengupdate Cocoapods

Perbarui dependensi untuk cocoapod iOS ML Kit 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/FaceDeteksiion
Pelabelan gambar Firebase/MLVision
Firebase/MLVisionLabelModel
GoogleMLKit/ImageLabeling
Deteksi dan pelacakan objek Firebase/MLVisionObjectdetection GoogleMLKit/Deteksi Objek
Pengenalan teks Firebase/MLVision
Firebase/MLVisionTextModel
GoogleMLKit/TextRecognition
Pelabelan gambar AutoML (model paket) Firebase/MLVisionAutoML GoogleMLKit/ImageLabelingCustom
Pelabelan gambar AutoML (download model dari Firebase) Firebase/MLVisionAutoML GoogleMLKit/ImageLabelingCustom
GoogleMLKit/LinkFirebase
ID Bahasa Firebase/MLNaturalLanguage
Firebase/MLNLLanguageID
GoogleMLKit/LanguageID
Smart Reply Firebase/MLNaturalLanguage
Firebase/MLNLSmartReply
GoogleMLKit/SmartReply
Terjemahan Firebase/MLNaturalLanguage
Firebase/MLNLTranslate
GoogleMLKit/Terjemahan

Memperbarui nama class, enum, dan jenis

Secara umum, class , enum, dan jenis perlu diganti namanya menjadi berikut:

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

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

Swift

Class atau jenis lamaClass atau jenis baru
AutoMLLocalModel LocalModel
AutoMLRemoteModel CustomRemoteModel
VisionBarcodeDetectionCallback BarcodeScanningCallback
VisionBarcodeDetector BarcodeScanner
VisionBarcodeDetectorOptions BarcodeScannerOptions
VisionImage kotlin (tidak ada perubahan)
VisionPoint VisionPoint (tidak ada perubahan)
VisionOnDeviceAutoMLImageLabelerOptions CustomImageLabelerOptions
VisionOnDeviceImageLabelerOptions ImageLabelerOptions

Objective-C

Class atau jenis lamaClass atau jenis baru
FIRAutoMLLocalModel MLKLocalModel
FIRAutoMLRemoteModel MLKCustomRemoteModel
FIRVisionBarcodeDetectionCallback MLKBarcodeScanningCallback
FIRVisionBarcodeDetector MLKBarcodeScanner
FIRVisionBarcodeDetectorOptions MLKBarcodeScannerOptions
FIRVisionImage MLKVisionImage
FIRVisionOnDeviceAutoMLImageLabelerOptions MLKCustomImageLabelerOptions
FIRVisionOnDeviceImageLabelerOptions MLKImageLabelerOptions
FIRVisionPoint MLKVisionPoint

Objective-C

Memperbarui nama metode

Perbarui nama metode sesuai dengan aturan ini:

  • Class titik entri domain (Vision, NaturalLanguage) tidak lagi ada. Mereka telah diganti dengan class khusus tugas. Mengganti panggilan ke berbagai metode factory untuk mendapatkan detektor dengan panggilan langsung ke setiap metode factory 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 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 Vision lainnya.

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

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

Berikut adalah 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 adalah 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, ketahuilah 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 kategori string yang mungkin disertakan dalam enum DetectedObjectLabel.

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

Berikut adalah 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 adalah 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 (Opsional)

Langkah ini hanya berlaku jika kondisi berikut terpenuhi:

  • Firebase ML Kit adalah satu-satunya komponen Firebase yang Anda gunakan
  • Anda hanya menggunakan API di perangkat
  • Anda tidak menggunakan penyaluran model

Jika demikian, Anda dapat menghapus 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 apa pun, seperti pod 'Firebase/Analytics', dari Podfile Anda.
  • Hapus semua inisialisasi FirebaseApp, seperti FirebaseApp.configure() dari kode Anda.
  • Hapus aplikasi Firebase Anda di Firebase console sesuai dengan instructions di situs dukungan Firebase.

Mendapatkan Bantuan

Jika Anda mengalami masalah, buka halaman Komunitas tempat kami menjelaskan channel yang tersedia untuk menghubungi kami.