מיגרציה ל-iOS

דרישות מוקדמות

לפני שתתחילו להעביר את הקוד, עליכם לוודא שאתם עומדים בדרישות הבאות:

  • ערכת ML Kit תומכת ב-Xcode 13.2.1 ואילך.
  • ML Kit תומך ב-iOS מגרסה 10 ואילך.
  • ML Kit לא תומך בארכיטקטורות של 32 ביט (i386 ו- armv7). ערכת ML Kit תומכת בארכיטקטורות של 64 ביט (x86_64 ו-arm64).
  • ספריית ML Kit זמינה רק כקואופודים. אי אפשר לשלב בין frameworks וקואופודים, כך שכדי להשתמש בספרייה הזו צריך קודם לעבור כדי להשתמש בקאו-פודים.

עדכון Cocoapods

מעדכנים את יחסי התלות של ML Kit ב-iOS ב-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/זיהוי טקסט
תיוג תמונות AutoML (מודל חבילה) Firebase/MLVisionAutoML GoogleMLKit/ImageLabelingCustom
הוספת תוויות לתמונות של AutoML (הורדת מודל מ-Firebase) Firebase/MLVisionAutoML GoogleMLKit/ImageLabelingCustom
GoogleMLKit/LinkFirebase
מזהה שפה Firebase/MLNaturalLanguage
Firebase/MLNLLanguageID
GoogleMLKit/LanguageID
תשובה מהירה Firebase/MLNaturalLanguage
Firebase/MLNLSmartReply
GoogleMLKit/SmartReply
תרגום Firebase/MLNaturalLanguage
Firebase/MLNLTranslate
GoogleMLKit/תרגום

עדכון שמות של כיתות, טיפוסים בני מנייה (enum) וסוגים

באופן כללי, יש לשנות את השמות של מחלקות, enums וסוגים באופן הבא:

  • SWIFT: הסרת הקידומת Vision משמות של כיתות ו-enums
  • Objective-C: מחליפים את FIRVision ואת הקידומות FIR של שם המחלקה ושל enum עד MLK

הכלל הכללי הזה לא חל על חלק מהשמות והסוגים של המחלקות:

Swift

סיווג או סוג ישניםסיווג או סוג חדש
AutoMLLocalModel LocalModel
AutoMLRemoteModel CustomRemoteModel
VisionBarcodeDetectionCallback BarcodeScanningCallback
VisionBarcodeDetector BarcodeScanner
VisionBarcodeDetectorOptions BarcodeScannerOptions
VisionImage VisionImage (ללא שינוי)
VisionPoint VisionPoint (ללא שינוי)
VisionOnDeviceAutoMLImageLabelerOptions CustomImageLabelerOptions
VisionOnDeviceImageLabelerOptions ImageLabelerOptions

Objective-C

סיווג או סוג ישניםסיווג או סוג חדש
FIRAutoMLLocalModel MLKLocalModel
FIRAutoMLRemoteModel MLKCustomRemoteModel
FIRVisionBarcodeDetectionCallback MLKBarcodeScanningCallback
FIRVisionBarcodeDetector MLKBarcodeScanner
FIRVisionBarcodeDetectorOptions MLKBarcodeScannerOptions
FIRVisionImage MLKVisionImage
FIRVisionOnDeviceAutoMLImageLabelerOptions MLKCustomImageLabelerOptions
FIRVisionOnDeviceImageLabelerOptions MLKImageLabelerOptions
FIRVisionPoint MLKVisionPoint

Objective-C

עדכון שמות השיטות

מעדכנים את שמות השיטות בהתאם לכללים הבאים:

  • המחלקות של נקודות הכניסה לדומיין (Vision, NaturalLanguage) לא קיימות יותר. הם הוחלפו במחלקות ספציפיות למשימה. להחליף את הקריאות לשיטות המפעל השונות להשגת מזהים שיחות ישירות לשיטה של היצרן של כל מזהה.

  • הכיתה VisionImageMetadata הוסרה, יחד עם VisionDetectorImageOrientation enum. צריך להשתמש במאפיין orientation של VisionImage כדי לציין את כיוון התצוגה של תמונה.

  • ל-method onDeviceTextRecognizer שמקבלת מופע TextRecognizer חדש יש השם השתנה ל-textRecognizer.

  • מאפיין המהימנות הוסר מהטקסט סיווגי תוצאות הזיהוי, כולל TextElement, TextLine ו-TextBlock.

  • השיטות onDeviceImageLabeler ו-onDeviceImageLabeler(options:) כדי לקבל מופע ImageLabeler החדש מוזג ושמו שונה ל- imageLabeler(options:)

  • הוסרה השיטה objectDetector לקבלת מופע חדש של ObjectDetector. במקומה צריך להשתמש במדיניות objectDetector(options:).

  • הנכס type הוסר מ-ImageLabeler וגם המאפיין entityID הוסר מסיווג התוצאות של הוספת תוויות לתמונות, ImageLabel.

  • השם של ה-API לסריקת ברקוד detect(in _:, completion:) השתנה ל- process(_:, completion:) בהתאם לממשקי API אחרים של ראייה ממוחשבת.

  • Natural Language APIs משתמשים עכשיו במונח 'תג שפה' (כפי שמוגדר על ידי תקן 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 enum.

לתשומת ליבך, הקטגוריה .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 ML Kit הוא רכיב Firebase היחיד שבו אתם משתמשים
  • אתם משתמשים רק בממשקי API שנמצאים במכשיר
  • לא משתמשים בהצגת מודלים

במקרה כזה, אפשר להסיר את יחסי התלות של Firebase אחרי ההעברה. כך עושים זאת:

  • מסירים את קובץ התצורה של Firebase על-ידי מחיקת הקובץ GoogleService-Info.plist מספריית האפליקציה ומפרויקט Xcode.
  • מסירים מה-Podfile כל קא-פוד של Firebase, כמו pod 'Firebase/Analytics'.
  • מסירים מהקוד אתחולים של אפליקציית Firebase, כמו FirebaseApp.configure().
  • מוחקים את אפליקציית Firebase במסוף Firebase באמצעות קידוד של ההוראות באתר התמיכה של Firebase.

קבלת עזרה

אם נתקלת בבעיות, אפשר לעיין בדף הקהילה שלנו, שבו ניתן למצוא הערוצים הזמינים ליצירת קשר איתנו.