在 iOS 上从 Mobile Vision 迁移到机器学习套件

本文档介绍了将项目从 Google 移动视觉 (GMV) 迁移到 iOS 上的 ML Kit 所需执行的步骤。

前提条件

在开始迁移代码之前,请确保您满足以下要求:

  • 机器学习套件支持 Xcode 13.2.1 或更高版本。
  • 机器学习套件支持 iOS 15.5 或更高版本。
  • 机器学习套件不支持 32 位架构 (i386 和 armv7)。机器学习套件支持 64 位架构(x86_64 和 arm64)。

更新 cocoapods

在应用的 Podfile 中更新 ML Kit iOS cocoapods 的依赖项:

APIGMV PodML Kit Pod
条形码扫描 GoogleMobileVision/BarcodeDetector GoogleMLKit/BarcodeScanning
人脸检测 GoogleMobileVision/FaceDetector GoogleMLKit/FaceDetection
文本识别 GoogleMobileVision/TextDetector GoogleMLKit/TextRecognition

整体 API 变更

以下更改适用于所有 API:

  • GMV 的推理 API 接受 UIImageCMSampleBufferRef 作为输入。机器学习套件会将它们封装在 MLKVisionImage 中,并将其作为输入。
  • GMV 使用 NSDictionary 传递各种检测器选项。机器学习套件会使用专用选项类来实现此目的。
  • GMV 在创建检测器时会将检测器类型传递给单个 GMVDetector 类。ML Kit 使用专用类来创建单独的检测器、扫描器和识别器实例。
  • GMV 的 API 仅支持同步检测。您可以同步和异步调用机器学习套件的推理 API。
  • GMV 扩展了 AVCaptureVideoDataOutput,并提供了一个多检测器框架,用于同时执行多项检测。机器学习套件不提供此类机制,但开发者可以根据需要实现相同的功能。

特定于 API 的更改

本部分介绍了每个 Vision API 对应的 GMV 和 ML Kit 类和方法,并介绍了如何初始化 API。

FaceDetector

重新编码初始化,如以下示例所示:

GMV

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

更改以下类、方法和名称:

GMV 机器学习套件
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

重新编码初始化,如以下示例所示:

GMV

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

更改以下类、方法和名称:

GMV 机器学习套件
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

重新编码初始化,如以下示例所示:

GMV

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

更改以下类、方法和名称:

GMV 机器学习套件
GMVDetectorImageOrientation MLKVisionImage.orientation
GMVTextBlockFeature MLKTextBlock
GMVTextElementFeature MLKTextElement
GMVTextLineFeature MLKTextLine

获取帮助

如果您遇到任何问题,请访问我们的“社区”页面,其中列出了可用于与我们联系的渠道。