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

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

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

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

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

واجهة برمجة التطبيقاتمجمعةرقيق
التعرّف على النص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.0.2
تجميل الوجه 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.5
تصنيف الصور 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.7
اكتشاف الكائنات 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.0

طُرز رقيقة

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

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:16.0.0-beta4
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:16.0.0-beta4
com.google.mlkit:linkfirebase:17.0.0

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

يتم تسليم النماذج المجمّعة كجزء من تطبيقك. تأتي جميع واجهات برمجة التطبيقات للغات كنماذج مجمّعة. في ما يلي أسماء العناصر الجديدة:

واجهة برمجة التطبيقاتالعناصر القديمةعنصر جديد
معرّف اللغة com.google.firebase:firebase-ml-organic-language:22.0.0
com.google.firebase:firebase-ml-organic-language-language-id-model:20.0.7
com.google.mlkit:language-id:17.0.4
رد سريع com.google.firebase:firebase-ml-natural-language:22.0.0
com.google.firebase:firebase-ml-organic-language-smart-reply-model:20.0.7
com.google.mlkit:smart-reply:17.0.2

تعديل أسماء الصفوف

إذا ظهر صفك في هذا الجدول، أدخِل التغيير المُشار إليه:

الدرجة القديمةصف جديد
com.google.firebase.ml.common.FirebaseMLException com.google.mlkit.common.MlKitException
com.google.firebase.ml. بشكل شائع.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.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() عند عدم استخدام هذه العناصر بعد الآن. إذا كنت تستخدمها في تجزئة أو AppCompatActivity، هناك طريقة سهلة لإجراء ذلك وهي تسمية Lifecycleowner.getLifecycle() على جزء من التجزئة أو AppCompatActivity، ثم استدعاء Lifecycle.addObserver
  • تمت إعادة تسمية processImage() وdetectInImage() في واجهات برمجة التطبيقات للرؤية إلى process() للحفاظ على الاتساق.
  • تستخدم واجهات برمجة التطبيقات اللغوية الطبيعية الآن عبارة "علامة اللغة" (على النحو المحدّد في معيار BCP 47) بدلاً من "رمز اللغة".
  • تمت إزالة طرق Getter في فئات xxxOptions.
  • لم تعد طريقة getBitmap() في فئةInputImage(لاستبدال FirebaseVisionImage) متاحة كجزء من الواجهة العامة. يُرجى الرجوع إلى BitmapUtils.java في نموذج البدء السريع لإصدار تعلّم الآلة لتحويل الصور المصغّرة من إدخالات مختلفة.
  • تمت إزالة FirebaseVisionImageMetadata، ويمكنك فقط تمرير البيانات الوصفية للصور، مثل العرض والارتفاع والتدوير والتنظيم والتنسيق إلى أساليب إنشاء الإدخال Images.

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

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

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

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

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

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

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

بالنسبة إلى واجهة برمجة التطبيقات الخاصة بميزة "التعرّف على الوجوه"، يمكن تسليم النماذج بطريقتين:

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

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

  • أزِل ملف إعداد Firebase عن طريق حذف ملف إعداد google-services.json في الدليل (على مستوى التطبيق) للوحدة التنظيمية لتطبيقك.
  • استبدِل مكوِّن Gradd الإضافي في Google Services في وحدتك (على مستوى التطبيق) (عادةً ما يكون app/build.gradle) واستخدِم المكوِّن الإضافي tiff Edition في "مُطابق الإصدار":

قبل

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 {
  // …
}
  • استبدِل مسار Grall في المكوّن الإضافي من Google Services في مشروعك (على مستوى الجذر) (ملفالإصدار.)

قبل

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.

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

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