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