انتقال از Mobile Vision به ML Kit در iOS

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

پیش‌نیازها

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

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

به‌روزرسانی cocoapods

وابستگی‌های cocoapods کیت یادگیری ماشین iOS را در Podfile برنامه‌تان به‌روز کنید:

میانای برنامه‌سازی کاربردیGMV PodML Kit Pod
اسکن کردن رمزینه GoogleMobileVision/BarcodeDetector GoogleMLKit/BarcodeScanning
تشخیص چهره GoogleMobileVision/FaceDetector GoogleMLKit/FaceDetection
تشخیص نوشتار GoogleMobileVision/TextDetector GoogleMLKit/TextRecognition

تغییرات کلی میانای برنامه‌سازی کاربردی

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

  • میاناهای برنامه‌سازی کاربردی استنتاج GMV،‏ UIImage یا CMSampleBufferRef را به‌عنوان ورودی می‌گیرند. ML Kit آن‌ها را در یک MLKVisionImage می‌پیچد و آن را به‌عنوان ورودی می‌گیرد.
  • ‫GMV از NSDictionary برای ارسال گزینه‌های مختلف آشکارساز استفاده می‌کند. «کیت یادگیری ماشین» برای این منظور از کلاس‌های گزینه‌های اختصاصی استفاده می‌کند.
  • ‫GMV نوع آشکارساز را هنگام ایجاد آشکارساز به کلاس تکی GMVDetector ارسال می‌کند. ML Kit از کلاس‌های اختصاصی برای ایجاد نمونه‌های جداگانه آشکارساز، اسکنر، و تشخیص‌دهنده استفاده می‌کند.
  • میاناهای برنامه‌سازی کاربردی GMV فقط از تشخیص همگام پشتیبانی می‌کنند. میاناهای برنامه‌سازی کاربردی استنتاج ML Kit را می‌توان به‌صورت هم‌زمان و ناهم‌زمان فراخوانی کرد.
  • ‫GMV‏ AVCaptureVideoDataOutput را گسترش می‌دهد و چارچوب چندآشکارساز را برای انجام چندین تشخیص به‌طور هم‌زمان ارائه می‌دهد. «کیت یادگیری ماشین» چنین سازوکارهایی را ارائه نمی‌دهد، اما درصورت تمایل، توسعه‌دهنده می‌تواند همان عملکرد را پیاده‌سازی کند.

تغییرات مختص میانای برنامه‌سازی کاربردی

این بخش کلاس‌ها و روش‌های GMV و ML Kit مربوطه را برای هر Vision API شرح می‌دهد و نحوه مقداردهی اولیه API را نشان می‌دهد.

FaceDetector

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

ارزش ناخالص کالا

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 دو میانای برنامه‌سازی کاربردی تشخیص متفاوت دارد. هر دو عملیات همگام هستند:

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

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

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

همگام

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

غیرهمگام

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

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

ارزش ناخالص کالا 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

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

ارزش ناخالص کالا

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 دو میانای برنامه‌سازی کاربردی تشخیص متفاوت دارد. هر دو عملیات همگام هستند:

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

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

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

همگام

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

غیرهمگام

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

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

ارزش ناخالص کالا 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

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

ارزش ناخالص کالا

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

ML Kit

MLKTextRecognizer *textRecognizer = [MLKTextRecognizer textRecognizer];

GMVDetector دو میانای برنامه‌سازی کاربردی تشخیص متفاوت دارد. هر دو عملیات همگام هستند:

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

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

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

همگام

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

غیرهمگام

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

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

ارزش ناخالص کالا ML Kit
GMVDetectorImageOrientation MLKVisionImage.orientation
GMVTextBlockFeature MLKTextBlock
GMVTextElementFeature MLKTextElement
GMVTextLineFeature MLKTextLine

دریافت راهنمایی

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