מיגרציה ל-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/MLVisionFaceModelModel
GoogleMLKit/FaceDetection
הוספת תוויות לתמונות Firebase/MLVision
Firebase/MLVisionLabelModel
GoogleMLKit/ImageLabeling
זיהוי אובייקטים ומעקב אחריהם Firebase/MLVisionObjectDetection GoogleMLKit/ObjectDetect
זיהוי טקסט 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 ואת הקידומות enum ב-MLKFIR

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

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

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

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

קבלת עזרה

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