מעבר מ-Mobile Vision ל-ML Kit ב-iOS

במסמך הזה מפורטים השלבים שצריך לבצע כדי להעביר את הפרויקטים מ: Google Mobile Vision (GMV) ל-ML Kit ב-iOS.

דרישות מוקדמות

לפני שתתחילו להעביר את הקוד, עליכם לוודא שאתם עומדים בדרישות הבאות:

  • ערכת ML Kit תומכת ב-Xcode 13.2.1 ואילך.
  • ML Kit תומך ב-iOS מגרסה 10 ואילך.
  • ML Kit לא תומך בארכיטקטורות של 32 ביט (i386 ו- armv7). ערכת ML Kit תומכת בארכיטקטורות של 64 ביט (x86_64 ו-arm64).

עדכון Cocoapods

מעדכנים את יחסי התלות של ML Kit ב-iOS ב-Podfile של האפליקציה:

APIPod של GMVPod של ערכת ML
סריקת ברקוד GoogleMobileVision/BarcodeDetector GoogleMLKit/BarcodeScanning
איתור פנים GoogleMobileVision/FaceDetector GoogleMLKit/FaceDetection
זיהוי טקסט GoogleMobileVision/TextDetector GoogleMLKit/TextRecognition

שינויים כוללים בממשק ה-API

השינויים האלה יחולו על כל ממשקי ה-API:

  • ממשקי ה-API להסקת מסקנות ב-GMV נקלטים בקלט UIImage או CMSampleBufferRef. ערכת ML Kit כוללת אותם בתוך MLKVisionImage ומקבלת את הקלט הזה כקלט.
  • GMV משתמשת ב-NSDictionary כדי להעביר אפשרויות שונות של מזהים. למטרה הזו, ערכת ML Kit משתמשת בסוגי אפשרויות ייעודיים.
  • GMV מעביר את סוג המזהה למחלקה GMVDetector היחידה כשהיא יוצרת מזהה. ב-ML Kit נעשה שימוש במחלקות ייעודיות כדי ליצור מכונות נפרדות של גלאי, סורק ומזהה.
  • ממשקי ה-API של GMV תומכים בזיהוי סינכרוני בלבד. אפשר לקרוא לממשקי ה-API להסקת מסקנות של ML Kit באופן סינכרוני ואסינכרוני.
  • GMV להרחיב את AVCaptureVideoDataOutput ומספק מסגרת מרובת גלאים לביצוע מספר זיהויים בו-זמנית. ערכת ML Kit לא מספקת מנגנונים כאלה, אבל המפתח יכול ליישם את אותה פונקציונליות אם ירצה.

שינויים ספציפיים ל-API

בקטע הזה מתוארים המחלקות והשיטות המתאימות של GMV ו-ML Kit לכל אחד מה-Vision API, ומוסבר איך לאתחל את ה-API.

FaceDetector

מקודדים מחדש את האתחול כמו בדוגמה הזו:

GMV

NSDictionary *options = @{
    GMVDetectorFaceMode : @(GMVDetectorFaceAccurateMode),
    GMVDetectorFaceClassificationType : @(GMVDetectorFaceClassificationAll),
    GMVDetectorFaceLandmarkType : @(GMVDetectorFaceLandmarkAll)
};
GMVDetector *faceDetector =
    [GMVDetector detectorOfType:GMVDetectorTypeFace options:options];

ML Kit

MLKFaceDetectorOptions *options = [[MLKFaceDetectorOptions alloc] init];
options.performanceMode = MLKFaceDetectorPerformanceModeAccurate;
options.classificationMode = MLKFaceDetectorClassificationModeAll;
options.landmarkMode = MLKFaceDetectorLandmarkModeAll;
MLKFaceDetector *faceDetector = [MLKFaceDetector faceDetectorWithOptions:options];

ב-GMVDetector יש שני ממשקי API שונים לזיהוי. שתי הפעולות הן פעולות סינכרוניות:

- (nullable NSArray<__kindof GMVFeature *> *)
    featuresInImage:(UIImage *)image
            options:(nullable NSDictionary *)options;

- (nullable NSArray<__kindof GMVFeature *> *)
    featuresInBuffer:(CMSampleBufferRef)sampleBuffer
             options:(nullable NSDictionary *)options;

מחליפים את הערך GMVDetector ב-MLKFaceDetector. אפשר לקרוא ל-API להסקת מסקנות באופן סינכרוני או אסינכרוני.

סינכרוני

- (nullable NSArray<MLKFace *> *)
    resultsInImage:(MLKVisionImage *)image
             error:(NSError **)error;

אסינכרוני

- (void)processImage:(MLKVisionImage *)image
    Completion:
        (MLKFaceDetectionCallback)completion
    NS_SWIFT_NAME(process(_:completion:));

משנים את המחלקות, השיטות והשמות הבאים:

