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 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 cocoapod, jadi untuk menggunakan library ini, Anda harus bermigrasi terlebih dahulu untuk menggunakan cocoapods.

Perbarui Cocoapods

Perbarui dependensi untuk cocoapod iOS ML Kit di Podfile aplikasi Anda:

APINama pod lamaNama pod baru
Pemindaian kode batang Firebase/MLVision
Firebase/MLVisionBarcodeModel
Pemindaian GoogleMLKit/Barcode
Deteksi wajah Firebase/MLVision
Firebase/MLVisionFaceModel
GoogleMLKit/FaceDeteksi
Pelabelan gambar Firebase/MLVision
Firebase/MLVisionLabelModel
GoogleMLKit/ImageLabeling
Deteksi dan pelacakan objek Firebase/MLVisionObjectDeteksi 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 sebagai berikut:

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

Untuk beberapa jenis dan nama 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 systrace (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 lagi ada. Mereka telah diganti dengan class khusus tugas. Mengganti 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 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 Vision API lainnya.

  • Natural Language API kini menggunakan istilah "tag bahasa" (sebagaimana 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 yang 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.

Perlu diketahui bahwa kategori .unknown telah dihapus. Jika tingkat keyakinan klasifikasi 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 yang 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 ketentuan 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 semua cocoapod Firebase, seperti pod 'Firebase/Analytics', dari Podfile Anda.
  • Hapus semua inisialisasi FirebaseApp, seperti FirebaseApp.configure() dari kode Anda.
  • Hapus aplikasi Firebase di Firebase console yang sesuai dengan instructions di situs dukungan Firebase.

Mendapatkan Bantuan

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