این راهنما توضیح میدهد که چگونه از ML Kit برای Firebase برای iOS مهاجرت کنید.
پیشنیازها
قبلاز شروع انتقال کد، مطمئن شوید که این الزامات را برآورده میکنید:
- ML Kit از Xcode 13.2.1 یا بالاتر پشتیبانی میکند.
- ML Kit از iOS نسخه ۱۵.۵ یا بالاتر پشتیبانی میکند.
- ML Kit از معماریهای ۳۲ بیتی (i386 و armv7) پشتیبانی نمیکند. ML Kit از معماریهای ۶۴ بیتی (x86_64 و arm64) پشتیبانی میکند.
- کتابخانه ML Kit فقط بهصورت cocoapods ارائه میشود. نمیتوانید چارچوبها و cocoapods را باهم ترکیب کنید، بنابراین برای استفاده از این کتابخانه ابتدا باید به cocoapods مهاجرت کنید.
بهروزرسانی Cocoapods
وابستگیهای ML Kit iOS cocoapods را در Podfile برنامهتان بهروز کنید:
| میانای برنامهسازی کاربردی | نام(های) قدیمی آگهیهای دستهای | نام(های) پاد جدید |
|---|---|---|
| اسکن کردن رمزینه | Firebase/MLVision Firebase/MLVisionBarcodeModel |
GoogleMLKit/BarcodeScanning |
| تشخیص چهره | Firebase/MLVision Firebase/MLVisionFaceModel |
GoogleMLKit/FaceDetection |
| برچسبگذاری تصویر | Firebase/MLVision Firebase/MLVisionLabelModel |
GoogleMLKit/ImageLabeling |
| تشخیص و ردیابی اشیا | Firebase/MLVisionObjectDetection | GoogleMLKit/ObjectDetection |
| تشخیص نوشتار | Firebase/MLVision Firebase/MLVisionTextModel |
GoogleMLKit/TextRecognition |
| برچسبگذاری تصویر AutoML (مدل بستهای) | Firebase/MLVisionAutoML | GoogleMLKit/ImageLabelingCustom |
| برچسبگذاری تصویر AutoML (مدل بارگیری شد) | Firebase/MLVisionAutoML | GoogleMLKit/ImageLabelingCustom برای میزبانی و بارگیری مدلهای سفارشی، مدلهایتان را به Cloud Storage منتقل کنید و منطق بارگیری را به برنامهتان اضافه کنید تا آنها را بهعنوان مدلهای محلی بار کند. برای جزئیات، راهنمای انتقال Firebase ML به Cloud Storage را ببینید. |
| شناسه زبان | Firebase/MLNaturalLanguage Firebase/MLNLLanguageID |
GoogleMLKit/LanguageID |
| پاسخ هوشمند | Firebase/MLNaturalLanguage Firebase/MLNLSmartReply |
GoogleMLKit/SmartReply |
| ترجمه Google | Firebase/MLNaturalLanguage Firebase/MLNLTranslate |
GoogleMLKit/Translate |
بهروزرسانی نام کلاسها، شمارشها، و انواع
بهطورکلی، کلاسها، شمارشها، و انواع باید بهصورت زیر تغییر نام داده شوند:
- Swift: پیشوند
Visionرا از نام کلاسها و شمارشها بردارید - Objective-C: هر دو پیشوند enum و نام کلاس
FIRVisionوFIRرا باMLKجایگزین کنید
این قانون کلی برای برخیاز نامها و انواع کلاسها اعمال نمیشود:
Swift
| کلاس یا نوع قدیمی | کلاس یا نوع جدید |
|---|---|
| AutoMLLocalModel | LocalModel |
| AutoMLRemoteModel | LocalModel بارگیری دستی لازم است. مدلهای ازراهدور میزبانیشده در Firebase منسوخ شدهاند. برای جزئیات، راهنمای انتقال Firebase ML به Cloud Storage را ببینید. |
| VisionBarcodeDetectionCallback | BarcodeScanningCallback |
| VisionBarcodeDetector | BarcodeScanner |
| VisionBarcodeDetectorOptions | BarcodeScannerOptions |
| VisionImage | VisionImage (no change) |
| VisionPoint | VisionPoint (no change) |
| VisionOnDeviceAutoMLImageLabelerOptions | CustomImageLabelerOptions |
| VisionOnDeviceImageLabelerOptions | ImageLabelerOptions |
آبجکتیو-سی
| کلاس یا نوع قدیمی | کلاس یا نوع جدید |
|---|---|
| FIRAutoMLLocalModel | MLKLocalModel |
| FIRAutoMLRemoteModel | MLKLocalModel بارگیری دستی لازم است. مدلهای ازراهدور میزبانیشده در Firebase منسوخ شدهاند. برای جزئیات، راهنمای انتقال Firebase ML به Cloud Storage را ببینید. |
| FIRVisionBarcodeDetectionCallback | MLKBarcodeScanningCallback |
| FIRVisionBarcodeDetector | MLKBarcodeScanner |
| FIRVisionBarcodeDetectorOptions | MLKBarcodeScannerOptions |
| FIRVisionImage | MLKVisionImage |
| FIRVisionPoint | MLKVisionPoint |
| FIRVisionOnDeviceAutoMLImageLabelerOptions | MLKCustomImageLabelerOptions |
| FIRVisionOnDeviceImageLabelerOptions | MLKImageLabelerOptions |
بهروزرسانی نام روشها
نام روشها را طبق این قوانین بهروز کنید:
کلاسهای نقطه ورودی دامنه (
Vision،NaturalLanguage) دیگر وجود ندارند. این کلاسها با کلاسهای مختص تکلیف جایگزین شدهاند. فراخوانیهای روشهای کارخانهای مختلف آنها برای دریافت آشکارسازها را با فراخوانیهای مستقیم به روش کارخانهای هر آشکارساز جایگزین کنید.کلاس
VisionImageMetadataبههمراهVisionDetectorImageOrientationenum برداشته شده است. از ویژگیorientationVisionImageبرای مشخص کردن جهت نمایش تصویر استفاده کنید.نام روش
onDeviceTextRecognizerکه نمونهTextRecognizerجدیدی دریافت میکند بهtextRecognizerتغییر کرده است.ویژگی اطمینان از کلاسهای نتیجه تشخیص نوشتار، ازجمله
TextElement،TextLine، وTextBlockبرداشته شده است.روشهای
onDeviceImageLabelerوonDeviceImageLabeler(options:)برای دریافت نمونه جدیدImageLabelerادغام شدهاند و نام آنها بهimageLabeler(options:)تغییر کرده است.روش
objectDetectorبرای دریافت نمونهObjectDetectorجدید برداشته شده است. درعوض ازobjectDetector(options:)استفاده کنید.ویژگی
typeازImageLabelerبرداشته شده است و ویژگیentityIDاز کلاس نتیجه برچسبگذاری تصویر،ImageLabel، برداشته شده است.نام میانای برنامهسازی کاربردی اسکن رمزینه
detect(in _:, completion:)بهprocess(_:, completion:)تغییر کرده است تا با دیگر میاناهای برنامهسازی کاربردی Vision سازگار باشد.Natural Language API اکنون بهجای «کد زبان» از اصطلاح «برچسب زبان» (همانطور که در استاندارد BCP-47 تعریف شده است) استفاده میکند.
TranslateLanguageاکنون از نامهای خوانا (مثل.english) برای ثابتهایش بهجای برچسبهای زبان (مثل.en) استفاده میکند.
در اینجا چند نمونه از روشهای قدیمی و جدید Swift آورده شده است:
قدیمی
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()
جدید
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())
در اینجا چند نمونه از روشهای قدیمی و جدید Objective-C آورده شده است:
قدیمی
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];
جدید
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];
تغییرات مختص میانای برنامهسازی کاربردی
تشخیص و ردیابی اشیا
اگر برنامهتان از طبقهبندی اشیا استفاده میکند، توجه داشته باشید که کیت توسعه نرمافزار جدید نحوه برگرداندن دسته طبقهبندی برای اشیای شناساییشده را تغییر داده است.
VisionObjectCategory در VisionObject بهصورت text در شیء
ObjectLabel برگردانده میشود، نه بهصورت عدد صحیح. همه دستههای رشتهای ممکن در شمارش DetectedObjectLabel گنجانده شدهاند.
توجه داشته باشید که دسته .unknown برداشته شده است. وقتی اطمینان از
طبقهبندی شیء پایین باشد، طبقهبندیکننده هیچ برچسبی برنمیگرداند.
در اینجا نمونهای از کد سوئیفت قدیمی و جدید آورده شده است:
قدیمی
if (object.classificationCategory == .food) {
...
}جدید
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) {
...
}
}در اینجا نمونهای از کد Objective-C قدیمی و جدید آورده شده است:
قدیمی
if (object.classificationCategory == FIRVisionObjectCategoryFood) {
...
}جدید
if ([object.labels[0].text isEqualToString:MLKDetectedObjectLabelFood]) {
...
}
// or
if ([object.labels[0].index == MLKDetectedObjectLabelIndexFood]) {
...
}برداشتن وابستگیهای Firebase
پساز انتقال، وابستگیهای Firebase را بردارید. این مراحل را دنبال کنید:
- فایل پیکربندی Firebase را با حذف فایل
GoogleService-Info.plistاز فهرست راهنمای برنامه و پروژه Xcode خود بردارید. - هرگونه Firebase cocoapod، مثل
pod 'Firebase/Analytics'، را از Podfile خود بردارید. - هرگونه مقداردهی اولیه FirebaseApp، مانند
FirebaseApp.configure()را از کدتان بردارید. - برنامه Firebase خود را در کنسول Firebase طبق دستورالعملهای سایت پشتیبانی Firebase حذف کنید.
دریافت راهنمایی
اگر با مشکلی مواجه شدید، لطفاً صفحه انجمن ما را بررسی کنید که در آن کانالهای موجود برای تماس با ما را شرح دادهایم.