Bermigrasi dari Mobile Vision ke ML Kit di iOS

Dokumen ini membahas langkah-langkah yang perlu Anda lakukan untuk memigrasikan project dari Google Mobile Vision (GMV) ke ML Kit di iOS.

Prasyarat

Sebelum mulai memigrasikan kode, pastikan Anda memenuhi persyaratan berikut:

  • ML Kit mendukung Xcode 13.2.1 atau yang lebih baru.
  • ML Kit mendukung iOS versi 15.5 atau yang lebih baru.
  • ML Kit tidak mendukung arsitektur 32-bit (i386 dan armv7). ML Kit mendukung arsitektur 64-bit (x86_64 dan arm64).

Mengupdate cocoapods

Perbarui dependensi untuk cocoapods iOS ML Kit di Podfile aplikasi Anda:

APIPod GMVPod ML Kit
Pemindaian kode batang GoogleMobileVision/BarcodeDetector GoogleMLKit/BarcodeScanning
Deteksi wajah GoogleMobileVision/FaceDetector GoogleMLKit/FaceDetection
Pengenalan teks GoogleMobileVision/TextDetector GoogleMLKit/TextRecognition

Perubahan API secara keseluruhan

Perubahan ini berlaku untuk semua API:

  • API inferensi GMV menggunakan UIImage atau CMSampleBufferRef sebagai input. ML Kit menggabungkannya di dalam MLKVisionImage dan menggunakannya sebagai input.
  • GMV menggunakan NSDictionary untuk meneruskan berbagai opsi detektor. ML Kit menggunakan class opsi khusus untuk tujuan tersebut.
  • GMV meneruskan jenis detektor ke class GMVDetector tunggal saat membuat detektor. ML Kit menggunakan class khusus untuk membuat instance pendeteksi, pemindai, dan pengenal terpisah.
  • API GMV hanya mendukung deteksi sinkron. API inferensi ML Kit dapat dipanggil secara sinkron dan asinkron.
  • GMV memperluas AVCaptureVideoDataOutput dan menyediakan framework multi-detektor untuk melakukan beberapa deteksi secara bersamaan. ML Kit tidak menyediakan mekanisme tersebut, tetapi fungsi yang sama dapat diterapkan oleh developer jika diinginkan.

Perubahan khusus API

Bagian ini menjelaskan class dan metode GMV dan ML Kit yang sesuai untuk setiap Vision API, dan menunjukkan cara menginisialisasi API.

FaceDetector

Kode ulang inisialisasi seperti yang ditunjukkan dalam contoh ini:

GMVML Kit
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 memiliki dua API deteksi yang berbeda. Keduanya adalah operasi sinkron:

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

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

Ganti GMVDetector dengan MLKFaceDetector. API inferensi dapat dipanggil secara sinkron atau asinkron.

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

Ubah class, metode, dan nama berikut:

BarcodeDetector

Kode ulang inisialisasi seperti yang ditunjukkan dalam contoh ini:

GMVML Kit
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 memiliki dua API deteksi yang berbeda. Keduanya adalah operasi sinkron:

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

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

Ganti GMVDetector dengan MLKBarcodeScanner. API inferensi dapat dipanggil secara sinkron atau asinkron.

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

Ubah class, metode, dan nama berikut:

TextRecognition

Kode ulang inisialisasi seperti yang ditunjukkan dalam contoh ini:

GMVML Kit
GMVDetector *textDetector =
    [GMVDetector detectorOfType:GMVDetectorTypeText options:nil];
MLKTextRecognizer *textRecognizer = [MLKTextRecognizer textRecognizer];

GMVDetector memiliki dua API deteksi yang berbeda. Keduanya adalah operasi sinkron:

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

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

Ganti GMVDetector dengan MLKTextRecognizer. API inferensi dapat dipanggil secara sinkron atau asinkron.

- (nullable MLKText *)
    resultsInImage:(MLKVisionImage *)image
             error:(NSError **)error;
- (void)processImage:(MLKVisionImage *)image
    Completion:
        (MLKTextRecognitionCallback)completion
    NS_SWIFT_NAME(process(_:completion:));

Ubah class, metode, dan nama berikut:

Mendapatkan bantuan

Jika Anda mengalami masalah, lihat halaman Komunitas kami yang menjelaskan saluran yang tersedia untuk menghubungi kami.