GMV ML Kit
GMVFaceFeature MLKFace
GMVFaceContour MLKFaceContour
GMVDetectorImageOrientation MLKVisionImage.orientation
NSDictionary מהאפשרויות של זיהוי פנים MLKFaceDetectorOptions
GMVDetectorFaceFastMode Set MLKFaceDetectorOptions.performanceMode to MLKFaceDetectorPerformanceModeFast
GMVDetectorFaceAccurateMode Set MLKFaceDetectorOptions.performanceMode to MLKFaceDetectorPerformanceModeAccurate
GMVDetectorFaceSelfieMode Set MLKFaceDetectorOptions.contourMode to MLKFaceDetectorContourModeAll
GMVDetectorFaceLandmarkType MLKFaceDetectorOptions.landmarkMode
GMVDetectorFaceLandmarkNone Set MLKFaceDetectorOptions.landmarkMode to MLKFaceDetectorLandmarkModeNone
GMVDetectorFaceLandmarkAll Set MLKFaceDetectorOptions.landmarkMode to MLKFaceDetectorLandmarkModeAll
GMVDetectorFaceLandmarkContour Set MLKFaceDetectorOptions.contourMode to MLKFaceDetectorContourModeAll
GMVDetectorFaceClassificationType MLKFaceDetectorOptions.classificationMode
GMVDetectorFaceClassificationNone Set MLKFaceDetectorOptions.classificationMode to MLKFaceDetectorClassificationModeNone
GMVDetectorFaceClassificationAll Set MLKFaceDetectorOptions.classificationMode to MLKFaceDetectorClassificationModeAll
GMVDetectorFaceTrackingEnabled MLKFaceDetectorOptions.trackingEnabled
GMVDetectorProminentFaceOnly Set MLKFaceDetectorOptions.contourMode to MLKFaceDetectorContourModeAll
GMVDetectorFaceMinSize MLKFaceDetectorOptions.minFaceSize

BarcodeDetector

מקודדים מחדש את האתחול כמו בדוגמה הזו:

GMV

NSDictionary *options = @{
    GMVDetectorBarcodeFormats : @(GMVDetectorBarcodeFormatCode128 |
                                  GMVDetectorBarcodeFormatQRCode)
};
GMVDetector *barcodeDetector =
    [GMVDetector detectorOfType:GMVDetectorTypeBarcode options:options];

ML Kit

MLKBarcodeScannerOptions *options = [[MLKBarcodeScannerOptions alloc] init];
options.formats = MLKBarcodeFormatCode128 | MLKBarcodeFormatQRCode;
MLKBarcodeScanner *barcodeScanner =
    [MLKBarcodeScanner barcodeScannerWithOptions:options];

ב-GMVDetector יש שני ממשקי API שונים לזיהוי. שתי הפעולות הן פעולות סינכרוניות:

- (nullable NSArray<__kindof GMVFeature *> *)
    featuresInImage:(UIImage *)image
            options:(nullable NSDictionary *)options;

- (nullable NSArray<__kindof GMVFeature *> *)
    featuresInBuffer:(CMSampleBufferRef)sampleBuffer
             options:(nullable NSDictionary *)options;

מחליפים את GMVDetector ב- MLKBarcodeScanner אפשר לקרוא ל-API להסקת מסקנות באופן סינכרוני או אסינכרוני.

סינכרוני

- (nullable NSArray<MLKBarcode *> *)
    resultsInImage:(MLKVisionImage *)image
             error:(NSError **)error;

אסינכרוני

- (void)processImage:(MLKVisionImage *)image
    Completion:
        (MLKBarcodeScanningCallback)completion
    NS_SWIFT_NAME(process(_:completion:));

משנים את המחלקות, השיטות והשמות הבאים:

GMV ML Kit
GMVDetectorImageOrientation MLKVisionImage.orientation
NSDictionary מהאפשרויות של מזהה הברקוד MLKBarcodeScannerOptions
GMVDetectorBarcodeFormats MLKBarcodeScannerOptions.formats
GMVBarcodeFeature MLKBarcode
GMVBarcodeFeatureAddress MLKBarcodeAddress
GMVBarcodeFeatureCalendarEvent MLKBarcodeCalendarEvent
GMVBarcodeFeatureContactInfo MLKBarcodeContactInfo
GMVBarcodeFeatureDriverLicense MLKBarcodeDriverLicense
GMVBarcodeFeatureEmail MLKBarcodeEmail
GMVBarcodeFeatureGeoPoint MLKBarcodeGeoPoint
GMVBarcodeFeaturePersonName MLKBarcodePersonName
GMVBarcodeFeaturePhone MLKBarcodePhone
GMVBarcodeFeatureSMS MLKBarcodeSMS
GMVBarcodeFeatureURLBookmark MLKBarcodeURLBookmark
GMVBarcodeFeatureWiFi MLKBarcodeWiFi

TextRecognition

מקודדים מחדש את האתחול כמו בדוגמה הזו:

GMV

GMVDetector *textDetector =
    [GMVDetector detectorOfType:GMVDetectorTypeText options:nil];

ML Kit

MLKTextRecognizer *textRecognizer = [MLKTextRecognizer textRecognizer];

ב-GMVDetector יש שני ממשקי API שונים לזיהוי. שתי הפעולות הן פעולות סינכרוניות:

- (nullable NSArray<__kindof GMVFeature *> *)
    featuresInImage:(UIImage *)image
            options:(nullable NSDictionary *)options;

- (nullable NSArray<__kindof GMVFeature *> *)
    featuresInBuffer:(CMSampleBufferRef)sampleBuffer
             options:(nullable NSDictionary *)options;

מחליפים את GMVDetector ב- MLKTextRecognizer אפשר לקרוא ל-API להסקת מסקנות באופן סינכרוני או אסינכרוני.

סינכרוני

- (nullable MLKText *)
    resultsInImage:(MLKVisionImage *)image
             error:(NSError **)error;

אסינכרוני

- (void)processImage:(MLKVisionImage *)image
    Completion:
        (MLKTextRecognitionCallback)completion
    NS_SWIFT_NAME(process(_:completion:));

משנים את המחלקות, השיטות והשמות הבאים:

GMV ML Kit
GMVDetectorImageOrientation MLKVisionImage.orientation
GMVTextBlockFeature MLKTextBlock
GMVTextElementFeature MLKTextElement
GMVTextLineFeature MLKTextLine

קבלת עזרה

נתקלתם בבעיות? תוכלו לעיין בדף הקהילה שלנו שבו נפרט את הערוצים הזמינים ליצירת קשר איתנו.