يشرح هذا الدليل كيفية نقل البيانات من "حزمة تعلّم الآلة" في Firebase لنظام التشغيل Android.
تعديل عمليات استيراد Gradle
تتطلّب حزمة تطوير البرامج (SDK) لـ حزمة تعلّم الآلة تبعية واحدة فقط لكل واجهة برمجة تطبيقات في حزمة تعلّم الآلة. ليس عليك تحديد المكتبات الشائعة، مثل firebase-ml-vision أو firebase-ml-natural-language. تستخدم حزمة تعلّم الآلة مساحة الاسم com.google.android.gms للمكتبات التي تعتمد على "خدمات Google Play".
واجهات برمجة التطبيقات Vision
يتم تقديم النماذج المجمّعة كجزء من تطبيقك. يجب تنزيل النماذج البسيطة. تتوفّر بعض واجهات برمجة التطبيقات في كل من الشكل المجمّع والمبسّط، والبعض الآخر يتوفّر فقط في شكل واحد أو آخر:
| واجهة برمجة التطبيقات | مُجمَّعة | رقيق |
|---|---|---|
| التعرّف على النص | 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.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: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... يتم استبدال الطلبات المرسَلة إلى خدمة FirebasegetInstance()بطلبات مرسَلة إلى طريقة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) بدلاً من "رمز اللغة".
- تمت إزالة طرق 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"، المعروفة أيضًا باسم "thin" (يُنصح بها): يقلّل هذا الخيار من حجم التطبيق وتتم مشاركة النموذج بين التطبيقات. ومع ذلك، سيحتاج المطوّرون إلى التأكّد من تنزيل النموذج قبل استخدامه لأول مرة.
- مع حزمة APK الخاصة بتطبيقك، أي "مجمّعة": يؤدي ذلك إلى زيادة حجم التطبيق، ولكنّه يعني أنّ النموذج قابل للاستخدام على الفور.
تختلف عمليتا التنفيذ قليلاً، حيث يتضمّن الإصدار "المجمّع" عددًا من التحسينات مقارنةً بالإصدار "المبسّط". يمكن العثور على تفاصيل حول هذه الاختلافات في إرشادات واجهة برمجة التطبيقات لمسح الرمز الشريطي.
التعرّف على الوجوه
بالنسبة إلى Face Detection API، يمكن تقديم النماذج بطريقتَين:
- من خلال "خدمات Google Play"، المعروفة أيضًا باسم "thin" (يُنصح بها): يقلّل هذا الخيار من حجم التطبيق وتتم مشاركة النموذج بين التطبيقات. ومع ذلك، سيحتاج المطوّرون إلى التأكّد من تنزيل النموذج قبل استخدامه لأول مرة.
- مع حزمة APK الخاصة بتطبيقك، والمعروفة أيضًا باسم "مجمّعة": يؤدي ذلك إلى زيادة حجم تنزيل التطبيق، ولكنّه يعني أنّ النموذج قابل للاستخدام على الفور.
سلوك عمليات التنفيذ هو نفسه.
الترجمة
- يستخدم
TranslateLanguageالآن أسماءً قابلة للقراءة لثوابته (مثلENGLISH) بدلاً من علامات اللغة (EN). كما أنها الآن@StringDef، بدلاً من@IntDef، وقيمة الثابت هي علامة لغة BCP 47 المطابقة.
تصنيف الصور باستخدام تعلّم الآلة التلقائي (ميزة متوقّفة نهائيًا)
تم إيقاف ميزة تنزيل النماذج المخصّصة لتصنيف الصور باستخدام 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 { // … }
- استبدِل مسار فئة المكوّن الإضافي Gradle لخدمات Google في ملف 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 الإلكتروني.
الحصول على المساعدة
إذا واجهت أي مشاكل، يُرجى الاطّلاع على صفحة المنتدى حيث نوضّح القنوات المتاحة للتواصل معنا.