在 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

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

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

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

BarcodeDetector

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

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

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

TextRecognition

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

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

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

获取帮助

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