مهاجرت از Mobile Vision به کیت ML در iOS

این سند مراحلی را که باید برای انتقال پروژه‌های خود از Google Mobile Vision (GMV) به ML Kit در iOS انجام دهید، پوشش می‌دهد.

پیش‌نیازها

قبل از شروع به انتقال کد خود، مطمئن شوید که این الزامات را برآورده می‌کنید:

  • کیت ML از Xcode نسخه ۱۳.۲.۱ یا بالاتر پشتیبانی می‌کند.
  • ML Kit از iOS نسخه ۱۵.۵ یا بالاتر پشتیبانی می‌کند.
  • ML Kit از معماری‌های ۳۲ بیتی (i386 و armv7) پشتیبانی نمی‌کند. ML Kit از معماری‌های ۶۴ بیتی (x86_64 و arm64) پشتیبانی می‌کند.

کاکائوپادها را به‌روزرسانی کنید

وابستگی‌های cocoapods مربوط به ML Kit iOS را در Podfile برنامه خود به‌روزرسانی کنید:

رابط برنامه‌نویسی کاربردی غلاف GMV پاد کیت 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 را نشان می‌دهد.

آشکارساز چهره

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

جی ام وی

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

کیت ML

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

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

جی ام وی کیت ML
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];

کیت ML

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

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

جی ام وی کیت ML
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];

کیت ML

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 جایگزین کنید. رابط برنامه‌نویسی استنتاج (inference API) را می‌توان به صورت همزمان یا غیرهمزمان فراخوانی کرد.

همزمان

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

ناهمزمان

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

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

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

دریافت کمک

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