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