مهاجرت برای 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 (دانلود مدل از Firebase) فایربیس/MLVisionAutoML GoogleMLKit/ImageLabelingCustom
گوگل ام ال کیت/لینک فایربیس
شناسه زبان فایربیس/MLNaturalLanguage
فایربیس/MLNLLangeID
GoogleMLKit/شناسه زبان
پاسخ هوشمند فایربیس/MLNaturalLanguage
فایربیس/MLNLSmartReply
GoogleMLKit/SmartReply
ترجمه فایربیس/MLNaturalLanguage
فایربیس/MLNLTranslate
GoogleMLKit/ترجمه

به‌روزرسانی نام کلاس‌ها، enumها و انواع

به طور کلی، کلاس‌ها، enumها و انواع باید به صورت زیر تغییر نام داده شوند:

  • Swift: پیشوند Vision را از نام کلاس‌ها و enumها حذف کنید
  • Objective-C: پیشوندهای نام کلاس و شمارش FIRVision و FIR را با MLK جایگزین کنید

برای برخی از نام‌ها و انواع کلاس‌ها، این قانون کلی صدق نمی‌کند:

سویفت

کلاس یا نوع قدیمی کلاس یا نوع جدید
مدل محلی خودکار مدل محلی
مدل راه دور خودکار مدل سفارشی از راه دور
VisionBarcodeDetectionتشخیص بارکدتماس برگشتی اسکن بارکد، تماس برگشتی
آشکارساز بارکد ویژن اسکنر بارکد
گزینه‌های VisionBarcodeDetector گزینه‌های اسکنر بارکد
ویژن ایمیج VisionImage (بدون تغییر)
ویژن پوینت ویژن پوینت (بدون تغییر)
گزینه‌های VisionOnDeviceAutoMLImageLabeler گزینه‌های برچسب‌گذاری تصویر سفارشی
گزینه‌های برچسب‌گذاری تصویر در VisionOnDevice گزینه‌های برچسب‌گذاری تصویر

هدف-سی

کلاس یا نوع قدیمی کلاس یا نوع جدید
FIRAutoMLLocalModel مدل محلی MLK
FIRAutoMLRemoteModel مدل راه دور سفارشی MLK
تشخیص بارکد FIRVisionتماس برگشتی اسکن بارکد MLK تماس برگشتی
آشکارساز بارکد FIRVision اسکنر بارکد MLK
گزینه‌های آشکارساز بارکد FIRVision گزینه‌های اسکنر بارکد MLK
تصویر FIRVision MLCVisionImage
گزینه‌های برچسب‌گذار تصویر خودکار FIRVisionOnDevice گزینه‌های برچسب‌گذار تصویر سفارشی MLK
گزینه‌های برچسب‌گذاری تصویر FIRVisionOnDeviceImage گزینه‌های برچسب‌گذاری تصویر MLK
FIRVisionPoint MLCVisionPoint

هدف-سی

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

نام متدها را طبق این قوانین به‌روزرسانی کنید:

  • کلاس‌های نقطه ورود دامنه ( 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]) {
  ...
}

حذف وابستگی‌های فایربیس (اختیاری)

این مرحله فقط زمانی اعمال می‌شود که این شرایط برقرار باشند:

  • کیت ML فایربیس تنها کامپوننت فایربیس مورد استفاده شماست.
  • شما فقط از API های روی دستگاه استفاده می کنید
  • شما از مدل سروینگ استفاده نمی‌کنید

در این صورت، می‌توانید وابستگی‌های Firebase را پس از مهاجرت حذف کنید. این مراحل را دنبال کنید:

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

دریافت کمک

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