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

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

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

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

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

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عنصر قديمعنصر جديد
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

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

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

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

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

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

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 في دليل الوحدة (على مستوى التطبيق) في تطبيقك.
  • استبدل المكوّن الإضافي لتطبيق 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" وفقًا instructions على الموقع الإلكتروني لدعم Firebase.

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

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