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

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

لا تتطلّب حزمة تطوير البرامج (SDK) الجديدة سوى اعتمادية واحدة لكل واجهة برمجة تطبيقات في ML Kit. لا تحتاج إلى تحديد المكتبات الشائعة مثل firebase-ml-vision أو firebase-ml-natural-language. تستخدم حزمة تعلّم الآلة مساحة الاسم 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.2.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.6
تصنيف الصور 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.8
رصد العناصر 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.1

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

واجهة برمجة التطبيقاتالعناصر القديمةعنصر جديد
مسح الرمز الشريطي ضوئيًا com.google.firebase:firebase-ml-vision:24.0.1 com.google.android.gms:play-services-mlkit-barcode-scanning:18.3.0
التعرّف على الوجه 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.0

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.2
ميزة 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.2
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.5
الرد السريع 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.3

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

واجهة برمجة التطبيقاتالعناصر القديمةعنصر جديد
معرف اللغة 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) في Java.
  • جميع الأسماء المعرِّفة (أداة الكشف/الماسح الضوئي/أداة التصنيف/الترجمة...) قابلة للإغلاق. تأكَّد من استدعاء طريقة close() عند إيقاف استخدام هذه العناصر. إذا كنت تستخدمها في Fragment أو AppCompatActivity، يمكنك استدعاء الدالة LifecycleOwner.getLifecycle() في Fragment أو AppCompatActivity، ثم استدعِ Lifecycle.addObserver.
  • تمّت إعادة تسمية processImage() وdetectInImage() في واجهات برمجة تطبيقات Vision API إلى process() لتحقيق الاتساق.
  • تستخدم واجهات برمجة التطبيقات للغة الطبيعية الآن المصطلح "علامة اللغة" (كما هو محدّد في معيار BCP 47) بدلاً من "رمز اللغة".
  • تمت إزالة طرق الاسترجاع في فئات xxxOptions.
  • لم تعُد طريقة getBitmap() في فئة enterImage(استبدال FirebaseVisionImage) متاحة كجزء من الواجهة المتاحة للجميع. يُرجى الرجوع إلى BitmapUtils.java في نموذج البدء السريع في حزمة تعلّم الآلة لتحويل الصورة النقطية من مدخلات مختلفة.
  • تمت إزالة FirebaseVisionImageMetadata، وما عليك سوى تمرير البيانات الوصفية للصور، مثل العرض والارتفاع وRollDegrees، إلى طرق إنشاء InsertImages.

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

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

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

بالنسبة إلى واجهة برمجة تطبيقات فحص الرمز الشريطي، هناك الآن طريقتان لتسليم النماذج:

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

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

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

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

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

سلوك عمليات التنفيذ هو نفسه.

الترجمة

  • يستخدم TranslateLanguage الآن أسماء قابلة للقراءة لثوابته (مثل ENGLISH) بدلاً من علامات اللغة (EN). وهي الآن أيضًا @StringDef، بدلاً من @IntDef، وتكون قيمة الثابت هي علامة اللغة 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) {
    ...
}

فيما يلي مثال على رمز 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 في دليل الوحدة (على مستوى التطبيق) في تطبيقك.
  • استبدل المكوّن الإضافي لتطبيق Gradle لخدمات Google في ملف 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 {
  // …
}
  • استبدل مسار classpath للمكون الإضافي Gradle لخدمات Google في ملف Gradle لمشروعك (على مستوى الجذر) (build.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.

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

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