مهاجرت از Mobile Vision به کیت ML در 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) پشتیبانی می کند.

کوکوپودها را به روز کنید

وابستگی های کوکوپودهای iOS کیت ML را در فایل پادفایل برنامه خود به روز کنید:

API جی ام وی پاد کیت غلاف ML
اسکن بارکد GoogleMobileVision/BarcodeDetector GoogleMLKit/BarcodeScanning
شناسایی چهره GoogleMobileVision/FaceDetector GoogleMLKit/FaceDetection
تشخیص متن GoogleMobileVision/TextDetector GoogleMLKit/TextRecognition

تغییرات کلی API

این تغییرات برای همه API ها اعمال می شود:

  • API های استنتاج GMV UIImage یا CMSampleBufferRef را به عنوان ورودی می گیرند. کیت ML آنها را در داخل یک 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 را نشان می‌دهد.

تشخیص چهره

همانطور که در این مثال نشان داده شده است، مقداردهی اولیه را دوباره کدگذاری کنید:

جی ام وی

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

کیت ام ال

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;

MLKFaceDetector را جایگزین GMVDetector کنید. API استنتاج را می توان به صورت همزمان یا ناهمزمان فراخوانی کرد.

همزمان

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

نامتقارن

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

کلاس ها، متدها و نام های زیر را تغییر دهید:

جی ام وی کیت ام ال
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

بارکد یاب

همانطور که در این مثال نشان داده شده است، مقداردهی اولیه را دوباره کدگذاری کنید:

جی ام وی

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

کیت ام ال

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:));

کلاس ها، متدها و نام های زیر را تغییر دهید:

جی ام وی کیت ام ال
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

تشخیص متن

همانطور که در این مثال نشان داده شده است، مقداردهی اولیه را دوباره کدگذاری کنید:

جی ام وی

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

کیت ام ال

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:));

کلاس ها، متدها و نام های زیر را تغییر دهید:

جی ام وی کیت ام ال
GMVDetectorImageOrientation MLKVisionImage.orientation
GMVTextBlockFeature MLKTextBlock
GMVTextElementFeature MLKTextElement
GMVTextLineFeature MLKTextLine

کمک گرفتن

اگر با مشکلی مواجه شدید، صفحه انجمن ما را بررسی کنید، جایی که ما کانال‌های موجود برای تماس با ما را مشخص می‌کنیم.