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

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

پیش نیازها

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

  • ML Kit از Xcode 13.2.1 یا جدیدتر پشتیبانی می کند.
  • ML Kit از iOS نسخه 15.5 یا بالاتر پشتیبانی می کند.
  • 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;

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

- (nullable NSArray<MLKFace *> *)
    resultsInImage:(MLKVisionImage *)image
             error:(NSError **)error;
- (void)processImage:(MLKVisionImage *)image
    Completion:
        (MLKFaceDetectionCallback)completion
    NS_SWIFT_NAME(process(_:completion:));

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

بارکد یاب

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

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

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

تشخیص متن

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

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

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

کمک گرفتن

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