مهاجرت برای اندروید

واردات gradle را به روز کنید

SDK جدید فقط به یک وابستگی برای هر ML Kit API نیاز دارد. نیازی نیست کتابخانه های رایجی مانند firebase-ml-vision یا firebase-ml-natural-language را مشخص کنید. ML Kit از فضای نام com.google.android.gms برای کتابخانه هایی که به خدمات Google Play وابسته هستند استفاده می کند.

Vision API

مدل های همراه به عنوان بخشی از برنامه شما تحویل داده می شود. مدل های نازک باید دانلود شوند. برخی از APIها به دو صورت بسته‌بندی و نازک در دسترس هستند، برخی دیگر فقط به یک شکل یا شکل دیگر:

API همراه نازک
تشخیص متن x (بتا) x
تشخیص چهره x x
اسکن بارکد x x
برچسب گذاری تصویر x x
تشخیص و ردیابی اشیاء x -

وابستگی‌های کتابخانه‌های اندروید ML Kit را در ماژول (سطح برنامه) فایل Gradle (معمولا app/build.gradle ) مطابق جداول زیر به‌روزرسانی کنید:

مدل های همراه

API آثار قدیمی مصنوع جدید
اسکن بارکد com.google.firebase:firebase-ml-vision:24.0.1
com.google.firebase:firebase-ml-vision-barcode-model:16.0.1
com.google.mlkit:barcode-scanning:17.3.0
کانتور صورت com.google.firebase:firebase-ml-vision:24.0.1
com.google.firebase:firebase-ml-vision-face-model:19.0.0
com.google.mlkit:face-detection:16.1.7
برچسب گذاری تصویر com.google.firebase:firebase-ml-vision:24.0.1
com.google.firebase:firebase-ml-vision-image-label-model:19.0.0
com.google.mlkit:image-labeling:17.0.9
تشخیص اشیا com.google.firebase:firebase-ml-vision:24.0.1
com.google.firebase:firebase-ml-vision-object-detection-model:19.0.3
com.google.mlkit:object-detection:17.0.2

مدل های نازک

API آثار قدیمی مصنوع جدید
اسکن بارکد com.google.firebase:firebase-ml-vision:24.0.1 com.google.android.gms:play-services-mlkit-barcode-scanning:18.3.1
تشخیص چهره com.google.firebase:firebase-ml-vision:24.0.1 com.google.android.gms:play-services-mlkit-face-detection:17.1.0
تشخیص متن com.google.firebase:firebase-ml-vision:24.0.1 com.google.android.gms:play-services-mlkit-text-recognition:19.0.1

AutoMLVision Edge

API مصنوع قدیمی مصنوع جدید
AutoML بدون دانلود com.google.firebase:firebase-ml-vision:24.0.1
com.google.firebase:firebase-ml-vision-automl:18.0.3
com.google.mlkit:image-labeling-custom:17.0.3
AutoML با دانلود com.google.firebase:firebase-ml-vision:24.0.1
com.google.firebase:firebase-ml-vision-automl:18.0.3
com.google.mlkit:image-labeling-custom:17.0.3
com.google.mlkit:linkfirebase:17.0.0

API های زبان طبیعی

مدل های همراه به عنوان بخشی از برنامه شما تحویل داده می شود. مدل های نازک باید دانلود شوند:

API همراه نازک
شناسه زبان x x
پاسخ هوشمند x x (بتا)

وابستگی‌های کتابخانه‌های اندروید ML Kit را در ماژول (سطح برنامه) فایل Gradle (معمولا app/build.gradle ) مطابق جداول زیر به‌روزرسانی کنید:

مدل های همراه

API آثار قدیمی مصنوع جدید
شناسه زبان com.google.firebase:firebase-ml-natural-language:22.0.0
com.google.firebase:firebase-ml-natural-language-language-id-model:20.0.7
com.google.mlkit:language-id:17.0.6
پاسخ هوشمند com.google.firebase:firebase-ml-natural-language:22.0.0
com.google.firebase:firebase-ml-natural-language-smart-reply-model:20.0.7
com.google.mlkit:smart-reply:17.0.4

