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

本文档介绍了将项目从 Google Mobile Vision (GMV) 迁移到 iOS 上的机器学习套件所需执行的步骤。

前提条件

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

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

更新 CocoaPods

在应用的 Podfile 中更新机器学习套件 iOS CocoaPods 的依赖项:

API总交易额 (GMV) 团队机器学习套件 Pod
条形码扫描 GoogleMobileVision/BarcodeDetector GoogleMLKit/BarcodeScanning
人脸检测 GoogleMobileVision/FaceDetector GoogleMLKit/FaceDetection
文本识别 GoogleMobileVision/TextDetector GoogleMLKit/TextRecognition

整体 API 变更

这些更改适用于所有 API:

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

特定于 API 的更改

本部分介绍了每个 Vision API 对应的 GMV 和机器学习套件类和方法,并展示了如何初始化该 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:));

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

总交易额 机器学习套件
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];

机器学习套件

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

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

总交易额 机器学习套件
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];

机器学习套件

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

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

总交易额 机器学习套件
GMVDetectorImageOrientation MLKVisionImage.orientation
GMVTextBlockFeature MLKTextBlock
GMVTextElementFeature MLKTextElement
GMVTextLineFeature MLKTextLine

获取帮助

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