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 menggabungkan 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:
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 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: Mengganti nama class serta awalan enum
FIRVision
danFIR
olehMLK
Untuk beberapa jenis dan nama class, aturan umum ini tidak berlaku:
Swift
Class atau jenis lama | Class 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 lama | Class 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 kelas khusus tugas. Mengganti panggilan ke berbagai metode factory untuk mendapatkan pendeteksi dengan mengarahkan panggilan ke metode factory setiap detektor.Class
VisionImageMetadata
telah dihapus, bersama dengan EnumVisionDetectorImageOrientation
. Gunakan propertiorientation
dariVisionImage
untuk menentukan orientasi tampilan gambar.Metode
onDeviceTextRecognizer
yang mendapatkan instanceTextRecognizer
baru memiliki diganti namanya menjaditextRecognizer
.Properti keyakinan telah dihapus dari teks class hasil pengenalan, termasuk
TextElement
,TextLine
, danTextBlock
.Metode
onDeviceImageLabeler
danonDeviceImageLabeler(options:)
untuk mendapatkan instanceImageLabeler
baru telah digabungkan dan diganti namanya menjadiimageLabeler(options:)
.Metode
objectDetector
untuk mendapatkan instanceObjectDetector
baru telah dihapus. GunakanobjectDetector(options:)
sebagai gantinya.Properti
type
telah dihapus dariImageLabeler
dan PropertientityID
telah dihapus dari class hasil pelabelan gambar,ImageLabel
.API pemindaian kode batang
detect(in _:, completion:)
telah diganti namanya menjadiprocess(_:, 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 alih-alih 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, perlu diketahui bahwa SDK baru telah berubah cara mengembalikan kategori klasifikasi untuk objek yang terdeteksi.
VisionObjectCategory
di VisionObject
ditampilkan sebagai text
dalam ObjectLabel
, bukan bilangan bulat. Semua kategori string yang mungkin disertakan dalam
Enum DetectedObjectLabel
.
Perlu diketahui bahwa kategori .unknown
telah dihapus. Ketika tingkat keyakinan klasifikasi
sebuah objek rendah, pengklasifikasi tidak 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 di petunjuk di situs dukungan Firebase.
Mendapatkan Bantuan
Jika Anda mengalami masalah, lihat halaman Komunitas yang kami jelaskan saluran yang tersedia untuk menghubungi kami.