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