מיגרציה ל-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) Firebase/MLVisionAutoML GoogleMLKit/ImageLabelingCustom
GoogleMLKit/LinkFirebase
מזהה שפה 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 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

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

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

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

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

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

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

קבלת עזרה

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