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:
| API | Nama pod lama | Nama 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
Visiondari nama class dan enum - Objective-C: Ganti awalan nama class dan enum
FIRVisiondanFIRdenganMLK
Untuk beberapa nama class dan jenis, aturan umum ini tidak berlaku:
Swift
| Class atau jenis lama | Class 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 lama | Class 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
VisionImageMetadatatelah dihapus, bersama dengan enumVisionDetectorImageOrientation. Gunakan propertiorientationdariVisionImageuntuk menentukan orientasi tampilan gambar.Metode
onDeviceTextRecognizeryang mendapatkan instanceTextRecognizerbaru telah diganti namanya menjaditextRecognizer.Properti tingkat keyakinan telah dihapus dari class hasil pengenalan teks, termasuk
TextElement,TextLine, danTextBlock.Metode
onDeviceImageLabelerdanonDeviceImageLabeler(options:)untuk mendapatkan instanceImageLabelerbaru telah digabungkan dan diganti namanya menjadiimageLabeler(options:).Metode
objectDetectoruntuk mendapatkan instanceObjectDetectorbaru telah dihapus. GunakanobjectDetector(options:)sebagai gantinya.Properti
typetelah dihapus dariImageLabelerdan propertientityIDtelah dihapus dari class hasil pelabelan gambar,ImageLabel.API pemindaian kode batang
detect(in _:, completion:)telah diganti namanya menjadiprocess(_:, 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".
TranslateLanguagekini 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.plistdari 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.