مهاجرت برای iOS

پیش نیازها

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

  • ML Kit از Xcode 13.2.1 یا بالاتر پشتیبانی می کند.
  • ML Kit از iOS نسخه 10 یا بالاتر پشتیبانی می کند.
  • کیت ML از معماری های 32 بیتی (i386 و armv7) پشتیبانی نمی کند. ML Kit از معماری های 64 بیتی (x86_64 و arm64) پشتیبانی می کند.
  • کتابخانه ML Kit فقط به عنوان کوکوپود ارائه می شود. شما نمی توانید فریمورک ها و کوکوپودها را با هم ترکیب کنید، بنابراین برای استفاده از این کتابخانه باید ابتدا برای استفاده از کوکوپود مهاجرت کنید.

Cocoapod ها را به روز کنید

وابستگی های کوکوپودهای iOS کیت ML را در فایل پادفایل برنامه خود به روز کنید:

API نام(های) غلاف قدیمی نام(های) غلاف جدید
اسکن بارکد Firebase/MLVision
Firebase/MLVisionBarcodeModel
GoogleMLKit/Scanning Barcode
شناسایی چهره 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) Firebase/MLVisionAutoML GoogleMLKit/ImageLabelingCustom
GoogleMLKit/LinkFirebase
شناسه زبان Firebase/MLNaturalLanguage
Firebase/MLNLLanguageID
GoogleMLKit/LanguageID
پاسخ هوشمند Firebase/MLNaturalLanguage
Firebase/MLNLSmartReply
GoogleMLKit/SmartReply
ترجمه کردن Firebase/MLNaturalLanguage
Firebase/MLNLTranslate
GoogleMLKit/Translate

نام کلاس ها، فهرست ها و انواع را به روز کنید

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

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

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

سریع

کلاس یا نوع قدیمی کلاس یا نوع جدید
AutoMLLocalModel LocalModel
AutoMLRemoteModel CustomRemoteModel
VisionBarcodeDetectionCallback بارکد اسکن پاسخ به تماس
VisionBarcode Detector بارکد اسکنر
VisionBarcodeDetectorOptions BarcodeScannerOptions
VisionImage VisionImage (بدون تغییر)
ویژن پوینت VisionPoint (بدون تغییر)
VisionOnDeviceAutoMLImageLabelerOptions CustomImageLabelerOptions
VisionOnDeviceImageLabelerOptions ImageLabelerOptions

هدف-C

کلاس یا نوع قدیمی کلاس یا نوع جدید
FIRAutoMLLocalModel MLKLocalModel
FIRAutoMLRemoteModel MLKCustomRemoteModel
FIRVisionBarcodeDetectionCallback MLKBarcodeScanningCallback
آشکارساز بارکد FIRVision اسکنر بارکد MLK
FIRVisionBarcodeDetectorOptions MLKBarcodeScannerOptions
FIRVisionImage MLKVisionImage
FIRVisionOnDeviceAutoMLImageLabelerOptions MLKCustomImageLabelerOptions
FIRVisionOnDeviceImageLabelerOptions MLKImageLabelerOptions
FIRVisionPoint MLKVisionPoint

هدف-C

نام روش ها را به روز کنید

نام روش ها را طبق این قوانین به روز کنید:

  • کلاس های نقطه ورودی دامنه ( Vision ، NaturalLanguage ) دیگر وجود ندارند. آنها با کلاس های وظیفه ای جایگزین شده اند. برای دریافت آشکارسازها، تماس‌های مستقیم با روش‌های کارخانه هر آشکارساز را جایگزین کنید.

  • کلاس VisionImageMetadata به همراه فهرست VisionDetectorImageOrientation حذف شده است. از ویژگی 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:) تغییر نام داده است تا با سایر APIهای بینایی سازگار باشد.

  • APIهای زبان طبیعی اکنون از عبارت "برچسب زبان" (همانطور که توسط استاندارد BCP-47 تعریف شده) به جای "کد زبان" استفاده می کنند.

  • TranslateLanguage اکنون از نام های قابل خواندن (مانند .english) برای ثابت های خود به جای برچسب های زبان (مانند .en) استفاده می کند.

در اینجا چند نمونه از روش های قدیمی و جدید سوئیفت آورده شده است:

قدیمی

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 برگردانده می شود. تمام دسته بندی رشته های ممکن در فهرست 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 ML تنها مؤلفه Firebase است که استفاده می کنید
  • شما فقط از API های روی دستگاه استفاده می کنید
  • شما از سرویس مدل استفاده نمی کنید

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

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

کمک گرفتن

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