تعديل عمليات استيراد Gradle
لا تتطلّب حزمة SDK الجديدة سوى عنصر واحد للاعتماد لكل واجهة برمجة تطبيقات ML Kit. لست بحاجة إلى تحديد مكتبات
شائعة مثل firebase-ml-vision
أو firebase-ml-natural-language
.
تستخدِم ML Kit مساحة الاسم com.google.android.gms
للمكتبات التي تعتمد على "خدمات Google Play".
واجهات برمجة تطبيقات Vision
يتم عرض النماذج المجمّعة كجزء من تطبيقك. يجب تنزيل النماذج البسيطة. تتوفّر بعض واجهات برمجة التطبيقات بتنسيق مُجمَّع وخفيف، والبعض الآخر بتنسيق واحد فقط أو الآخر:
واجهة برمجة التطبيقات | مُجمَّعة | رقيق |
---|---|---|
التعرّف على النص | x (إصدار تجريبي) | x |
التعرّف على الوجوه | x | x |
مسح الرموز الشريطية ضوئيًا | x | x |
تصنيف الصور | x | x |
رصد الأجسام وتتبُّعها | x | - |
عدِّل الملحقات لمكتبات ML Kit لنظام التشغيل Android في ملف Gradle للوحدة (على مستوى
التطبيق) (عادةً app/build.gradle
) وفقًا للجداول التالية:
النماذج المجمّعة
واجهة برمجة التطبيقات | العناصر القديمة | عنصر جديد |
---|---|---|
مسح الرموز الشريطية ضوئيًا | 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
com.google.mlkit:linkfirebase:17.0.0 |
واجهات برمجة التطبيقات الخاصة بمعالجة اللغة الطبيعية
يتم عرض النماذج المجمّعة كجزء من تطبيقك. يجب تنزيل النماذج البسيطة:
واجهة برمجة التطبيقات | مُجمَّعة | رقيق |
---|---|---|
رقم تعريف اللغة | x | x |
الرد السريع | x | x (إصدار تجريبي) |
عدِّل الملحقات لمكتبات ML Kit لنظام التشغيل Android في ملف Gradle للوحدة (على مستوى
التطبيق) (عادةً app/build.gradle
) وفقًا للجداول التالية:
النماذج المجمّعة
واجهة برمجة التطبيقات | العناصر القديمة | عنصر جديد |
---|---|---|
رقم تعريف اللغة | 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.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
في أسماء الحِزم.
تعديل أسماء الطرق
هناك تغييرات بسيطة على الرمز:
- تم تغيير عملية إنشاء مثيل لـ Detector/scanner/labeler/translator… أصبحت لكل ميزة الآن نقطة دخول خاصة بها. على سبيل المثال: BarcodeScanning وTextRecognition وImageLabeling وTranslation…. يتم استبدال طلبات البيانات من خدمة 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()
للحفاظ على الاتّساق. - تستخدِم واجهات برمجة التطبيقات Natural Language API الآن العبارة "علامة اللغة" (كما هو محدّد في معيار BCP 47) بدلاً من "رمز اللغة".
- تمّت إزالة طرق الحصول على البيانات في فئات xxxOptions.
- لم تعُد طريقة getBitmap() في فئة InputImage(التي تحلّ محل
FirebaseVisionImage
) متاحة كجزء من الواجهة العامة. يُرجى الرجوع إلىBitmapUtils.java
في نموذج البدء السريع لمجموعة ML Kit لتحويل الصورة النقطية من مدخلات مختلفة. - تمت إزالة FirebaseVisionImageMetadata، ويمكنك ببساطة تمرير البيانات الوصفية للصورة، مثل العرض والارتفاع ودرجة الدوران والتنسيق، إلى طرق إنشاء InputImages.
في ما يلي بعض الأمثلة على طرق 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 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());
جديد
// 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());
التغييرات المتعلّقة بواجهة برمجة التطبيقات
مسح الرموز الشريطية ضوئيًا
بالنسبة إلى Barcode Scanning API، تتوفّر الآن طريقتان لإرسال النماذج:
- من خلال "خدمات Google Play"، والتي يُشار إليها أيضًا باسم "النموذج البسيط" (إجراء يُنصح به): يقلل هذا الإجراء من حجم التطبيق وتتم مشاركة النموذج بين التطبيقات. ومع ذلك، على المطوّرين التأكّد من تنزيل النموذج قبل استخدامه لأول مرة.
- باستخدام حزمة APK الخاصة بتطبيقك، والتي يُشار إليها أيضًا باسم "الحزمة": يؤدي ذلك إلى زيادة حجم التطبيق، ولكنّه يعني أنّ النموذج قابل للاستخدام على الفور.
يختلف الأسلوبان قليلاً، إذ يتضمّن الإصدار "المجمَّع" عددًا من التحسينات مقارنةً بالإصدار "الخفيف". يمكن العثور على تفاصيل عن هذه الاختلافات في إرشادات Barcode Scanning API.
التعرّف على الوجوه
بالنسبة إلى Face Detection API، هناك طريقتان لإرسال النماذج:
- من خلال "خدمات Google Play"، والتي يُشار إليها أيضًا باسم "النموذج البسيط" (إجراء يُنصح به): يقلل هذا الإجراء من حجم التطبيق وتتم مشاركة النموذج بين التطبيقات. ومع ذلك، على المطوّرين التأكّد من تنزيل النموذج قبل استخدامه لأول مرة.
- باستخدام حزمة APK الخاصة بتطبيقك، والتي يُشار إليها أيضًا باسم "الحزمة": يؤدي ذلك إلى زيادة حجم تنزيل التطبيق، ولكن يعني ذلك أنّه يمكن استخدام النموذج على الفور.
يكون سلوك عمليات التنفيذ متطابقًا.
الترجمة
يستخدم
TranslateLanguage
الآن أسماء قابلة للقراءة لثوابته (مثلENGLISH
) بدلاً من علامات اللغة (EN
). وهي الآن أيضًا @StringDef بدلاً من @IntDef، وقيمة الثوابت هي علامة لغة BCP 47 المطابقة.إذا كان تطبيقك يستخدم خيار "حالة الجهاز في وضع السكون" لتحديد شرط التنزيل، يُرجى العِلم أنّه تمت إزالة هذا الخيار ولا يمكن استخدامه بعد الآن. سيظل بإمكانك استخدام خيار "شحن الجهاز". إذا كنت تريد سلوكًا أكثر تعقيدًا، يمكنك تأخير استدعاء
RemoteModelManager.download
وفقًا لمنطقك الخاص.
AutoML Image Labeling
إذا كان تطبيقك يستخدم خيار "حالة الجهاز في وضع السكون" لتحديد شرط التنزيل، يُرجى العِلم أنّه تمت إزالة هذا الخيار ولا يمكن استخدامه بعد الآن. سيظل بإمكانك استخدام خيار "شحن الجهاز".
إذا كنت تريد سلوكًا أكثر تعقيدًا، يمكنك تأخير استدعاء
RemoteModelManager.download
وفقًا لمنطقك الخاص.
رصد الأجسام وتتبُّعها
إذا كان تطبيقك يستخدِم ميزة "اكتشاف الأجسام" مع التصنيف التقريبي، يُرجى العِلم أنّه تم تغيير طريقة عرض فئة التصنيف للأشياء التي يتم رصدها في حزمة 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 ML Kit هو مكوّن Firebase الوحيد الذي تستخدمه.
- استخدام واجهات برمجة التطبيقات على الجهاز فقط
- لا تستخدِم عرض النماذج.
في هذه الحالة، يمكنك إزالة تبعيات Firebase بعد نقل البيانات. اتبع الخطوات التالية:
- أزِل ملف إعدادات Firebase من خلال حذف ملف الإعدادات google-services.json في دليل الوحدة (على مستوى التطبيق) في تطبيقك.
- استبدِل المكوّن الإضافي لـ Google Services Gradle في ملف Gradle للوحدة (على مستوى التطبيق) (عادةً app/build.gradle) بالمكوّن الإضافي Strict Version Matcher:
قبل
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 { // … }
- استبدِل مسار فئة تحميل المكوّن الإضافي لـ Google Services Gradle في ملف Gradle (build.gradle) الخاص بمشروعك (على مستوى الجذر) بمسار المكوّن الإضافي Strict Version Matcher:
قبل
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 وفقًا لالتعليمات الواردة في موقع دعم Firebase الإلكتروني.
الحصول على المساعدة
إذا واجهت أي مشاكل، يُرجى الانتقال إلى صفحة المنتدى التي نوضّح فيها القنوات المتاحة للتواصل معنا.