במדריך הזה מוסבר איך להפסיק להשתמש ב-ML Kit for Firebase ל-iOS.
דרישות מוקדמות
לפני שמתחילים להעביר את הקוד, חשוב לוודא שאתם עומדים בדרישות הבאות:
- ML Kit תומך ב-Xcode 13.2.1 ומעלה.
- ML Kit תומך ב-iOS מגרסה 15.5 ואילך.
- ML Kit לא תומך בארכיטקטורות 32 ביט (i386 ו-armv7). ML Kit תומך בארכיטקטורות של 64 ביט (x86_64 ו-arm64).
- ספריית ML Kit מסופקת רק כ-cocoapods. אי אפשר לשלב בין מסגרות ו-CocoaPods, ולכן כדי להשתמש בספרייה הזו צריך קודם לעבור ל-CocoaPods.
עדכון Cocoapods
מעדכנים את יחסי התלות של ML Kit iOS cocoapods בקובץ Podfile של האפליקציה:
| API | שמות הפודים הקודמים | שמות הפודים החדשים |
|---|---|---|
| סריקת ברקודים | Firebase/MLVision Firebase/MLVisionBarcodeModel |
GoogleMLKit/BarcodeScanning |
| זיהוי פנים | Firebase/MLVision Firebase/MLVisionFaceModel |
GoogleMLKit/FaceDetection |
| הוספת תוויות לתמונות | Firebase/MLVision Firebase/MLVisionLabelModel |
GoogleMLKit/ImageLabeling |
| זיהוי ומעקב אחרי אובייקטים | Firebase/MLVisionObjectDetection | GoogleMLKit/ObjectDetection |
| זיהוי טקסט | Firebase/MLVision Firebase/MLVisionTextModel |
GoogleMLKit/TextRecognition |
| הוספת תוויות לתמונות באמצעות AutoML (מודל משולב) | Firebase/MLVisionAutoML | GoogleMLKit/ImageLabelingCustom |
| הוספת תוויות לתמונות באמצעות AutoML (המודל הורד) | Firebase/MLVisionAutoML | GoogleMLKit/ImageLabelingCustom כדי לארח ולהוריד מודלים בהתאמה אישית, מעבירים את המודלים ל-Cloud Storage ומוסיפים לאפליקציה לוגיקה של הורדה כדי לטעון אותם כמודלים מקומיים. פרטים נוספים זמינים ב מדריך להעברת נתונים מ-Firebase ML ל-Cloud Storage. |
| מזהה שפה | Firebase/MLNaturalLanguage Firebase/MLNLLanguageID |
GoogleMLKit/LanguageID |
| תשובה מהירה | Firebase/MLNaturalLanguage Firebase/MLNLSmartReply |
GoogleMLKit/SmartReply |
| תרגום | Firebase/MLNaturalLanguage Firebase/MLNLTranslate |
GoogleMLKit/Translate |
עדכון השמות של מחלקות, סוגי ספירה וסוגים
באופן כללי, צריך לשנות את השם של מחלקות, ספירות וסוגים באופן הבא:
- Swift: הסרת התחילית
Visionמשמות של מחלקות וסוגי enum - Objective-C: מחליפים את שמות המחלקות
FIRVisionו-FIRואת הקידומות של סוגי ה-enum ב-MLK
הכלל הכללי הזה לא חל על חלק משמות הסיווג והסוגים:
Swift
| סוג או כיתה ישנים | כיתה או סוג חדשים |
|---|---|
| AutoMLLocalModel | LocalModel |
| AutoMLRemoteModel | LocalModel נדרשת הורדה ידנית. הוצאנו משימוש מודלים מרחוק שמתארחים ב-Firebase. פרטים נוספים זמינים ב מדריך להעברת נתונים מ-Firebase ML ל-Cloud Storage. |
| VisionBarcodeDetectionCallback | BarcodeScanningCallback |
| VisionBarcodeDetector | BarcodeScanner |
| VisionBarcodeDetectorOptions | BarcodeScannerOptions |
| VisionImage | VisionImage (ללא שינוי) |
| VisionPoint | VisionPoint (ללא שינוי) |
| VisionOnDeviceAutoMLImageLabelerOptions | CustomImageLabelerOptions |
| VisionOnDeviceImageLabelerOptions | ImageLabelerOptions |
Objective-C
| סוג או כיתה ישנים | כיתה או סוג חדשים |
|---|---|
| FIRAutoMLLocalModel | MLKLocalModel |
| FIRAutoMLRemoteModel | MLKLocalModel נדרשת הורדה ידנית. הוצאנו משימוש מודלים מרחוק שמתארחים ב-Firebase. פרטים נוספים זמינים ב מדריך להעברת נתונים מ-Firebase ML ל-Cloud Storage. |
| FIRVisionBarcodeDetectionCallback | MLKBarcodeScanningCallback |
| FIRVisionBarcodeDetector | MLKBarcodeScanner |
| FIRVisionBarcodeDetectorOptions | MLKBarcodeScannerOptions |
| FIRVisionImage | MLKVisionImage |
| FIRVisionPoint | MLKVisionPoint |
| FIRVisionOnDeviceAutoMLImageLabelerOptions | MLKCustomImageLabelerOptions |
| FIRVisionOnDeviceImageLabelerOptions | MLKImageLabelerOptions |
עדכון שמות של שיטות
צריך לעדכן את שמות ה-method לפי הכללים הבאים:
כיתות נקודת הכניסה לדומיין (
Vision,NaturalLanguage) כבר לא קיימות. הם הוחלפו במחלקות ספציפיות למשימות. מחליפים את הקריאות לשיטות המפעל השונות שלהם כדי לקבל גלאים בקריאות ישירות לשיטת המפעל של כל גלאי.הוסרה המחלקה
VisionImageMetadata, יחד עם ה-enumVisionDetectorImageOrientation. משתמשים במאפייןorientationשלVisionImageכדי לציין את כיוון התצוגה של תמונה.השיטה
onDeviceTextRecognizerשמקבלת מופע חדש שלTextRecognizerנקראת עכשיוtextRecognizer.המאפיין confidence (מהימנות) הוסר ממחלקות התוצאות של זיהוי טקסט, כולל
TextElement,TextLineו-TextBlock.השיטות
onDeviceImageLabelerו-onDeviceImageLabeler(options:)לקבלת מופע חדש שלImageLabelerמוזגו ושמן שונה ל-imageLabeler(options:).הוסרה השיטה
objectDetectorלקבלת מופע חדש שלObjectDetector. במקום זאת, אתם צריכים להשתמש ב-objectDetector(options:).המאפיין
typeהוסר מ-ImageLabelerוהמאפייןentityIDהוסר ממחלקת התוצאות של תיוג התמונות,ImageLabel.שם ה-API לסריקת ברקודים
detect(in _:, completion:)שונה ל-process(_:, completion:)כדי לשמור על עקביות עם ממשקי API אחרים של Vision.במקום 'קוד שפה', ממשקי Natural Language API משתמשים עכשיו במונח 'תג שפה' (כפי שמוגדר בתקן BCP-47).
ב-
TranslateLanguageנעשה עכשיו שימוש בשמות קריאים (כמו.english) עבור הקבועים שלו, במקום בתגי שפה (כמו.en).
הנה כמה דוגמאות לשיטות ישנות וחדשות של Swift:
ישן
let options = VisionOnDeviceImageLabelerOptions()
options.confidenceThreshold = 0.75
let labeler = Vision.vision().onDeviceImageLabeler(options: options)
let detector = Vision.vision().faceDetector(options: options)
let localModel = AutoMLLocalModel(manifestPath: "automl/manifest.json")
let options = VisionOnDeviceAutoMLImageLabelerOptions(localModel: localModel)
options.confidenceThreshold = 0.75
let labeler = vision.onDeviceAutoMLImageLabeler(options: options)
let detector = Vision.vision().objectDetector()
חדש
let options = ImageLabelerOptions()
options.confidenceThreshold = NSNumber(value:0.75)
let labeler = ImageLabeler.imageLabeler(options: options)
let detector = FaceDetector.faceDetector(options: options)
let localModel = LocalModel(manifestPath: "automl/manifest.json")
let options = CustomImageLabelerOptions(localModel: localModel)
options.confidenceThreshold = NSNumber(value:0.75)
let labeler = ImageLabeler.imageLabeler(options: options)
let detector = ObjectDetector.objectDetector(options: ObjectDetectorOptions())
ריכזנו כאן כמה דוגמאות לשיטות ישנות וחדשות של Objective-C:
ישן
FIRVisionOnDeviceImageLabelerOptions *options = [[FIRVisionOnDeviceImageLabelerOptions alloc] init]; options.confidenceThreshold = 0.75; FIRVisionImageLabeler *labeler = [[FIRVision vision] onDeviceImageLabelerWithOptions:options]; FIRVisionFaceDetector *detector = [[FIRVision vision] faceDetectorWithOptions: options]; FIRAutoMLLocalModel *localModel = [[FIRAutoMLLocalModel alloc] initWithManifestPath:@"automl/manifest.json"]; FIRVisionOnDeviceAutoMLImageLabelerOptions *options = [[FIRVisionOnDeviceAutoMLImageLabelerOptions alloc] initWithLocalModel: localModel]; options.confidenceThreshold = 0.75 FIRVisionImageLabeler *labeler = [[FIRVision vision] onDeviceAutoMLImageLabelerWithOptions:options]; FIRVisionObjectDetector *detector = [[FIRVision vision] objectDetector];
חדש
MLKImageLabelerOptions *options = [[MLKImageLabelerOptions alloc] init]; options.confidenceThreshold = @(0.75); MLKImageLabeler *labeler = [MLKImageLabeler imageLabelerWithOptions:options]; MLKFaceDetector *detector = [MLKFaceDetector faceDetectorWithOptions:options]; MLKLocalModel *localModel = [[MLKLocalModel alloc] initWithManifestPath:@"automl/manifest.json"]; MLKCustomImageLabelerOptions *options = [[MLKCustomImageLabelerOptions alloc] initWithLocalModel:localModel]; options.confidenceThreshold = @(0.75) MLKImageLabeler *labeler = [MLKImageLabeler imageLabelerWithOptions:options]; MLKObjectDetectorOptions *options = [[MLKObjectDetectorOptions alloc] init]; MLKObjectDetector *detector = [MLKObjectDetector objectDetectorWithOptions:options];
שינויים ספציפיים ל-API
זיהוי ומעקב אחרי אובייקטים
אם האפליקציה משתמשת בסיווג אובייקטים, חשוב לדעת שב-SDK החדש השתנה האופן שבו הוא מחזיר את קטגוריית הסיווג של אובייקטים שזוהו.
הערך VisionObjectCategory ב-VisionObject מוחזר כ-text באובייקט ObjectLabel, במקום כמספר שלם. כל הקטגוריות האפשריות של מחרוזות כלולות בספירה DetectedObjectLabel.
שימו לב שהקטגוריה .unknown הוסרה. אם רמת הביטחון של המסווג לגבי סיווג אובייקט מסוים נמוכה, המסווג לא מחזיר תווית בכלל.
דוגמה לקוד Swift ישן וחדש:
ישן
if (object.classificationCategory == .food) {
...
}חדש
if let label = object.labels.first {
if (label.text == DetectedObjectLabel.food.rawValue) {
...
}
}
// or
if let label = object.labels.first {
if (label.index == DetectedObjectLabelIndex.food.rawValue) {
...
}
}הנה דוגמה לקוד Objective-C הישן והחדש:
ישן
if (object.classificationCategory == FIRVisionObjectCategoryFood) {
...
}חדש
if ([object.labels[0].text isEqualToString:MLKDetectedObjectLabelFood]) {
...
}
// or
if ([object.labels[0].index == MLKDetectedObjectLabelIndexFood]) {
...
}הסרת תלות ב-Firebase
אחרי ההעברה, מסירים את התלות ב-Firebase. ככה עושים את זה:
- מסירים את קובץ ההגדרות של Firebase על ידי מחיקת הקובץ
GoogleService-Info.plistמהספרייה של האפליקציה ומהפרויקט של Xcode. - מסירים מ-Podfile את כל ה-cocoapod של Firebase, כמו
pod 'Firebase/Analytics'. - מסירים מהקוד את כל האתחולים של FirebaseApp, כמו
FirebaseApp.configure(). - מוחקים את אפליקציית Firebase במסוף Firebase לפי ההוראות באתר התמיכה של Firebase.
קבלת עזרה
אם נתקלת בבעיות, אפשר לעיין בדף הקהילה שלנו, שבו מפורטים הערוצים שדרכם אפשר ליצור איתנו קשר.