نقل البيانات لنظام التشغيل Android

تعديل عمليات استيراد Gradle

لا تتطلّب حزمة SDK الجديدة سوى عنصر واحد للاعتماد لكل واجهة برمجة تطبيقات ML Kit. لست بحاجة إلى تحديد مكتبات شائعة مثل firebase-ml-vision أو firebase-ml-natural-language. تستخدِم ML Kit مساحة الاسم com.google.android.gms للمكتبات التي تعتمد على "خدمات Google Play".

واجهات برمجة تطبيقات Vision

يتم عرض النماذج المجمّعة كجزء من تطبيقك. يجب تنزيل النماذج البسيطة. تتوفّر بعض واجهات برمجة التطبيقات بتنسيق مُجمَّع وخفيف، والبعض الآخر بتنسيق واحد فقط أو الآخر:

واجهة برمجة التطبيقاتمُجمَّعةرقيق
التعرّف على النصx (إصدار تجريبي)x
التعرّف على الوجوهxx
مسح الرموز الشريطية ضوئيًاxx
تصنيف الصورxx
رصد الأجسام وتتبُّعهاx-

عدِّل الملحقات لمكتبات ML Kit لنظام التشغيل Android في ملف Gradle للوحدة (على مستوى التطبيق) (عادةً app/build.gradle) وفقًا للجداول التالية:

النماذج المجمّعة

واجهة برمجة التطبيقاتالعناصر القديمةعنصر جديد
مسح الرموز الشريطية ضوئيًا 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

الطُرز الرقيقة

واجهة برمجة التطبيقاتالعناصر القديمةعنصر جديد
مسح الرموز الشريطية ضوئيًا 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

واجهة برمجة التطبيقاتعنصر قديمعنصر جديد
استخدام ميزة 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

واجهات برمجة التطبيقات الخاصة بمعالجة اللغة الطبيعية

يتم عرض النماذج المجمّعة كجزء من تطبيقك. يجب تنزيل النماذج البسيطة:

واجهة برمجة التطبيقاتمُجمَّعةرقيق
رقم تعريف اللغةxx
الرد السريعxx (إصدار تجريبي)

عدِّل الملحقات لمكتبات ML Kit لنظام التشغيل Android في ملف Gradle للوحدة (على مستوى التطبيق) (عادةً app/build.gradle) وفقًا للجداول التالية:

النماذج المجمّعة

واجهة برمجة التطبيقاتالعناصر القديمةعنصر جديد
رقم تعريف اللغة 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

الطُرز الرقيقة

واجهة برمجة التطبيقاتالعناصر القديمةعنصر جديد
رقم تعريف اللغة 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 في أسماء الحِزم.

تعديل أسماء الطرق

هناك تغييرات بسيطة على الرمز:

  • تم تغيير عملية إنشاء مثيل لـ Detector/scanner/labeler/translator… أصبحت لكل ميزة الآن نقطة دخول خاصة بها. على سبيل المثال: BarcodeScanning وTextRecognition وImageLabeling وTranslation…. يتم استبدال طلبات البيانات من خدمة 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) في Java.
  • يمكن إغلاق جميع الأسماء المعرِّفة (مثل "كاشف/ماسح ضوئي/مصنِّف/مترجم"). تأكَّد من استدعاء طريقة close() عندما لا يعود استخدام هذه العناصر ضروريًا. إذا كنت تستخدمها في Fragment أو AppCompatActivity، يمكنك تنفيذ ذلك بسهولة من خلال استدعاء LifecycleOwner.getLifecycle() في Fragment أو AppCompatActivity، ثم استدعاء Lifecycle.addObserver.
  • تمّت إعادة تسمية واجهتَي برمجة التطبيقات processImage() وdetectInImage() في Vision API إلى process() للحفاظ على الاتّساق.
  • تستخدِم واجهات برمجة التطبيقات Natural Language API الآن العبارة "علامة اللغة" (كما هو محدّد في معيار BCP 47) بدلاً من "رمز اللغة".
  • تمّت إزالة طرق الحصول على البيانات في فئات xxxOptions.
  • لم تعُد طريقة getBitmap() في فئة InputImage(التي تحلّ محل FirebaseVisionImage) متاحة كجزء من الواجهة العامة. يُرجى الرجوع إلى BitmapUtils.java في نموذج البدء السريع لمجموعة ML Kit لتحويل الصورة النقطية من مدخلات مختلفة.
  • تمت إزالة FirebaseVisionImageMetadata، ويمكنك ببساطة تمرير البيانات الوصفية للصورة، مثل العرض والارتفاع ودرجة الدوران والتنسيق، إلى طرق إنشاء InputImages.

