דרישות מוקדמות
לפני שתתחילו להעביר את הקוד, עליכם לוודא שאתם עומדים בדרישות הבאות:
- 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), לכן על מנת להשתמש בספרייה הזו, תחילה עליך לעבור לשימוש בקואופודים (cocoapods).
עדכון של Cocoapods
מעדכנים את יחסי התלות של הקואופודים ל-iOS ב-ML Kit ב-Podfile של האפליקציה:
API | שמות ישנים של פודים | שמות חדשים לפודים |
---|---|---|
סריקת ברקודים | Firebase/MLVision Firebase/MLVisionBarcodeModel |
GoogleMLKit/סריקת ברקוד |
זיהוי פנים | Firebase/MLVision Firebase/MLVisionFaceModel |
GoogleMLKit/FaceDetection |
הוספת תוויות לתמונות | Firebase/MLVision Firebase/MLVisionLabelModel |
יצירת תווית מ-GoogleMLKit/ImageLabel |
זיהוי אובייקטים ומעקב אחריהם | 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/תשובה מהירה |
תרגום | Firebase/MLNaturalLanguage Firebase/MLNLTranslate |
GoogleMLKit/תרגום |
עדכון שמות של מחלקות, טיפוסים בני מנייה (enums) וסוגים
באופן כללי, יש לשנות את השמות של מחלקות , טיפוסים וטיפוסים באופן הבא:
- Swift: הסרת הקידומת
Vision
משמות מחלקות ומטיפוסים מסוג טיפוס (enums) - יעד-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
כדי לציין את כיוון התצוגה של תמונה.השם של השיטה
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 API נעשה עכשיו שימוש במונח "language tag" (תג שפה (כפי שמוגדר בתקן BCP-47) במקום במונח "language code".
עכשיו
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())
הנה כמה דוגמאות לשיטות יעד-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 (אופציונלי)
השלב הזה חל רק אם התנאים הבאים מתקיימים:
- ערכת ML של Firebase היא רכיב Firebase היחיד שבו אתה משתמש
- אתם משתמשים רק בממשקי API במכשיר
- לא נעשה שימוש בהצגת מודלים
במקרה כזה, אפשר להסיר את יחסי התלות של Firebase אחרי ההעברה. כך עושים זאת:
- מסירים את קובץ התצורה של Firebase על ידי מחיקת הקובץ GoogleService-Info.plist מספריית האפליקציה ומפרויקט ה-Xcode.
- מסירים מה-Podfile כל יחדר של Firebase, כמו
pod 'Firebase/Analytics'
. - מסירים מהקוד אתחול של FirebaseApp, כמו
FirebaseApp.configure()
. - מוחקים את אפליקציית Firebase במסוף Firebase בהתאם לinstructions באתר התמיכה של Firebase.
קבלת עזרה
נתקלתם בבעיה? כדאי להיכנס לדף הקהילה, שבו מפורטים הערוצים שבהם אפשר ליצור איתנו קשר.