تعديل عمليات استيراد Gradle
لا تتطلّب حزمة تطوير البرامج (SDK) الجديدة سوى عنصر واحد لكل واجهة برمجة تطبيقات في 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 | - |
عدِّل العناصر التابعة لمكتبات 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 |
واجهات برمجة التطبيقات Natural Language API
يتم تقديم النماذج المجمّعة كجزء من تطبيقك. يجب تنزيل النماذج النحيفة:
واجهة برمجة التطبيقات | مُجمَّعة | رقيق |
---|---|---|
معرّف اللغة | 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
.
تعديل أسماء طرق الدفع
تتضمّن هذه العملية تغييرات بسيطة على الرمز:
- تم تغيير إنشاء مثيل لأداة الكشف/المسح الضوئي/التصنيف/الترجمة… أصبح لكل ميزة الآن نقطة دخول خاصة بها. على سبيل المثال: 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 API الآن المصطلح "علامة اللغة" (كما هو محدّد في معيار BCP 47) بدلاً من "رمز اللغة".
- تمت إزالة طرق Getter في فئات xxxOptions.
- لم يعُد بالإمكان استخدام طريقة getBitmap() في فئة InputImage(التي تحلّ محلّ
FirebaseVisionImage
) كجزء من الواجهة العامة. يُرجى الرجوع إلىBitmapUtils.java
في نموذج التشغيل السريع في ML Kit للحصول على صورة نقطية تم تحويلها من مدخلات مختلفة. - تمت إزالة FirebaseVisionImageMetadata، ويمكنك فقط تمرير البيانات الوصفية للصور، مثل العرض والارتفاع وrotationDegrees والتنسيق، إلى طرق إنشاء 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 لأداة Gradle في ملف Gradle للوحدة (على مستوى التطبيق) (عادةً app/build.gradle) بالمكوّن الإضافي "أداة مطابقة الإصدارات الدقيقة":
قبل
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 لأداة Gradle في ملف Gradle الخاص بمشروعك (على مستوى الجذر) (build.gradle) بمسار فئة المكوّن الإضافي "أداة مطابقة الإصدارات الدقيقة":
قبل
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.
الحصول على المساعدة
إذا واجهت أي مشاكل، يُرجى الاطّلاع على صفحة المنتدى التي نوضّح فيها القنوات المتاحة للتواصل معنا.