במדריך הזה מוסבר איך לעבור מ-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. אי אפשר לשלב בין frameworks לבין 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משמות המחלקות ומה-enums - Objective-C: מחליפים את הקידומות של שם המחלקה ושל ה-enum של
FIRVisionו-FIRב-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 |
שמות של שיטות עדכון
מעדכנים את שמות השיטות לפי הכללים הבאים:
מחלקות נקודות הכניסה לדומיין (
Vision,NaturalLanguage) כבר לא קיימות. הן הוחלפו במחלקות ספציפיות למשימות. מחליפים את הקריאות לשיטות השונות של ה-factory לקבלת גלאים בקריאות ישירות לשיטת ה-factory של כל גלאי.המחלקה
VisionImageMetadataהוסרה, יחד עם ה-enumVisionDetectorImageOrientation. משתמשים במאפייןorientationשלVisionImageכדי לציין את כיוון התצוגה של התמונה.השיטה
onDeviceTextRecognizerשמקבלת מופע חדש שלTextRecognizerנקראת עכשיוtextRecognizer.המאפיין "מהימנות" הוסר ממחלקות התוצאות של זיהוי הטקסט, כולל
TextElement,TextLineו-TextBlock.ה-methods
onDeviceImageLabelerו-onDeviceImageLabeler(options:)לקבלת מופע חדש שלImageLabelerמוזגו ושמן שונה ל-imageLabeler(options:).השיטה
objectDetectorלקבלת מופע חדש שלObjectDetectorהוסרה. במקום זאת, אתם צריכים להשתמש ב-objectDetector(options:).המאפיין
typeהוסר מ-ImageLabelerוהמאפייןentityIDהוסר ממחלקת התוצאות של תיוג התמונות,ImageLabel.שינינו את השם של ה-API לסריקת ברקודים מ-
detect(in _:, completion:)ל-process(_:, completion:)כדי לשמור על עקביות עם ממשקי API אחרים של Vision.ממשקי ה-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, במקום בתור מספר שלם. כל הקטגוריות האפשריות של מחרוזות נכללות ב-enum של 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. - מסירים את כל ה-CocoaPods של Firebase, כמו
pod 'Firebase/Analytics', מה-Podfile. - מסירים מהקוד את כל האתחולים של FirebaseApp, כמו
FirebaseApp.configure(). - מוחקים את אפליקציית Firebase במסוף Firebase לפי ההוראות באתר התמיכה של Firebase.
קבלת עזרה
אם נתקלת בבעיות, כדאי לעיין בדף הקהילה שלנו, שבו מפורטים הערוצים הזמינים ליצירת קשר איתנו.