في ما يلي بعض الأمثلة على طرق Kotlin القديمة والجديدة:

الإصدار القديم

// 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())
  

في ما يلي بعض الأمثلة على طرق Java القديمة والجديدة:

الإصدار القديم

// 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());
  

التغييرات المتعلّقة بواجهة برمجة التطبيقات

مسح الرموز الشريطية ضوئيًا

بالنسبة إلى Barcode Scanning API، تتوفّر الآن طريقتان لإرسال النماذج:

  • من خلال "خدمات Google Play"، والتي يُشار إليها أيضًا باسم "النموذج البسيط" (إجراء يُنصح به): يقلل هذا الإجراء من حجم التطبيق وتتم مشاركة النموذج بين التطبيقات. ومع ذلك، على المطوّرين التأكّد من تنزيل النموذج قبل استخدامه لأول مرة.
  • باستخدام حزمة APK الخاصة بتطبيقك، والتي يُشار إليها أيضًا باسم "الحزمة": يؤدي ذلك إلى زيادة حجم التطبيق، ولكنّه يعني أنّ النموذج قابل للاستخدام على الفور.

يختلف الأسلوبان قليلاً، إذ يتضمّن الإصدار "المجمَّع" عددًا من التحسينات مقارنةً بالإصدار "الخفيف". يمكن العثور على تفاصيل عن هذه الاختلافات في إرشادات Barcode Scanning API.

التعرّف على الوجوه

بالنسبة إلى Face Detection API، هناك طريقتان لإرسال النماذج:

  • من خلال "خدمات Google Play"، والتي يُشار إليها أيضًا باسم "النموذج البسيط" (إجراء يُنصح به): يقلل هذا الإجراء من حجم التطبيق وتتم مشاركة النموذج بين التطبيقات. ومع ذلك، على المطوّرين التأكّد من تنزيل النموذج قبل استخدامه لأول مرة.
  • باستخدام حزمة APK الخاصة بتطبيقك، والتي يُشار إليها أيضًا باسم "الحزمة": يؤدي ذلك إلى زيادة حجم تنزيل التطبيق، ولكن يعني ذلك أنّه يمكن استخدام النموذج على الفور.

يكون سلوك عمليات التنفيذ متطابقًا.

الترجمة

  • يستخدم TranslateLanguage الآن أسماء قابلة للقراءة لثوابته (مثل ENGLISH) بدلاً من علامات اللغة (EN). وهي الآن أيضًا @StringDef بدلاً من @IntDef، وقيمة الثوابت هي علامة لغة BCP 47 المطابقة.

  • إذا كان تطبيقك يستخدم خيار "حالة الجهاز في وضع السكون" لتحديد شرط التنزيل، يُرجى العِلم أنّه تمت إزالة هذا الخيار ولا يمكن استخدامه بعد الآن. سيظل بإمكانك استخدام خيار "شحن الجهاز". إذا كنت تريد سلوكًا أكثر تعقيدًا، يمكنك تأخير استدعاء RemoteModelManager.download وفقًا لمنطقك الخاص.

AutoML Image Labeling

إذا كان تطبيقك يستخدم خيار "حالة الجهاز في وضع السكون" لتحديد شرط التنزيل، يُرجى العِلم أنّه تمت إزالة هذا الخيار ولا يمكن استخدامه بعد الآن. سيظل بإمكانك استخدام خيار "شحن الجهاز".

إذا كنت تريد سلوكًا أكثر تعقيدًا، يمكنك تأخير استدعاء 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) {
    ...
}

في ما يلي مثال على رمز Java القديم والجديد:

الإصدار القديم

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 Kit هو مكوّن Firebase الوحيد الذي تستخدمه.
  • استخدام واجهات برمجة التطبيقات على الجهاز فقط
  • لا تستخدِم عرض النماذج.

في هذه الحالة، يمكنك إزالة تبعيات Firebase بعد نقل البيانات. اتبع الخطوات التالية:

  • أزِل ملف إعدادات Firebase من خلال حذف ملف الإعدادات google-services.json في دليل الوحدة (على مستوى التطبيق) في تطبيقك.
  • استبدِل المكوّن الإضافي لـ 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 الإلكتروني.

الحصول على المساعدة

إذا واجهت أي مشاكل، يُرجى الانتقال إلى صفحة المنتدى التي نوضّح فيها القنوات المتاحة للتواصل معنا.