پیش نیازها
قبل از شروع به انتقال کد خود، مطمئن شوید که شرایط زیر را دارید:
- ML Kit از Xcode 13.2.1 یا بالاتر پشتیبانی می کند.
- ML Kit از iOS نسخه 15.5 یا بالاتر پشتیبانی می کند.
- کیت 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 حذف کنید.
دریافت کمک
اگر با مشکلی مواجه شدید، لطفاً صفحه انجمن ما را بررسی کنید، جایی که ما کانال های موجود برای تماس با ما را مشخص می کنیم.
جز در مواردی که غیر از این ذکر شده باشد،محتوای این صفحه تحت مجوز Creative Commons Attribution 4.0 License است. نمونه کدها نیز دارای مجوز Apache 2.0 License است. برای اطلاع از جزئیات، به خطمشیهای سایت Google Developers مراجعه کنید. جاوا علامت تجاری ثبتشده Oracle و/یا شرکتهای وابسته به آن است.
تاریخ آخرین بهروزرسانی 2024-12-12 بهوقت ساعت هماهنگ جهانی.