דרישות מוקדמות
לפני שמתחילים להעביר את הקוד, חשוב לוודא שמתקיימות הדרישות הבאות:
- 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. אי אפשר לשלב בין frameworks לבין cocoapods, ולכן כדי להשתמש בספרייה הזו צריך קודם לעבור לשימוש ב-cocoapods.
עדכון Cocoapods
מעדכנים את יחסי התלות ב-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/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ושל ה-enumFIRב-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, יחד עם ה-enumVisionDetectorImageOrientation. משתמשים במאפייןorientationשלVisionImageכדי לציין את כיוון התצוגה של תמונה.השם של השיטה
onDeviceTextRecognizerשיוצרת מופע חדש שלTextRecognizerהשתנה ל-textRecognizer.המאפיין confidence הוסר ממחלקות התוצאות של זיהוי טקסט, כולל
TextElement,TextLineו-TextBlock.ה-methods
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, במקום כמספר שלם. כל הקטגוריות האפשריות של מחרוזות כלולות בספירה 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.
קבלת עזרה
אם נתקלתם בבעיות, אתם יכולים לעיין בדף הקהילה שלנו, שבו מפורטים הערוצים שדרכם אפשר ליצור איתנו קשר.