مدل های نازک

API آثار قدیمی مصنوع جدید
شناسه زبان com.google.firebase:firebase-ml-natural-language:22.0.0
com.google.firebase:firebase-ml-natural-language-language-id-model:20.0.7
com.google.android.gms:play-services-mlkit-language-id:17.0.0
پاسخ هوشمند com.google.firebase:firebase-ml-natural-language:22.0.0
com.google.firebase:firebase-ml-natural-language-smart-reply-model:20.0.7
com.google.android.gms:play-services-mlkit-smart-reply:16.0.0-beta1

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

اگر کلاس شما در این جدول ظاهر می شود، تغییر مشخص شده را اعمال کنید:

کلاس قدیمی کلاس جدید
com.google.firebase.ml.common.FirebaseMLException com.google.mlkit.common.MlKitException
com.google.firebase.ml.vision.common.FirebaseVisionImage com.google.mlkit.vision.common.InputImage
com.google.firebase.ml.vision.barcode.FirebaseVisionBarcodeDetector com.google.mlkit.vision.barcode.BarcodeScanner
com.google.firebase.ml.vision.labeler.FirebaseVisionImageLabel com.google.mlkit.vision.label.ImageLabeler
com.google.firebase.ml.vision.barcode.FirebaseVisionBarcodeDetector com.google.mlkit.vision.barcode.BarcodeScanner
com.google.firebase.ml.vision.automl.FirebaseAutoMLLocalModel com.google.mlkit.common.model.LocalModel
com.google.firebase.ml.vision.automl.FirebaseAutoMLRemoteModel com.google.mlkit.common.model.CustomRemoteModel
com.google.firebase.ml.vision.label.FirebaseVisionOnDeviceImageLabelerOptions com.google.mlkit.vision.label.defaults.ImageLabelerOptions
com.google.firebase.ml.vision.label.FirebaseVisionImageLabel com.google.mlkit.vision.label.ImageLabel
com.google.firebase.ml.vision.label.FirebaseVisionOnDeviceAutoMLImageLabelerOptions com.google.mlkit.vision.label.custom.CustomImageLabelerOptions
com.google.firebase.ml.vision.objects.FirebaseVisionObjectDetectorOptions com.google.mlkit.vision.objects.defaults.ObjectDetectorOptions

برای کلاس های دیگر، قوانین زیر را دنبال کنید:

  • پیشوند FirebaseVision از نام کلاس حذف کنید.
  • سایر پیشوندهایی که با پیشوند Firebase شروع می شوند را از نام کلاس حذف کنید.

همچنین، در نام‌های بسته، پیشوند com.google.firebase.ml با com.google.mlkit جایگزین کنید.

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

