Bermigrasi 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

Perbarui dependensi untuk cocoapods 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/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 yang dipaketkan) 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/Translate

Memperbarui nama class, enum, dan jenis

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

  • Swift: Menghapus awalan Vision dari nama class dan enum
  • Objective-C: Ganti 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 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 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 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 setiap metode factory detektor.

  • Class VisionImageMetadata telah dihapus, beserta 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 pemberian label 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" (sebagaimana ditentukan oleh standar BCP-47), bukan "kode bahasa".

  • TranslateLanguage kini menggunakan nama yang dapat dibaca (seperti .english) untuk konstantanya, 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 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 penayangan 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, 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 menjelaskan saluran yang tersedia untuk menghubungi kami.