این راهنما توضیح میدهد که چگونه از 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بههمراهVisionDetectorImageOrientationenum برداشته شده است. از دارایی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 حذف کنید.
دریافت راهنمایی
اگر با مشکلی مواجه شدید، لطفاً صفحه انجمن ما را بررسی کنید که در آن کانالهای موجود برای تماس با ما را شرح دادهایم.