В этом документе описываются шаги, которые необходимо предпринять для переноса проектов из 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).
Обновление кокосопод
Обновите зависимости для Cocoapods ML Kit iOS в Podfile вашего приложения:
API | GMV-под | Комплект ML Pod |
---|---|---|
Сканирование штрих-кода | GoogleMobileVision/BarcodeDetector | GoogleMLKit/BarcodeScanning |
Распознавание лиц | GoogleMobileVision/FaceDetector | GoogleMLKit/FaceDetection |
Распознавание текста | GoogleMobileVision/TextDetector | GoogleMLKit/TextRecognition |
Общие изменения API
Эти изменения применяются ко всем API:
- API вывода GMV принимают
UIImage
илиCMSampleBufferRef
в качестве входных данных. ML Kit оборачивает их вMLKVisionImage
и принимает его в качестве входных данных. - GMV использует
NSDictionary
для передачи различных опций детектора. ML Kit использует для этой цели выделенные классы опций. - GMV передает тип детектора в один класс
GMVDetector
при создании детектора. ML Kit использует выделенные классы для создания отдельных экземпляров детектора, сканера и распознавателя. - API GMV поддерживают только синхронное обнаружение. API вывода ML Kit могут вызываться синхронно и асинхронно.
- GMV расширяет
AVCaptureVideoDataOutput
и предоставляет многодетекторную структуру для выполнения нескольких обнаружений одновременно. ML Kit не предоставляет таких механизмов, но та же функциональность может быть реализована разработчиком при желании.
Изменения, специфичные для API
В этом разделе описываются соответствующие классы и методы GMV и ML Kit для каждого API Vision, а также показано, как инициализировать 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:));
Измените следующие классы, методы и имена:
Распознавание текста
Перекодируйте инициализацию, как показано в этом примере:
ГМВ
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 |
Получение помощи
Если у вас возникнут какие-либо проблемы, посетите страницу нашего сообщества , где мы описываем доступные каналы связи с нами.