حداقل تغییرات کد وجود دارد:

  • آشکارساز / اسکنر / برچسب / مترجم ... نمونه تغییر کرده است. اکنون هر ویژگی نقطه ورود خود را دارد. به عنوان مثال: اسکن بارکد، تشخیص متن، برچسب گذاری تصویر، ترجمه…. تماس‌های سرویس Firebase getInstance() با فراخوانی به متد getClient() نقطه ورودی ویژگی جایگزین می‌شود.
  • نمونه پیش‌فرض برای TextRecognizer حذف شده است، زیرا ما کتابخانه‌های اضافی را برای تشخیص اسکریپت‌های دیگر مانند چینی و کره‌ای معرفی کردیم. برای استفاده از گزینه‌های پیش‌فرض با مدل تشخیص متن اسکریپت لاتین، لطفاً یک وابستگی به com.google.android.gms:play-services-mlkit-text-recognition اعلام کنید و از TextRecognition.getClient(TextRecognizerOptions.DEFAULT_OPTIONS) استفاده کنید.
  • نمونه پیش فرض برای ImageLabeler و ObjectDetector حذف شده است، زیرا ما پشتیبانی مدل سفارشی را برای این دو ویژگی معرفی کردیم. به عنوان مثال، برای استفاده از گزینه های پیش فرض با مدل پایه در ImageLabeling، لطفاً یک وابستگی به com.google.mlkit:image-labeling اعلام کنید و از ImageLabeling.getClient(ImageLabelerOptions.DEFAULT_OPTIONS) در جاوا استفاده کنید.
  • همه دستگیره ها (ردیاب / اسکنر / برچسب / مترجم ...) قابل بسته شدن هستند. اطمینان حاصل کنید که متد close() زمانی فراخوانی می شود که آن اشیاء دیگر استفاده نشوند. اگر از آنها در یک Fragment یا AppCompatActivity استفاده می کنید، یک راه آسان برای انجام این کار این است که LifecycleOwner.getLifecycle() را در Fragment یا AppCompatActivity فراخوانی کنید و سپس Lifecycle.addObserver را فراخوانی کنید.
  • processImage() و detectInImage() در Vision APIها برای سازگاری به process() تغییر نام داده اند .
  • APIهای زبان طبیعی اکنون از عبارت "برچسب زبان" (همانطور که توسط استاندارد BCP 47 تعریف شده) به جای "کد زبان" استفاده می کنند.
  • متدهای دریافت کننده در کلاس های xxxOptions حذف شده اند.
  • متد getBitmap () در کلاس InputImage (به جای FirebaseVisionImage ) دیگر به عنوان بخشی از رابط عمومی پشتیبانی نمی شود. لطفاً برای تبدیل بیت مپ از ورودی های مختلف به BitmapUtils.java در نمونه ML Kit مراجعه کنید.
  • FirebaseVisionImageMatadata حذف شده است، شما فقط می توانید ابرداده های تصویر مانند عرض، ارتفاع، rotationDegrees، فرمت را به روش های ساخت InputImages منتقل کنید.

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

قدیمی

// Construct image labeler with base model and default options.
val imageLabeler = FirebaseVision.getInstance().onDeviceImageLabeler

// Construct object detector with base model and default options.
val objectDetector = FirebaseVision.getInstance().onDeviceObjectDetector

// Construct face detector with given options
val faceDetector = FirebaseVision.getInstance().getVisionFaceDetector(options)

// Construct image labeler with local AutoML model
val localModel =
    FirebaseAutoMLLocalModel.Builder()
      .setAssetFilePath("automl/manifest.json")
      .build()
val autoMLImageLabeler =
    FirebaseVision.getInstance()
      .getOnDeviceAutoMLImageLabeler(
          FirebaseVisionOnDeviceAutoMLImageLabelerOptions.Builder(localModel)
            .setConfidenceThreshold(0.3F)
            .build()
    )

جدید

// Construct image labeler with base model and default options.
val imageLabeler = ImageLabeling.getClient(ImageLabelerOptions.DEFAULT_OPTIONS)
// Optional: add life cycle observer
lifecycle.addObserver(imageLabeler)

// Construct object detector with base model and default options.
val objectDetector = ObjectDetection.getClient(ObjectDetectorOptions.DEFAULT_OPTIONS)

// Construct face detector with given options
val faceDetector = FaceDetection.getClient(options)

// Construct image labeler with local AutoML model
val localModel =
  LocalModel.Builder()
    .setAssetManifestFilePath("automl/manifest.json")
    .build()
val autoMLImageLabeler =
  ImageLabeling.getClient(
    CustomImageLabelerOptions.Builder(localModel)
    .setConfidenceThreshold(0.3F).build())
  

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

قدیمی

// Construct image labeler with base model and default options.
FirebaseVisionImageLabeler imagelLabeler =
     FirebaseVision.getInstance().getOnDeviceImageLabeler();

