يوضّح هذا الدليل كيفية نقل البيانات من حزمة تعلّم الآلة لـ Firebase على Android.
تعديل عمليات استيراد Gradle
تتطلّب حزمة تطوير البرامج (SDK) في ML Kit عنصرًا واحدًا فقط لكل واجهة برمجة تطبيقات في ML Kit، ولا تحتاج إلى تحديد المكتبات الشائعة، مثل firebase-ml-vision أو firebase-ml-natural-language، لأنّ ML Kit تستخدم مساحة الاسم com.google.android.gms للمكتبات التي تعتمد على "خدمات Google Play".
Vision APIs
يتم توفير النماذج المجمّعة كجزء من تطبيقك، بينما يجب تنزيل النماذج الخفيفة. وتتوفّر بعض واجهات برمجة التطبيقات في كل من النماذج المجمّعة والخفيفة، بينما تتوفّر واجهات أخرى في أحد النوعين فقط:
| واجهة برمجة التطبيقات | مُجمَّعة | رقيق |
|---|---|---|
| التعرّف على النص | 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. |
واجهات برمجة التطبيقات Natural Language API
يتم توفير النماذج المجمّعة كجزء من تطبيقك، بينما يجب تنزيل النماذج الخفيفة:
| واجهة برمجة التطبيقات | مُجمَّعة | رقيق |
|---|---|---|
| معرّف اللغة | 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 API إلى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 Image Labeling (متوقّفة نهائيًا)
تم إيقاف نهائيًا إمكانية تنزيل النماذج المخصّصة لتصنيف الصور باستخدام 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.
الحصول على المساعدة
إذا واجهت أي مشاكل، يُرجى الاطّلاع على صفحة المنتدى حيث نوضّح القنوات المتاحة للتواصل معنا.