דרישות מוקדמות
לפני שתתחילו להעביר את הקוד, עליכם לוודא שאתם עומדים בדרישות הבאות:
- ערכת 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.
קבלת עזרה
אם נתקלת בבעיות, אפשר לעיין בדף הקהילה שלנו, שבו ניתן למצוא הערוצים הזמינים ליצירת קשר איתנו.