עדכון ייבוא של GRid
ל-SDK החדש נדרשת תלות אחת בלבד לכל ML Kit API. אין צורך לציין
ספריות נפוצות כמו firebase-ml-vision
או firebase-ml-natural-language
.
ML Kit משתמש במרחב השמות com.google.android.gms
עבור ספריות שמסתמכות על Google Play Services.
ממשקי Vision API
המודלים הארוזים נשלחים כחלק מהאפליקציה שלכם. יש להוריד מודלים דקים. חלק מממשקי ה-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.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
com.google.mlkit:linkfirebase:17.0.0 |
ממשקי API לשפה טבעית
המודלים הארוזים נשלחים כחלק מהאפליקציה שלכם. יש להוריד מודלים דקים:
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.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.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()
מוחלפות בקריאות ל-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. - אפשר לסגור את כל נקודות האחיזה (גלאי/סורק/מתייג/מתרגם...). חשוב לוודא שמתבצעת קריאה ל-method
close()
כשכבר לא משתמשים באובייקטים האלה. אם אתם משתמשים בהם ב-Fragment או ב-AppCompatActivity, אחת הדרכים הפשוטות לעשות זאת היא לקרוא ל-LifecycleOwner.getLifecycle() ב-Fragment או ב-AppCompatActivity, ולאחר מכן קוראים ל-Lifecycle.addObserver - השמות של
processImage()
ו-detectInImage()
ב-Vision API השתנו ל-process()
כדי לשמור על עקביות. - ב-Natural Language APIs משתמשים עכשיו במונח 'תג שפה' (כפי שמוגדר בתקן BCP 47) במקום ב'קוד שפה'.
- הוסרו שיטות Getter במחלקות xxxOptions.
- המתודה getBitmap() במחלקה קלטImage(מחליפה את
FirebaseVisionImage
) לא נתמכת יותר כחלק מהממשק הציבורי. אפשר לעיין בBitmapUtils.java
בבדוגמה של המדריך למתחילים ל-ML Kit כדי להמיר מפת סיביות ממקורות קלט שונים. - הסרנו את FirebaseVisionImageMetadata. אפשר פשוט להעביר מטא-נתונים של תמונה, כמו רוחב, גובה, סיבובמעלות, פורמט ופורמט, לשיטות הבנייה של קלטתמונות.
הנה כמה דוגמאות לשיטות 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, שנקראה גם "רזה" (מומלץ) – ההגדרה הזו גורמת לצמצום גודל האפליקציה והמודל משותף בין אפליקציות. עם זאת, המפתחים יצטרכו לוודא שהורדתם את המודל לפני שהם משתמשים בו בפעם הראשונה.
- עם ה-APK של האפליקציה, שנקרא גם 'bundled', 'חבילה' – הקובץ הזה מגדיל את גודל האפליקציה, אבל המשמעות היא שניתן להשתמש במודל באופן מיידי.
שתי ההטמעות שונות מעט: בגרסה ה"חבילה" יש כמה שיפורים בהשוואה לגרסה ה"רזה". פרטים על ההבדלים האלה מופיעים בהנחיות של Barcode Scanning API
זיהוי פנים
יש שתי דרכים להעביר את המודלים ל-Face Detection API:
- באמצעות Google Play Services, שנקראה גם "רזה" (מומלץ) – ההגדרה הזו גורמת לצמצום גודל האפליקציה והמודל משותף בין אפליקציות. עם זאת, המפתחים יצטרכו לוודא שהורדתם את המודל לפני שהם משתמשים בו בפעם הראשונה.
- עם ה-APK של האפליקציה, שנקרא גם 'bundled', 'חבילה' – הקובץ הזה מגדיל את גודל ההורדה של האפליקציה, אבל המשמעות היא שניתן להשתמש במודל באופן מיידי.
אופן הפעולה של ההטמעות זהה.
תרגום
TranslateLanguage
משתמש עכשיו בשמות קריאים עבור הקבועים שלו (למשלENGLISH
) במקום בתגי שפה (EN
). השם החדש הוא @StringDef, במקום @IntDef, והערך של הקבוע הוא תג השפה התואם של BCP 47.אם האפליקציה משתמשת באפשרות ההורדה 'מכשיר לא פעיל', חשוב לזכור שהאפשרות הזו הוסרה ואי אפשר להשתמש בה יותר. עדיין ניתן להשתמש באפשרות 'טעינת המכשיר'. אם רוצים התנהגות מורכבת יותר, אפשר לעכב את הפעלת ה-
RemoteModelManager.download
מאחורי הלוגיקה שלך.
הוספת תוויות לתמונות AutoML
אם האפליקציה משתמשת באפשרות ההורדה 'מכשיר לא פעיל', חשוב לזכור האפשרות הוסרה ואי אפשר יותר להשתמש בה. עדיין אפשר להשתמש האפשרות 'טעינת המכשיר'.
אם ברצונך בהתנהגות מורכבת יותר, אפשר לעכב את השיחה
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 היחיד שבו אתם משתמשים.
- אתם משתמשים רק בממשקי 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 { // … }
- מחליפים את ה-classpath של הפלאגין של 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.
קבלת עזרה
אם נתקלת בבעיות, אפשר לעיין בדף הקהילה שלנו, שבו ניתן למצוא הערוצים הזמינים ליצירת קשר איתנו.