במדריך הזה מוסבר איך לעבור מ-ML Kit for Firebase ל-Android.
עדכון הייבוא של Gradle
ערכת ה-SDK של ML Kit דורשת רק תלות אחת לכל API של ML Kit. אין צורך לציין ספריות נפוצות כמו firebase-ml-vision או firebase-ml-natural-language. ב-ML Kit נעשה שימוש במרחב השמות com.google.android.gms לספריות שתלויות ב-Google Play Services.
ממשקי API של Vision
מודלים בחבילה נשלחים כחלק מהאפליקציה. צריך להוריד מודלים קלים. חלק מממשקי ה-API זמינים גם בגרסה מקובצת וגם בגרסה מצומצמת, ואחרים זמינים רק באחת מהגרסאות:
| API | בחבילה | דק |
|---|---|---|
| זיהוי טקסט | x (בטא) | x |
| איתור פנים | x | x |
| סריקת ברקודים | x | x |
| תוויות לתמונות | x | x |
| זיהוי ומעקב אחר אובייקטים | x | - |
מעדכנים את יחסי התלות של ספריות Android של ML Kit בקובץ 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.2 |
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 (בטא) |
מעדכנים את יחסי התלות של ספריות Android של ML Kit בקובץ 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()מוחלפות בקריאות ל-methodgetClient()של נקודת הכניסה לתכונה. - הסרנו את ברירת המחדל של יצירת המופע של
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. - כל ה-handles (גלאי/סורק/מתייג/מתרגם...) ניתנים לסגירה. חשוב לוודא שהשיטה
close()נקראת כשהאובייקטים האלה לא בשימוש יותר. אם משתמשים בהם ב-Fragmentאו ב-AppCompatActivity, אחת מהדרכים לעשות זאת היא להפעיל אתLifecycleOwner.getLifecycle()ב-Fragmentאו ב-AppCompatActivity, ואז להפעיל אתLifecycle.addObserver. - כדי לשמור על עקביות, השמות
processImage()ו-detectInImage()ב-Vision API שונו ל-process(). - ממשקי ה-API של שפה טבעית משתמשים עכשיו במונח "תג שפה" (כפי שמוגדר בתקן BCP 47) במקום במונח "קוד שפה".
- הוסרו ה-methods מסוג getter במחלקות
xxxOptions. - השיטה
getBitmap()במחלקהInputImage(שמחליפה אתFirebaseVisionImage) לא נתמכת יותר כחלק מהממשק הציבורי. כדי להמיר מפת סיביות (bitmap) מסוגי קלט שונים, עיינו ב-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 { // … }
- מחליפים את ה-classpath של הפלאגין של Google Services Gradle בקובץ Gradle של הפרויקט (ברמת הבסיס) (
build.gradle.kts) ב-classpath של הפלאגין 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.
קבלת עזרה
אם נתקלת בבעיות, כדאי לעיין בדף הקהילה שלנו, שבו מפורטים הערוצים הזמינים ליצירת קשר איתנו.