تعديل عمليات استيراد Grale
تتطلّب حزمة تطوير البرامج (SDK) الجديدة تبعية واحدة فقط لكل واجهة من ML Kit API. ولن تحتاج إلى تحديد المكتبات الشائعة مثل firebase-ml-vision
أو firebase-ml-natural-language
تستخدم أدوات تعلّم الآلة مساحة الاسم com.google.android.gms
للمكتبات التي تعتمد على "خدمات Google Play".
واجهات Vision API
يتم تسليم النماذج المجمّعة كجزء من طلبك. يجب تنزيل النماذج الرقيقة. تتوفّر بعض واجهات برمجة التطبيقات بشكل مجمّع ورفيع، بينما تتوفّر بعض واجهات برمجة التطبيقات الأخرى في شكل واحد فقط أو الآخر:
API | مُجمَّعة | رقيق |
---|---|---|
التعرّف على النص | x (إصدار تجريبي) | x |
التعرّف على الوجوه | x | x |
مسح الرمز الشريطي | x | x |
تصنيف الصور | x | x |
رصد العناصر وتتبُّعها | x | - |
عدِّل التبعيات لمكتبات ML Kit لنظام التشغيل Android في ملف Gradle للوحدة (على مستوى التطبيق) (عادةً ما يكون app/build.gradle
) وفقًا للجداول التالية:
النماذج المجمّعة
API | الأدوات القديمة | عنصر جديد |
---|---|---|
مسح الرمز الشريطي | 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.2.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.6 |
تصنيف الصور | 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.8 |
رصد العناصر | 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.1 |
نماذج رفيعة
API | الأدوات القديمة | عنصر جديد |
---|---|---|
مسح الرمز الشريطي | com.google.firebase:firebase-ml-vision:24.0.1 | com.google.android.gms:play-services-mlkit-barcode-scanning:18.3.0 |
التعرّف على الوجوه | 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.0 |
AutoMLVision Edge
API | قطعة أثرية قديمة | عنصر جديد |
---|---|---|
التشغيل التلقائي بدون تنزيل | 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.2 |
التشغيل التلقائي مع التنزيل | 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.2
com.google.mlkit:linkfirebase:17.0.0 |
واجهات برمجة تطبيقات اللغة الطبيعية
يتم تسليم النماذج المجمّعة كجزء من طلبك. يجب تنزيل النماذج الرقيقة:
API | مُجمَّعة | رقيق |
---|---|---|
معرّف اللغة | x | x |
الرد السريع | x | x (إصدار تجريبي) |
عدِّل التبعيات لمكتبات ML Kit لنظام التشغيل Android في ملف Gradle للوحدة (على مستوى التطبيق) (عادةً ما يكون app/build.gradle
) وفقًا للجداول التالية:
النماذج المجمّعة
API | الأدوات القديمة | عنصر جديد |
---|---|---|
معرّف اللغة | 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.5 |
الرد السريع | 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.3 |
نماذج رفيعة
API | الأدوات القديمة | عنصر جديد |
---|---|---|
معرّف اللغة | 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
.
تعديل أسماء الطرق
هناك تغييرات بسيطة في الرمز:
- أداة الكشف/الماسح الضوئي/الملصق/المترجم... تم تغيير مثيل. أصبح لكل ميزة الآن نقطة دخول خاصة بها. على سبيل المثال: المسح الضوئي للرموز الشريطية والتعرّف على النص وتصنيف الصور والترجمة... يتم استبدال المكالمات إلى خدمة 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 APIs إلىprocess()
للحفاظ على الاتّساق. - تستخدم واجهات برمجة تطبيقات اللغة الطبيعية الآن مصطلح "علامة اللغة" (على النحو المحدّد في معيار BCP 47) بدلاً من "رمز اللغة".
- تمت إزالة طرق Getter في فئات xxxOptions.
- لم يعُد من الممكن استخدام طريقة getBitmap() في فئة EnterImage(استبدال
FirebaseVisionImage
) كجزء من الواجهة العامة. يُرجى الرجوع إلىBitmapUtils.java
في نموذج البدء السريع في ML Kit لتحويل الصورة النقطية من إدخالات مختلفة. - تمت إزالة FirebaseVisionImageMetadata، ويمكنك فقط تمرير البيانات الوصفية للصور مثل العرض والارتفاع الدوران (دوران درجات الحرارة) وتنسيقه في أساليب إنشاء واجهة InImages.
في ما يلي بعض الأمثلة على طرق 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() )
New
// 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());
New
// 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 Inspect API، هناك الآن طريقتان لتسليم النماذج:
- من خلال "خدمات Google Play" المعروفة أيضًا باسم "رقيق" (يُنصَح به)، يقلّل هذا الوضع من حجم التطبيق وتتم مشاركة النموذج بين التطبيقات. ومع ذلك، سيحتاج المطوّرون إلى التأكّد من تنزيل النموذج قبل استخدامه للمرة الأولى.
- باستخدام حزمة APK لتطبيقك (المعروفة أيضًا باسم "مجمّعة"): يؤدي ذلك إلى زيادة حجم التطبيق، ولكنّه يعني أن النموذج يمكن استخدامه على الفور.
تختلف عمليتا التنفيذ قليلاً، مع وجود بعض التحسينات في الإصدار "المُجمَّع" مقارنةً بالنسخة "الرقيقة". يمكن العثور على تفاصيل حول هذه الاختلافات في إرشادات Barcode Inspect API.
التعرّف على الوجوه
في ما يخصّ واجهة برمجة التطبيقات Face Detection API، هناك طريقتان لتسليم النماذج:
- من خلال "خدمات Google Play" المعروفة أيضًا باسم "رقيق" (يُنصَح به)، يقلّل هذا الوضع من حجم التطبيق وتتم مشاركة النموذج بين التطبيقات. ومع ذلك، سيحتاج المطوّرون إلى التأكّد من تنزيل النموذج قبل استخدامه للمرة الأولى.
- باستخدام حزمة APK لتطبيقك (المعروفة أيضًا باسم "مجمّعة"): يؤدي ذلك إلى زيادة حجم تنزيل التطبيق، ولكنّه يعني أن النموذج يمكن استخدامه على الفور.
ويكون سلوك عمليات التنفيذ متماثلاً.
الترجمة
يستخدم
TranslateLanguage
الآن أسماء يمكن قراءتها لثوابته (مثلENGLISH
) بدلاً من علامات اللغة (EN
). وهي الآن أيضًا @StringDef، بدلاً من @IntDef، وقيمة الثابت هي علامة اللغة BCP 47 المطابقة.إذا كان تطبيقك يستخدم خيار حالة التنزيل "غير نشِط للجهاز"، يُرجى العلم أنّه تمت إزالة هذا الخيار ولا يمكن استخدامه بعد ذلك. سيظلّ بإمكانك استخدام خيار "شحن الجهاز" إذا كنت تريد سلوكًا أكثر تعقيدًا، يمكنك تأخير طلب
RemoteModelManager.download
بأسلوبك الخاص.
تصنيف صور AutoML
إذا كان تطبيقك يستخدم خيار حالة التنزيل "الجهاز غير نشط"، يُرجى العلم أنّه قد تمت إزالة هذا الخيار ولا يمكن استخدامه بعد ذلك. لا يزال بإمكانك استخدام خيار "شحن الجهاز".
إذا كنت تريد سلوكًا أكثر تعقيدًا، يمكنك تأخير طلب
RemoteModelManager.download
استنادًا إلى منطقك الخاص.
رصد العناصر وتتبّعها
إذا كان تطبيقك يستخدم ميزة رصد العناصر باستخدام التصنيف التقريبي، يُرجى العلم بأنّ حزمة تطوير البرامج (SDK) الجديدة قد غيّرت طريقة عرض فئة التصنيف للعناصر التي تم رصدها.
يتم عرض فئة التصنيف كمثيل لـ DetectedObject.Label
بدلاً من عدد صحيح. ويتضمّن التصنيف PredefinedCategory
جميع الفئات المحتمَلة للمصنِّف التقريبي.
في ما يلي مثال على رمز Kotlin القديم والجديد:
الإصدار القديم
if (object.classificationCategory == FirebaseVisionObject.CATEGORY_FOOD) { ... }
New
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) { ... }
New
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.
- ولن تستخدِم سوى واجهات برمجة التطبيقات على الجهاز فقط.
- لا تستخدم عرض النماذج.
وفي هذه الحالة، يمكنك إزالة تبعيات Firebase بعد عملية نقل البيانات. يُرجى اتّباع الخطوات التالية:
- أزِل ملف الإعداد لمنصة Firebase من خلال حذف ملف الإعداد google-services.json في دليل الوحدة (على مستوى التطبيق) في تطبيقك.
- استبدِل المكوّن الإضافي لنظام Gradle المتوافق مع خدمات Google في ملف 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 { // … }
- استبدل مسار فئة المكوّن الإضافي لبرنامج Gradle بخدمات Google في ملف 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" وفقًا instructions على موقع دعم Firebase.
الحصول على المساعدة
إذا واجهت أيّ مشاكل، يُرجى زيارة صفحة المنتدى حيث نوضّح القنوات المتاحة للتواصل معنا