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

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

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

Vision APIs

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

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

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

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

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

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

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

تتضمّن هذه العملية تغييرات بسيطة على الرموز البرمجية:

  • تم تغيير إنشاء مثيل لأداة الكشف/المسح الضوئي/التصنيف/الترجمة… أصبح لكل ميزة نقطة دخول خاصة بها. على سبيل المثال: 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) بدلاً من "رمز اللغة".
  • تمت إزالة طرق Getter في فئات xxxOptions.
  • لم يعُد متاحًا استخدام طريقة getBitmap() في فئة InputImage(التي تحلّ محلّ FirebaseVisionImage) كجزء من الواجهة العامة. يُرجى الرجوع إلى BitmapUtils.java في نموذج التشغيل السريع في ML Kit للحصول على صورة نقطية تم تحويلها من مدخلات مختلفة.
  • تمت إزالة FirebaseVisionImageMetadata، ويمكنك فقط تمرير البيانات الوصفية للصور، مثل العرض والارتفاع وrotationDegrees والتنسيق، إلى طرق إنشاء 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" لأداة Gradle في ملف Gradle الخاص بالوحدة (على مستوى التطبيق) (عادةً app/build.gradle) بالمكوّن الإضافي "أداة مطابقة الإصدارات الدقيقة":

قبل

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" لأداة Gradle في ملف Gradle (المستوى الجذر) الخاص بمشروعك بمسار فئة المكوّن الإضافي "أداة مطابقة الإصدار الدقيق":

قبل

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.

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

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