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

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

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

واجهات Vision API

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

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

عدِّل التبعيات لمكتبات ML Kit لنظام التشغيل Android في ملف 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.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

نماذج رفيعة

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

APIقطعة أثرية قديمةعنصر جديد
التشغيل التلقائي بدون تنزيل 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.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

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

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

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

عدِّل التبعيات لمكتبات ML Kit لنظام التشغيل Android في ملف 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.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

نماذج رفيعة

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

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

New

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

New

// 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 Inspect API، هناك الآن طريقتان لتسليم النماذج:

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

تختلف عمليتا التنفيذ قليلاً، مع وجود بعض التحسينات في الإصدار "المُجمَّع" مقارنةً بالنسخة "الرقيقة". يمكن العثور على تفاصيل حول هذه الاختلافات في إرشادات Barcode Inspect 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) {
    ...
}

New

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) {
    ...
}

New

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

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

  • أزِل ملف الإعداد لمنصة Firebase من خلال حذف ملف الإعداد google-services.json في دليل الوحدة (على مستوى التطبيق) في تطبيقك.
  • استبدِل المكوّن الإضافي لنظام Gradle المتوافق مع خدمات Google في ملف 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 {
  // …
}
  • استبدل مسار فئة المكوّن الإضافي لبرنامج Gradle بخدمات Google في ملف 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" وفقًا instructions على موقع دعم Firebase.

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

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