يوضّح هذا الدليل كيفية نقل البيانات من حزمة تعلّم الآلة لـ Firebase على Android.
تعديل عمليات استيراد Gradle
تتطلّب حزمة تطوير البرامج (SDK) في ML Kit عنصرًا واحدًا فقط لكل واجهة برمجة تطبيقات في ML Kit. لست بحاجة إلى تحديد المكتبات الشائعة، مثل firebase-ml-vision أو firebase-ml-natural-language. تستخدم حزمة تطوير البرامج (SDK) الخاصة بخدمة ML Kit com.google.android.gms
مساحة الاسم للمكتبات التي تعتمد على "خدمات Google Play".
واجهات Vision API
يتم تسليم النماذج المجمّعة كجزء من تطبيقك. يجب تنزيل النماذج النحيفة. تتوفّر بعض واجهات برمجة التطبيقات في شكل حزمة وفي شكل بسيط، بينما يتوفّر البعض الآخر في شكل واحد فقط:
| واجهة برمجة التطبيقات | مُجمَّعة | رقيق |
|---|---|---|
| التعرّف على النص | x (إصدار تجريبي) | x |
| التعرّف على الوجوه | x | x |
| مسح الرموز الشريطية ضوئيًا | x | x |
| تصنيف الصور | x | x |
| رصد الأجسام وتتبُّعها | x | - |
عدِّل العناصر التابعة لحزمة تعلّم الآلة على Android في ملف Gradle الخاص بالوحدة (على مستوى التطبيق) (عادةً app/build.gradle.kts) وفقًا للجداول التالية:
النماذج المُجمَّعة
| واجهة برمجة التطبيقات | العناصر القديمة | عنصر جديد |
|---|---|---|
| مسح الرموز الشريطية ضوئيًا | 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
لاستضافة النماذج المخصّصة وتنزيلها، عليك نقل نماذجك إلى Cloud Storage وإضافة منطق التنزيل في تطبيقك لتحميلها باستخدام LocalModel. للاطّلاع على التفاصيل، يُرجى الرجوع إلى
دليل نقل البيانات من Firebase ML إلى Cloud Storage. |
واجهات برمجة التطبيقات الخاصة باللغة الطبيعية
يتم تسليم النماذج المجمّعة كجزء من تطبيقك. يجب تنزيل النماذج الخفيفة:
| واجهة برمجة التطبيقات | مُجمَّعة | رقيق |
|---|---|---|
| معرّف اللغة | x | x |
| الرد السريع | x | x (إصدار تجريبي) |
عدِّل العناصر التابعة لحزمة تعلّم الآلة على Android في ملف Gradle الخاص بالوحدة (على مستوى التطبيق) (عادةً app/build.gradle.kts) وفقًا للجداول التالية:
النماذج المُجمَّعة
| واجهة برمجة التطبيقات | العناصر القديمة | عنصر جديد |
|---|---|---|
| معرّف اللغة | 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.LocalModel يجب تنزيل النموذج يدويًا. تم إيقاف النماذج المستضافة على Firebase نهائيًا. للاطّلاع على التفاصيل، يُرجى الرجوع إلى دليل نقل البيانات من Firebase ML إلى Cloud Storage. |
| 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... يتم استبدال طلبات الخدمةgetInstance()في Firebase بطلبات إلى طريقة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()لضمان الاتساق. - تستخدم واجهات برمجة التطبيقات Natural Language الآن المصطلح "علامة اللغة" (كما هو محدّد في معيار BCP 47) بدلاً من "رمز اللغة".
- تمت إزالة طرق Getter في فئات
xxxOptions. - لم تعُد طريقة
getBitmap()في فئةInputImage(التي تحلّ محلّFirebaseVisionImage) غير متاحة كجزء من الواجهة المتاحة للجميع. راجِعBitmapUtils.javaفي نموذج التشغيل السريع في حزمة تعلّم الآلة للحصول على صورة نقطية تم تحويلها من مدخلات مختلفة. - تمت إزالة
FirebaseVisionImageMetadata، ويمكنك الآن تمرير البيانات الوصفية للصور، مثلwidthوheightوrotationDegreesوformat، إلى طرق إنشاءInputImage.
في ما يلي بعض الأمثلة على طرق 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 lifecycle 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 lifecycle 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 المطابقة.
خدمة "تصنيف الصور" من AutoML (متوقّفة نهائيًا)
تم إيقاف إمكانية تنزيل النماذج المخصّصة لتصنيف الصور باستخدام AutoML نهائيًا، وسيتم إيقافها في 15 يونيو 2027. عليك استخدام Cloud Storage لاستضافة النماذج وإضافة منطق التنزيل إلى تطبيقك لتنزيل النماذج بدلاً من ذلك. للحصول على التفاصيل، يُرجى الاطّلاع على دليل نقل البيانات من Firebase ML إلى Cloud Storage.
رصد الأجسام وتتبُّعها
إذا كان تطبيقك يستخدم ميزة رصد العناصر مع التصنيف التقريبي، يُرجى العِلم أنّ حزمة 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 بعد عملية النقل. اتّبِع الخطوات التالية:
- أزِل ملف إعدادات Firebase عن طريق حذف ملف الإعدادات
google-services.jsonفي دليل الوحدة (على مستوى التطبيق) لتطبيقك. - استبدِل المكوّن الإضافي في خدمات Google لنظام Gradle في ملف Gradle الخاص بالوحدة (على مستوى التطبيق) (عادةً
app/build.gradle.kts) بالمكوّن الإضافي Strict Version Matcher:
قبل
plugins { id("com.android.application") id("com.google.gms.google-services") } android { // … }
بعد
plugins { id("com.android.application") id("com.google.android.gms.strict-version-matcher-plugin") } android { // … }
- استبدِل مسار فئة المكوّن الإضافي لخدمات Google في Gradle في ملف Gradle الخاص بمشروعك (على مستوى الجذر) (
build.gradle.kts) بمسار فئة المكوّن الإضافي Strict Version Matcher:
قبل
buildscript { dependencies { // ... classpath("com.google.gms:google-services:4.3.3") } }
بعد
buildscript { dependencies { // ... classpath("com.google.android.gms:strict-version-matcher-plugin:1.2.1") } }
احذف تطبيق Firebase الخاص بك من خلال وحدة تحكّم Firebase وفقًا للتعليمات الواردة في موقع الدعم الخاص بمنصة Firebase.
الحصول على المساعدة
إذا واجهت أي مشاكل، يُرجى الاطّلاع على صفحة المنتدى حيث نوضّح القنوات المتاحة للتواصل معنا.