דרישות מוקדמות
לפני שמתחילים להעביר את הקוד, חשוב לוודא שמתקיימות הדרישות הבאות:
- 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, במקום כמספר שלם. כל הקטגוריות האפשריות של מחרוזות כלולות ב-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
- אתם משתמשים רק בממשקי API במכשיר
- אתם לא משתמשים בהצגת מודלים
אם זה המצב, אפשר להסיר את התלות ב-Firebase אחרי ההעברה. כך עושים את זה:
- מסירים את קובץ ההגדרות של Firebase על ידי מחיקת הקובץ GoogleService-Info.plist מהספרייה של האפליקציה ומהפרויקט ב-Xcode.
- מסירים מ-Podfile את כל ה-cocoapod של Firebase, כמו pod 'Firebase/Analytics'.
- מסירים מהקוד את כל האתחולים של FirebaseApp, כמו FirebaseApp.configure().
- מוחקים את האפליקציה ב-Firebase במסוף Firebase לפי ההוראות באתר התמיכה של Firebase.
קבלת עזרה
אם נתקלתם בבעיות, אתם יכולים לעיין בדף הקהילה שלנו, שבו מפורטים הערוצים שדרכם אפשר ליצור איתנו קשר.
