В этом документе описаны шаги, необходимые для миграции ваших проектов из 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 для каждого API Vision, а также показано, как инициализировать API.
FaceDetector
Перепишите инициализацию, как показано в этом примере:
GMV
NSDictionary *options = @{ GMVDetectorFaceMode : @(GMVDetectorFaceAccurateMode), GMVDetectorFaceClassificationType : @(GMVDetectorFaceClassificationAll), GMVDetectorFaceLandmarkType : @(GMVDetectorFaceLandmarkAll) }; GMVDetector *faceDetector = [GMVDetector detectorOfType:GMVDetectorTypeFace options:options];
Набор ML
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
NSDictionary *options = @{ GMVDetectorBarcodeFormats : @(GMVDetectorBarcodeFormatCode128 | GMVDetectorBarcodeFormatQRCode) }; GMVDetector *barcodeDetector = [GMVDetector detectorOfType:GMVDetectorTypeBarcode options:options];
Набор ML
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
GMVDetector *textDetector = [GMVDetector detectorOfType:GMVDetectorTypeText options:nil];
Набор ML
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 | Набор ML |
|---|---|
GMVDetectorImageOrientation | MLKVisionImage.orientation |
GMVTextBlockFeature | MLKTextBlock |
GMVTextElementFeature | MLKTextElement |
GMVTextLineFeature | MLKTextLine |
Получение помощи
Если у вас возникнут какие-либо проблемы, посетите нашу страницу «Сообщество» , где мы описываем доступные каналы связи с нами.