این راهنما نحوه مهاجرت از ML Kit به Firebase برای iOS را توضیح میدهد.
پیشنیازها
قبل از شروع به انتقال کد خود، مطمئن شوید که این الزامات را برآورده میکنید:
- کیت ML از Xcode نسخه ۱۳.۲.۱ یا بالاتر پشتیبانی میکند.
- ML Kit از iOS نسخه ۱۵.۵ یا بالاتر پشتیبانی میکند.
- ML Kit از معماریهای ۳۲ بیتی (i386 و armv7) پشتیبانی نمیکند. ML Kit از معماریهای ۶۴ بیتی (x86_64 و arm64) پشتیبانی میکند.
- کتابخانه ML Kit فقط به صورت cocoapods ارائه میشود. شما نمیتوانید فریمورکها و cocoapods را با هم ترکیب کنید، بنابراین برای استفاده از این کتابخانه ابتدا باید به cocoapods مهاجرت کنید.
بهروزرسانی کوکوپادز
وابستگیهای cocoapods مربوط به ML Kit iOS را در Podfile برنامه خود بهروزرسانی کنید:
| رابط برنامهنویسی کاربردی | نام(های) قدیمی پاد | نام(های) پاد جدید |
|---|---|---|
| اسکن بارکد | فایربیس/MLVision فایربیس/MLVisionBarcodeModel | اسکن بارکد/GoogleMLKit |
| تشخیص چهره | فایربیس/MLVision فایربیس/MLVisionFaceModel | GoogleMLKit/تشخیص چهره |
| برچسبگذاری تصویر | فایربیس/MLVision فایربیس/MLVisionLabelModel | برچسبگذاری تصاویر/GoogleMLKit |
| تشخیص و ردیابی اشیاء | تشخیص شیء در فایربیس/MLVisionObjectDetection | GoogleMLKit/تشخیص شیء |
| تشخیص متن | فایربیس/MLVision فایربیس/MLVisionTextModel | GoogleMLKit/تشخیص متن |
| برچسبگذاری تصویر AutoML (مدل بستهای) | فایربیس/MLVisionAutoML | GoogleMLKit/ImageLabelingCustom |
| برچسبگذاری تصویر AutoML (مدل دانلود شده) | فایربیس/MLVisionAutoML | GoogleMLKit/ImageLabelingCustom برای میزبانی و دانلود مدلهای سفارشی، مدلهای خود را به فضای ذخیرهسازی ابری منتقل کنید و منطق دانلود را در برنامه خود اضافه کنید تا آنها را به عنوان مدلهای محلی بارگذاری کنید. برای جزئیات بیشتر، به راهنمای مهاجرت Firebase ML به فضای ذخیرهسازی ابری مراجعه کنید. |
| شناسه زبان | فایربیس/MLNaturalLanguage فایربیس/MLNLLangeID | GoogleMLKit/شناسه زبان |
| پاسخ هوشمند | فایربیس/MLNaturalLanguage فایربیس/MLNLSmartReply | GoogleMLKit/SmartReply |
| ترجمه | فایربیس/MLNaturalLanguage فایربیس/MLNLTranslate | GoogleMLKit/ترجمه |
بهروزرسانی نام کلاسها، enumها و انواع
به طور کلی، کلاسها، enumها و انواع باید به صورت زیر تغییر نام داده شوند:
- Swift: پیشوند
Visionرا از نام کلاسها و enumها حذف کنید - Objective-C: پیشوندهای نام کلاس و شمارش
FIRVisionوFIRرا باMLKجایگزین کنید
برای برخی از نامها و انواع کلاسها، این قانون کلی صدق نمیکند:
سویفت
| کلاس یا نوع قدیمی | کلاس یا نوع جدید |
|---|---|
| مدل محلی خودکار | مدل محلی |
| مدل راه دور خودکار | مدل محلی نیاز به دانلود دستی دارد. مدلهای ریموت میزبانیشده توسط Firebase منسوخ شدهاند. برای جزئیات بیشتر، به راهنمای مهاجرت Firebase ML به Cloud Storage مراجعه کنید. |
| VisionBarcodeDetectionتشخیص بارکدتماس برگشتی | اسکن بارکد، تماس برگشتی |
| آشکارساز بارکد ویژن | اسکنر بارکد |
| گزینههای VisionBarcodeDetector | گزینههای اسکنر بارکد |
| ویژن ایمیج | VisionImage (بدون تغییر) |
| ویژن پوینت | ویژن پوینت (بدون تغییر) |
| گزینههای VisionOnDeviceAutoMLImageLabeler | گزینههای برچسبگذاری تصویر سفارشی |
| گزینههای برچسبگذاری تصویر در VisionOnDevice | گزینههای برچسبگذاری تصویر |
هدف-سی
| کلاس یا نوع قدیمی | کلاس یا نوع جدید |
|---|---|
| FIRAutoMLLocalModel | مدل محلی MLK |
| FIRAutoMLRemoteModel | مدل محلی MLK نیاز به دانلود دستی دارد. مدلهای ریموت میزبانیشده توسط Firebase منسوخ شدهاند. برای جزئیات بیشتر، به راهنمای مهاجرت Firebase ML به Cloud Storage مراجعه کنید. |
| تشخیص بارکد FIRVisionتماس برگشتی | اسکن بارکد MLK تماس برگشتی |
| آشکارساز بارکد FIRVision | اسکنر بارکد MLK |
| گزینههای آشکارساز بارکد FIRVision | گزینههای اسکنر بارکد MLK |
| تصویر FIRVision | MLCVisionImage |
| FIRVisionPoint | MLCVisionPoint |
| گزینههای برچسبگذار تصویر خودکار FIRVisionOnDevice | گزینههای برچسبگذار تصویر سفارشی MLK |
| گزینههای برچسبگذاری تصویر FIRVisionOnDeviceImage | گزینههای برچسبگذاری تصویر MLK |
نام متدها را بهروزرسانی کنید
نام متدها را طبق این قوانین بهروزرسانی کنید:
کلاسهای نقطه ورود دامنه (
Vision،NaturalLanguage) دیگر وجود ندارند. آنها با کلاسهای مختص وظیفه جایگزین شدهاند. فراخوانی متدهای کارخانهای مختلف آنها برای دریافت آشکارسازها را با فراخوانیهای مستقیم متد کارخانهای هر آشکارساز جایگزین کنید.کلاس
VisionImageMetadataبه همراه enum مربوط بهVisionDetectorImageOrientationحذف شده است. از ویژگیorientationمربوط بهVisionImageبرای تعیین جهت نمایش یک تصویر استفاده کنید.متد
onDeviceTextRecognizerکه یک نمونه جدیدTextRecognizerدریافت میکند، بهtextRecognizerتغییر نام داده شده است.ویژگی اعتماد به نفس از کلاسهای نتیجه تشخیص متن، از جمله
TextElement،TextLineوTextBlock، حذف شده است.متدهای
onDeviceImageLabelerوonDeviceImageLabeler(options:)برای دریافت یک نمونه جدیدImageLabelerبا هم ادغام شده و بهimageLabeler(options:)تغییر نام دادهاند.متد
objectDetectorبرای دریافت یک نمونه جدیدObjectDetectorحذف شده است. به جای آنobjectDetector(options:)استفاده کنید.ویژگی
typeازImageLabelerو ویژگیentityIDاز کلاس نتیجه برچسبگذاری تصویر،ImageLabelحذف شدهاند.API اسکن بارکد
detect(in _:, completion:)بهprocess(_:, completion:)تغییر نام داده است تا با سایر APIهای بینایی سازگار باشد.رابطهای برنامهنویسی کاربردی زبان طبیعی (NLP) اکنون به جای «کد زبان» از اصطلاح «برچسب زبان» (مطابق تعریف استاندارد BCP-47 ) استفاده میکنند.
TranslateLanguageاکنون به جای برچسبهای زبان (مانند.en) از نامهای خوانا (مانند.english) برای ثابتهای خود استفاده میکند.
در اینجا چند نمونه از متدهای قدیمی و جدید 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];
تغییرات خاص API
تشخیص و ردیابی اشیاء
اگر برنامه شما از طبقهبندی اشیاء استفاده میکند، توجه داشته باشید که SDK جدید نحوهی بازگرداندن دستهبندی طبقهبندی برای اشیاء شناساییشده را تغییر داده است.
VisionObjectCategory در VisionObject به جای یک عدد صحیح، به صورت text در یک شیء ObjectLabel برگردانده میشود. تمام دستههای رشتهای ممکن در enum DetectedObjectLabel گنجانده شدهاند.
توجه داشته باشید که دستهی .unknown حذف شده است. وقتی اطمینان از طبقهبندی یک شیء پایین باشد، طبقهبندیکننده اصلاً هیچ برچسبی برنمیگرداند.
در اینجا مثالی از کد Swift قدیمی و جدید آورده شده است:
قدیمی
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 را حذف کنید. این مراحل را دنبال کنید:
- با حذف فایل
GoogleService-Info.plistاز دایرکتوری برنامه و پروژه Xcode خود، فایل پیکربندی Firebase را حذف کنید. - هرگونه pod مربوط به Firebase cocoapod، مانند
pod 'Firebase/Analytics'را از Podfile خود حذف کنید. - هرگونه مقداردهی اولیه FirebaseApp، مانند
FirebaseApp.configure()را از کد خود حذف کنید. - طبق دستورالعملهای موجود در سایت پشتیبانی Firebase، برنامه Firebase خود را در کنسول Firebase حذف کنید.
دریافت کمک
اگر با هرگونه مشکلی مواجه شدید، لطفاً به صفحه انجمن ما مراجعه کنید، جایی که کانالهای موجود برای ارتباط با ما را شرح دادهایم.