// Construct object detector with base model and default options.
FirebaseVisionObjectDetector objectDetector =
     FirebaseVision.getInstance().getOnDeviceObjectDetector();

// Construct face detector with given options
FirebaseVisionFaceDetector faceDetector =
     FirebaseVision.getInstance().getVisionFaceDetector(options);

// Construct image labeler with local AutoML model
FirebaseAutoMLLocalModel localModel =
    new FirebaseAutoMLLocalModel.Builder()
      .setAssetFilePath("automl/manifest.json")
      .build();
FirebaseVisionImageLabeler autoMLImageLabeler =
    FirebaseVision.getInstance()
      .getOnDeviceAutoMLImageLabeler(
          FirebaseVisionOnDeviceAutoMLImageLabelerOptions.Builder(localModel)
            .setConfidenceThreshold(0.3F)
            .build());

جدید

// Construct image labeler with base model and default options.
ImageLabeler imageLabeler = ImageLabeling.getClient(ImageLabelerOptions.DEFAULT_OPTIONS);
// Optional: add life cycle observer
getLifecycle().addObserver(imageLabeler);

// Construct object detector with base model and default options.
ObjectDetector objectDetector = ObjectDetection.getClient(ObjectDetectorOptions.DEFAULT_OPTIONS);

// Construct face detector with given options
FaceDetector faceDetector = FaceDetection.getClient(options);

// Construct image labeler with local AutoML model
LocalModel localModel =
  new LocalModel.Builder()
    .setAssetManifestFilePath("automl/manifest.json")
    .build();
ImageLabeler autoMLImageLabeler =
  ImageLabeling.getClient(
    new CustomImageLabelerOptions.Builder(localModel)
    .setConfidenceThreshold(0.3F).build());
  

تغییرات ویژه API

اسکن بارکد

برای API اسکن بارکد، اکنون دو راه برای ارائه مدل‌ها وجود دارد:

  • از طریق سرویس‌های Google Play با نام «نازک» (توصیه می‌شود) - این کار باعث کاهش اندازه برنامه می‌شود و مدل بین برنامه‌ها به اشتراک گذاشته می‌شود. با این حال، توسعه دهندگان باید اطمینان حاصل کنند که مدل قبل از استفاده از آن برای اولین بار دانلود شده است.
  • با APK برنامه شما با نام "Bundled" - این اندازه برنامه را افزایش می دهد اما به این معنی است که مدل بلافاصله قابل استفاده است.

این دو پیاده سازی کمی متفاوت هستند، به طوری که نسخه "باندل" دارای تعدادی پیشرفت نسبت به نسخه "نازک" است. جزئیات مربوط به این تفاوت ها را می توان در دستورالعمل های API اسکن بارکد یافت.

تشخیص چهره

برای API تشخیص چهره، دو روش برای ارائه مدل‌ها وجود دارد:

  • از طریق سرویس‌های Google Play با نام «نازک» (توصیه می‌شود) - این کار باعث کاهش اندازه برنامه می‌شود و مدل بین برنامه‌ها به اشتراک گذاشته می‌شود. با این حال، توسعه دهندگان باید اطمینان حاصل کنند که مدل قبل از استفاده از آن برای اولین بار دانلود شده است.
  • با APK برنامه شما با نام "Bundled" - این باعث افزایش اندازه دانلود برنامه می شود اما به این معنی است که مدل بلافاصله قابل استفاده است.

رفتار پیاده سازی ها یکسان است.

ترجمه

  • TranslateLanguage اکنون از نام‌های قابل خواندن برای ثابت‌های خود (مانند ENGLISH ) به جای برچسب‌های زبان ( EN ) استفاده می‌کند. آنها همچنین اکنون به جای @IntDef@StringDef هستند و مقدار ثابت همان تگ زبان BCP 47 است.

  • اگر برنامه شما از گزینه شرط دانلود «دستگاه بی‌کار» استفاده می‌کند، توجه داشته باشید که این گزینه حذف شده است و دیگر قابل استفاده نیست. همچنان می‌توانید از گزینه «شارژ دستگاه» استفاده کنید. اگر رفتار پیچیده‌تری می‌خواهید، می‌توانید تماس RemoteModelManager.download را پشت منطق خود به تاخیر بیندازید.

