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

يوضّح هذا الدليل كيفية نقل البيانات من حزمة تعلّم الآلة لنظام Android في Firebase.

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

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

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

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

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

عدِّل الاعتمادات لمكتبات حزمة تعلّم الآلة لنظام Android في ملف Gradle الخاص بالوحدة (على مستوى التطبيق)، وعادةً ما يكون app/build.gradle.kts، وفقًا للجداول التالية:

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

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

To host and download custom models, move your models to Cloud Storage and add download logic in your app to load them using LocalModel. For details, see the Firebase ML to Cloud Storage migration guide.

واجهات برمجة التطبيقات Natural Language APIs

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

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

عدِّل الاعتمادات لمكتبات حزمة تعلّم الآلة لنظام Android في ملف Gradle الخاص بالوحدة (على مستوى التطبيق)، وعادةً ما يكون app/build.gradle.kts، وفقًا للجداول التالية:

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

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

Requires manual download. Firebase-hosted remote models are deprecated. For details, see the Firebase ML to Cloud Storage migration guide.
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.

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

لا يلزم إجراء سوى تغييرات بسيطة على الرموز:

  • تم تغيير عملية إنشاء مثيل لأداة الرصد/الماسح الضوئي/أداة تصنيف الصور/المترجم... لكل ميزة الآن نقطة دخول خاصة بها. على سبيل المثال: BarcodeScanning وTextRecognition وImageLabeling وTranslation... يتم استبدال طلبات getInstance() لخدمة Firebase بطلبات طريقة 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 APIs إلى process() لتحقيق الاتساق.
  • تستخدم واجهات برمجة التطبيقات Natural Language APIs الآن المصطلح "علامة اللغة" (كما هو محدّد بموجب معيار BCP 47) بدلاً من "رمز اللغة".
  • تمت إزالة طرق getter في صفوف xxxOptions.
  • لم يعُد من الممكن استخدام طريقة getBitmap() في الصف InputImage (التي تحل محل FirebaseVisionImage) كجزء من الواجهة العامة. راجِع BitmapUtils.java في نموذج التشغيل السريع في حزمة تعلّم الآلة للحصول على صورة نقطية تم تحويلها من مدخلات مختلفة.
  • تمت إزالة FirebaseVisionImageMetadata، ويمكنك فقط تمرير بيانات وصفية للصور، مثل width وheight وrotationDegrees وformat إلى طرق إنشاء InputImage.

في ما يلي بعض الأمثلة على طرق 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 lifecycle 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 lifecycle 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.

تصنيف الصور باستخدام AutoML (تم إيقافه)

تم إيقاف تنزيل النماذج المخصّصة لتصنيف الصور باستخدام AutoML، وسيتم إيقاف هذه الميزة في 15 يونيو 2027. عليك استخدام Cloud Storage لاستضافة النماذج وإضافة منطق التنزيل إلى تطبيقك لتنزيل النماذج بدلاً من ذلك. للحصول على التفاصيل، يُرجى الاطّلاع على دليل نقل البيانات من Firebase ML إلى Cloud Storage.

رصد الأجسام وتتبُّعها

إذا كان تطبيقك يستخدم ميزة رصد العناصر مع التصنيف العام، يُرجى العِلم أنّ حزمة تطوير البرامج (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 بعد نقل البيانات. يُرجى اتّباع الخطوات التالية:

  • أزِل ملف إعداد Firebase عن طريق حذف ملف الإعداد google-services.json في دليل الوحدة (على مستوى التطبيق) لتطبيقك.
  • استبدِل المكوّن الإضافي في خدمات Google لأداة Gradle في ملف Gradle الخاص بالوحدة (على مستوى التطبيق)، وعادةً ما يكون app/build.gradle.kts، بالمكوّن الإضافي Strict Version Matcher:

قبل

plugins {
  id("com.android.application")
  id("com.google.gms.google-services")
}

android {
  // …
}

بعد

plugins {
  id("com.android.application")
  id("com.google.android.gms.strict-version-matcher-plugin")
}

android {
  // …
}
  • استبدِل مسار الصف للمكوّن الإضافي في خدمات Google لأداة Gradle في ملف Gradle الخاص بالمشروع (على مستوى الجذر) (build.gradle.kts) بمسار الصف للمكوّن الإضافي Strict Version Matcher:

قبل

buildscript {
  dependencies {
    // ...

    classpath("com.google.gms:google-services:4.3.3")
  }
}

بعد

buildscript {
  dependencies {
    // ...
    classpath("com.google.android.gms:strict-version-matcher-plugin:1.2.1")
  }
}

احذف تطبيق Firebase الخاص بك في وحدة تحكّم Firebase وفقًا لـ الـ تعليمات الواردة على موقع دعم Firebase الإلكتروني.

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

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