В этом документе описаны шаги, которые необходимо предпринять для переноса проектов из 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
Обновите зависимости для cocoapods ML Kit для iOS в файле Podfile вашего приложения:
| API | GMV Pod | ML Kit 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 для каждого Vision API, а также показано, как инициализировать API.
FaceDetector
Перекодируйте инициализацию, как показано в этом примере:
Стоимость выполненных заказов
NSDictionary *options = @{ GMVDetectorFaceMode : @(GMVDetectorFaceAccurateMode), GMVDetectorFaceClassificationType : @(GMVDetectorFaceClassificationAll), GMVDetectorFaceLandmarkType : @(GMVDetectorFaceLandmarkAll) }; GMVDetector *faceDetector = [GMVDetector detectorOfType:GMVDetectorTypeFace options:options];
ML Kit
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];
ML Kit
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];
ML Kit
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:));
Измените следующие классы, методы и названия:
| Стоимость выполненных заказов | ML Kit |
|---|---|
GMVDetectorImageOrientation
|
MLKVisionImage.orientation
|
GMVTextBlockFeature
|
MLKTextBlock
|
GMVTextElementFeature
|
MLKTextElement
|
GMVTextLineFeature
|
MLKTextLine
|
Помощь
Если у вас возникнут проблемы, посетите страницу сообщества, где указаны доступные каналы связи с нами.