يوضّح هذا الدليل كيفية نقل البيانات من حزمة تعلّم الآلة لنظام Android في Firebase.
تعديل عمليات استيراد Gradle
لا تتطلّب حزمة تعلّم الآلة SDK سوى اعتمادية واحدة لكل واجهة برمجة تطبيقات في حزمة تعلّم الآلة. ولست بحاجة إلى تحديد المكتبات الشائعة، مثل firebase-ml-vision أو firebase-ml-natural-language. تستخدم حزمة تعلّم الآلة مساحة الاسم 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
| واجهة برمجة التطبيقات | العنصر القديم | العنصر الجديد |
|---|---|---|
| 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
To host and download custom models, move your models to Cloud Storage and add download logic in your app to load them using LocalModel. For details,
see the
Firebase ML to Cloud Storage migration guide. |
واجهات برمجة التطبيقات Natural Language APIs
يتم تسليم النماذج المجمَّعة كجزء من تطبيقك. ويجب تنزيل النماذج الرقيقة:
| واجهة برمجة التطبيقات | مُجمَّعة | رقيق |
|---|---|---|
| معرّف اللغة | 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 Requires manual download. Firebase-hosted remote models are deprecated. For details, see the Firebase ML to Cloud Storage migration guide. |
| 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 APIs الآن المصطلح "علامة اللغة" (كما هو محدّد بموجب معيار 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 الإلكتروني.
الحصول على المساعدة
إذا واجهتك أي مشاكل، يُرجى الاطّلاع على صفحة المنتدى التي نوضّح فيها القنوات المتاحة للتواصل معنا.