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

این راهنما توضیح می‌دهد که چگونه از 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 به‌همراه 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:) تغییر کرده است تا با دیگر میاناهای برنامه‌سازی کاربردی 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 حذف کنید.

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

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