برچسب گذاری تصویر AutoML

اگر برنامه شما از گزینه شرط دانلود «دستگاه بی‌کار» استفاده می‌کند، توجه داشته باشید که این گزینه حذف شده است و دیگر قابل استفاده نیست. همچنان می‌توانید از گزینه «شارژ دستگاه» استفاده کنید.

اگر رفتار پیچیده‌تری می‌خواهید، می‌توانید تماس RemoteModelManager.download را پشت منطق خود به تاخیر بیندازید.

تشخیص و ردیابی شی

اگر برنامه شما از تشخیص اشیاء با طبقه‌بندی درشت استفاده می‌کند، توجه داشته باشید که SDK جدید روش بازگرداندن دسته‌بندی اشیاء شناسایی‌شده را تغییر داده است.

دسته طبقه بندی به جای یک عدد صحیح به عنوان نمونه ای از DetectedObject.Label برگردانده می شود. تمام دسته بندی های ممکن برای طبقه بندی کننده درشت در کلاس PredefinedCategory گنجانده شده است.

در اینجا یک نمونه از کد قدیمی و جدید Kotlin آورده شده است:

قدیمی

if (object.classificationCategory == FirebaseVisionObject.CATEGORY_FOOD) {
    ...
}

جدید

if (!object.labels.isEmpty() && object.labels[0].text == PredefinedCategory.FOOD) {
    ...
}
// or
if (!object.labels.isEmpty() && object.labels[0].index == PredefinedCategory.FOOD_INDEX) {
    ...
}

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

قدیمی

if (object.getClassificationCategory() == FirebaseVisionObject.CATEGORY_FOOD) {
    ...
}

جدید

if (!object.getLabels().isEmpty()
    && object.getLabels().get(0).getText().equals(PredefinedCategory.FOOD)) {
    ...
}
// or
if (!object.getLabels().isEmpty()
    && object.getLabels().get(0).getIndex() == PredefinedCategory.FOOD_INDEX) {
    ...
}

دسته "ناشناخته" حذف شده است. هنگامی که اطمینان طبقه بندی یک شی پایین است، ما فقط هیچ برچسبی را بر نمی گردانیم.

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

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

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

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

  • با حذف فایل پیکربندی google-services.json در فهرست ماژول (سطح برنامه) برنامه خود، فایل پیکربندی Firebase را حذف کنید.
  • افزونه Google Services Gradle را در فایل Gradle ماژول (سطح برنامه) خود (معمولا app/build.gradle) با افزونه Strict Version Matcher جایگزین کنید:

قبل از

apply plugin: 'com.android.application'
apply plugin: 'com.google.gms.google-services'  // Google Services plugin

android {
  // …
}

بعد از

apply plugin: 'com.android.application'
apply plugin: 'com.google.android.gms.strict-version-matcher-plugin'

android {
  // …
}
  • پلاگین Google Services Gradle را در فایل Gradle پروژه خود (سطح ریشه) (build.gradle) با افزونه Strict Version Matcher جایگزین کنید:

قبل از

buildscript {
  dependencies {
    // ...

    classpath 'com.google.gms:google-services:4.3.3'  // Google Services plugin
  }
}

بعد از

buildscript {
  dependencies {
    // ...

    classpath 'com.google.android.gms:strict-version-matcher-plugin:1.2.1'
  }
}

طبق دستورالعمل های سایت پشتیبانی Firebase، برنامه Firebase خود را در کنسول Firebase حذف کنید.

دریافت کمک

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