درحال انتقال برای iOS

این راهنما توضیح می‌دهد که چگونه از ML Kit برای Firebase برای iOS مهاجرت کنید.

پیش‌نیازها

قبل‌از شروع انتقال کد، مطمئن شوید که این الزامات را برآورده می‌کنید:

  • ‫ML Kit از Xcode نسخه ۱۳.۲.۱ یا بالاتر پشتیبانی می‌کند.
  • ‫ML Kit از iOS نسخه ۱۵.۵ یا بالاتر پشتیبانی می‌کند.
  • ‫ML Kit از معماری‌های ۳۲ بیتی (i386 و armv7) پشتیبانی نمی‌کند. ‫ML Kit از معماری‌های ۶۴ بیتی (x86_64 و arm64) پشتیبانی می‌کند.
  • کتابخانه ML Kit فقط به‌صورت cocoapods ارائه می‌شود. نمی‌توانید چارچوب‌ها و cocoapods را باهم ترکیب کنید، بنابراین برای استفاده از این کتابخانه ابتدا باید به cocoapods مهاجرت کنید.

به‌روزرسانی Cocoapods

وابستگی‌های cocoapods کیت یادگیری ماشین iOS را در 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 (بدون تغییر)
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 به‌همراه VisionDetectorImageOrientation enum برداشته شده است. از دارایی orientation در VisionImage برای مشخص کردن جهت نمایش تصویر استفاده کنید.

  • روش 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:) تغییر کرده است تا با دیگر میاناهای برنامه‌سازی کاربردی بینایی سازگار باشد.

  • Natural Language API اکنون به‌جای «کد زبان» از اصطلاح «برچسب زبان» (همان‌طور که در استاندارد 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];
    

تغییرات ویژه میانای برنامه‌سازی کاربردی

تشخیص و ردیابی اشیا

اگر برنامه‌تان از طبقه‌بندی اشیا استفاده می‌کند، توجه داشته باشید که کیت توسعه نرم‌افزار جدید نحوه برگرداندن دسته طبقه‌بندی برای اشیای شناسایی‌شده را تغییر داده است.

‫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 را پس‌از انتقال بردارید. این مراحل را دنبال کنید:

  • با حذف فایل GoogleService-Info.plist از فهرست راهنمای برنامه و پروژه Xcode، فایل پیکربندی Firebase را بردارید.
  • هر cocoapod مربوط به Firebase، مثل pod 'Firebase/Analytics'، را از Podfile بردارید.
  • هرگونه مقداردهی اولیه FirebaseApp، مانند FirebaseApp.configure() را از کدتان بردارید.
  • برنامه Firebase خود را در کنسول Firebase طبق دستورالعمل‌های سایت پشتیبانی Firebase حذف کنید.

دریافت راهنمایی

اگر با مشکلی مواجه شدید، لطفاً صفحه انجمن ما را بررسی کنید که در آن کانال‌های موجود برای تماس با ما را شرح داده‌ایم.