במדריך הזה מוסבר איך להפסיק להשתמש ב-ML Kit for Firebase ל-Android.
עדכון של ייבוא gradle
ערכת ה-SDK של ML Kit דורשת רק תלות אחת לכל ML Kit API. אין צורך לציין ספריות נפוצות כמו firebase-ml-vision או firebase-ml-natural-language. ML Kit משתמש במרחב השמות com.google.android.gms לספריות שתלויות בשירותי Google Play.
Vision APIs
מודלים בחבילה מועברים כחלק מהאפליקציה. צריך להוריד מודלים רזים. חלק מהממשקי ה-API זמינים גם כחבילה וגם כגרסה דקה, ואחרים זמינים רק באחת מהצורות:
| API | בחבילה | דק |
|---|---|---|
| זיהוי טקסט | x (בטא) | x |
| זיהוי פנים | x | x |
| סריקת ברקודים | x | x |
| הוספת תוויות לתמונות | x | x |
| זיהוי ומעקב אחרי אובייקטים | x | - |
מעדכנים את יחסי התלות של ספריות ML Kit Android בקובץ Gradle של המודול (ברמת האפליקציה) (בדרך כלל app/build.gradle.kts) בהתאם לטבלאות הבאות:
מודלים בחבילה
| 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.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 | תוצרי פגישה ישנים | ארטיפקט חדש |
|---|---|---|
| סריקת ברקודים | 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 | תוכן לדוגמה | ארטיפקט חדש |
|---|---|---|
| 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
כדי לארח ולהוריד מודלים בהתאמה אישית, מעבירים את המודלים ל-Cloud Storage ומוסיפים לאפליקציה לוגיקה של הורדה כדי לטעון אותם באמצעות LocalModel. פרטים נוספים זמינים ב
מדריך להעברת נתונים מ-Firebase ML ל-Cloud Storage. |
ממשקי API של שפה טבעית
מודלים בחבילה מועברים כחלק מהאפליקציה. צריך להוריד מודלים רזים:
| API | בחבילה | דק |
|---|---|---|
| מזהה שפה | x | x |
| תשובה מהירה | x | x (בטא) |
מעדכנים את יחסי התלות של ספריות ML Kit Android בקובץ Gradle של המודול (ברמת האפליקציה) (בדרך כלל app/build.gradle.kts) בהתאם לטבלאות הבאות:
מודלים בחבילה
| 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.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 | תוצרי פגישה ישנים | ארטיפקט חדש |
|---|---|---|
| מזהה שפה | 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 נדרשת הורדה ידנית. הוצאנו משימוש מודלים מרחוק שמתארחים ב-Firebase. פרטים נוספים זמינים ב מדריך להעברת נתונים מ-Firebase ML ל-Cloud Storage. |
| 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... קריאות לשירות FirebasegetInstance()מוחלפות בקריאות לשיטה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 APIs שונו ל-process()כדי לשמור על עקביות. - במקום 'קוד שפה', ממשקי Natural Language API משתמשים עכשיו במונח 'תג שפה' (כפי שמוגדר בתקן BCP 47).
- הוסרו getter methods במחלקות
xxxOptions. - השיטה
getBitmap()במחלקהInputImage(שמחליפה אתFirebaseVisionImage) לא נתמכת יותר כחלק מהממשק הציבורי. אפשר לעיין ב-BitmapUtils.javaבדוגמה למדריך למתחילים ב-ML Kit כדי לראות איך ממירים מגוון קלטים למפת סיביות. - הוסר
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());
שינויים ספציפיים ל-API
סריקת ברקודים
ב-Barcode Scanning API, יש עכשיו שתי דרכים להעברת המודלים:
- באמצעות Google Play Services, הידוע גם כ-"thin" (מומלץ) – האפשרות הזו מקטינה את גודל האפליקציה, והמודל משותף בין האפליקציות. עם זאת, מפתחים יצטרכו לוודא שהמודל הורד לפני השימוש בו בפעם הראשונה.
- עם קובץ ה-APK של האפליקציה, כלומר 'חבילה' – האפשרות הזו מגדילה את גודל האפליקציה, אבל מאפשרת להשתמש במודל באופן מיידי.
יש הבדלים קלים בין שתי ההטמעות, והגרסה 'המשולבת' כוללת מספר שיפורים בהשוואה לגרסה 'הדקה'. פרטים על ההבדלים האלה מופיעים בהנחיות לשימוש ב-Barcode Scanning API.
זיהוי פנים
יש שתי דרכים להעביר את המודלים של Face Detection API:
- באמצעות Google Play Services, הידוע גם כ-"thin" (מומלץ) – האפשרות הזו מקטינה את גודל האפליקציה, והמודל משותף בין האפליקציות. עם זאת, מפתחים יצטרכו לוודא שהמודל הורד לפני השימוש בו בפעם הראשונה.
- עם קובץ ה-APK של האפליקציה, כלומר 'חבילה' – כך גודל ההורדה של האפליקציה גדל, אבל המודל מוכן לשימוש מיידי.
ההתנהגות של ההטמעות זהה.
תרגום
-
TranslateLanguageמשתמש עכשיו בשמות קבועים שקל לקרוא (למשל,ENGLISH) במקום בתגי שפה (EN). בנוסף, הם עכשיו@StringDefבמקום@IntDef, והערך של הקבוע הוא תג השפה התואם בתקן BCP 47.
AutoML Image Labeling (יצא משימוש)
הוצאנו משימוש את האפשרות להוריד מודלים בהתאמה אישית לתוויות של תמונות באמצעות 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 Services 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 Services 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.
קבלת עזרה
אם נתקלת בבעיות, אפשר לעיין בדף הקהילה שלנו, שבו מפורטים הערוצים שדרכם אפשר ליצור איתנו קשר.