עדכון ייבוא של gradle
ערכת ה-SDK החדשה דורשת רק תלות אחת לכל ML Kit API. אין צורך לציין ספריות נפוצות כמו firebase-ml-vision
או firebase-ml-natural-language
.
ML Kit משתמש במרחב השמות com.google.android.gms
לספריות שתלויות ב-Google Play Services.
Vision APIs
מודלים מקובצים מועברים כחלק מהאפליקציה. צריך להוריד מודלים רזים. חלק מה-API זמינים גם כחבילה וגם כ-API דק, ואחרים זמינים רק באחת מהצורות האלה:
API | בחבילה | דק |
---|---|---|
זיהוי טקסט | x (בטא) | x |
זיהוי פנים | x | x |
סריקת ברקודים | x | x |
הוספת תוויות לתמונות | x | x |
זיהוי ומעקב אחרי אובייקטים | x | - |
מעדכנים את יחסי התלות של ספריות ML Kit Android בקובץ Gradle של המודול (ברמת האפליקציה) (בדרך כלל app/build.gradle
) בהתאם לטבלאות הבאות:
מודלים בחבילה
API | תוצרים ישנים | פריט מידע חדש שנוצר בתהליך פיתוח (Artifact) |
---|---|---|
סריקת ברקודים | 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 |
מודלים דקים
API | תוצרים ישנים | פריט מידע חדש שנוצר בתהליך פיתוח (Artifact) |
---|---|---|
סריקת ברקודים | 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
API | פריט ישן | פריט מידע חדש שנוצר בתהליך פיתוח (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
com.google.mlkit:linkfirebase:17.0.0 |
ממשקי Natural Language API
מודלים מקובצים מועברים כחלק מהאפליקציה. צריך להוריד מודלים דקים:
API | בחבילה | דק |
---|---|---|
מזהה שפה | x | x |
תשובה מהירה | x | x (בטא) |
מעדכנים את יחסי התלות של ספריות ML Kit Android בקובץ Gradle של המודול (ברמת האפליקציה) (בדרך כלל app/build.gradle
) בהתאם לטבלאות הבאות:
מודלים בחבילה
API | תוצרים ישנים | פריט מידע חדש שנוצר בתהליך פיתוח (Artifact) |
---|---|---|
מזהה שפה | 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 |
מודלים דקים
API | תוצרים ישנים | פריט מידע חדש שנוצר בתהליך פיתוח (Artifact) |
---|---|---|
מזהה שפה | 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… שיחות לשירות 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. - אפשר לסגור את כל ה-handle (גלאי, סורק, מתייג, מתרגם וכו'). חשוב לוודא שהמערכת קוראת לשיטה
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());
שינויים ספציפיים ל-API
סריקת ברקודים
ב-Barcode Scanning API, יש עכשיו שתי דרכים להעברת המודלים:
- באמצעות Google Play Services, aka 'thin' (מומלץ) – האפשרות הזו מקטינה את גודל האפליקציה, והמודל משותף בין האפליקציות. עם זאת, מפתחים יצטרכו לוודא שהמודל יורד לפני שהם משתמשים בו בפעם הראשונה.
- עם קובץ ה-APK של האפליקציה, כלומר 'בתוך החבילה' – כך גודל האפליקציה גדל, אבל המודל מוכן לשימוש מיידי.
שתי ההטמעות שונות מעט זו מזו, ובגרסה 'המאוגדת' יש כמה שיפורים לעומת הגרסה 'הדקה'. פרטים על ההבדלים האלה מופיעים בהנחיות לשימוש ב-Barcode Scanning API.
זיהוי פנים
יש שתי דרכים להעברת המודלים של Face Detection API:
- באמצעות Google Play Services, aka 'thin' (מומלץ) – האפשרות הזו מקטינה את גודל האפליקציה, והמודל משותף בין האפליקציות. עם זאת, מפתחים יצטרכו לוודא שהמודל יורד לפני שהם משתמשים בו בפעם הראשונה.
- עם חבילת ה-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.
- אתם משתמשים רק בממשקי API במכשיר.
- אתם לא משתמשים בהצגת מודלים.
אם זה המצב, אפשר להסיר את התלות ב-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.
קבלת עזרה
אם נתקלתם בבעיות, אתם יכולים לעיין בדף הקהילה שלנו, שבו מפורטים הערוצים שדרכם אפשר ליצור איתנו קשר.