Ten dokument zawiera opis czynności, które musisz wykonać, aby przenieść swoje projekty z Google Mobile Vision (GMV) do ML Kit na iOS.
Wymagania wstępne
Zanim rozpoczniesz migrację kodu, upewnij się, że spełniasz te wymagania:
- ML Kit obsługuje Xcode 13.2.1 lub nowsze.
- ML Kit obsługuje system iOS w wersji 10 lub nowszej.
- ML Kit nie obsługuje architektur 32-bitowych (i386 i arv7). ML Kit obsługuje 64-bitowe architektury (x86_64 i Arm64).
Zaktualizuj cocoapods
Zaktualizuj zależności cocoapodów ML Kit na iOS w podpliku:
API | Pod GMV | ML Kit pod |
---|---|---|
Skanowanie kodów kreskowych | GoogleMobileVision/BarcodeDetector |
GoogleMLKit/BarcodeScanning |
Wykrywanie twarzy | GoogleMobileVision/FaceDetector |
GoogleMLKit/FaceDetection |
Rozpoznawanie tekstu | GoogleMobileVision/TextDetector |
GoogleMLKit/TextRecognition |
Ogólne zmiany w interfejsie API
Te zmiany dotyczą wszystkich interfejsów API:
- Interfejsy API do wnioskowania z GMV pobierają dane
UIImage
lubCMSampleBufferRef
. ML Kit umieszcza je wMLKVisionImage
i używa jako danych wejściowych. - GMV używa
NSDictionary
do przekazywania różnych opcji wykrywania. ML Kit używa do tego celu specjalnych klas opcji. - GMV przekazuje typ wzorca do pojedynczej klasy
GMVDetector
po utworzeniu wzorca do wykrywania treści. ML Kit używa dedykowanych klas do tworzenia oddzielnych wzorców do wykrywania treści, skanerów i rozpoznawania. - Interfejsy API GMV obsługują tylko wykrywanie synchroniczne. Interfejsy API do wnioskowania z ML Kit mogą być wywoływane synchronicznie i asynchronicznie.
- GMV obejmuje rozszerzenie
AVCaptureVideoDataOutput
i oferuje platformę z kilkoma wzorcami do wykrywania treści, która umożliwia przeprowadzanie wielu analiz jednocześnie. ML Kit nie udostępnia takich mechanizmów, ale deweloper może w razie potrzeby wdrożyć te same funkcje.
Zmiany dotyczące interfejsu API
W tej sekcji opisano odpowiednie klasy i metody GMV oraz ML Kit dla każdego interfejsu Vision API, a także dowiesz się, jak zainicjować interfejs API.
Wykrywanie twarzy
Przekoduj inicjalizację zgodnie z tym przykładem:
Wartość GMV
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
ma 2 różne interfejsy API do wykrywania. Oba działania są synchroniczne:
- (nullable NSArray<__kindof GMVFeature *> *) featuresInImage:(UIImage *)image options:(nullable NSDictionary *)options; - (nullable NSArray<__kindof GMVFeature *> *) featuresInBuffer:(CMSampleBufferRef)sampleBuffer options:(nullable NSDictionary *)options;
Zastąp GMVDetector
tekstem MLKFaceDetector
.
Interfejs API wnioskowania można wywoływać synchronicznie lub asynchronicznie.
Synchroniczna
- (nullable NSArray<MLKFace *> *) resultsInImage:(MLKVisionImage *)image error:(NSError **)error;
Asynchroniczna
- (void)processImage:(MLKVisionImage *)image Completion: (MLKFaceDetectionCallback)completion NS_SWIFT_NAME(process(_:completion:));
Zmień te klasy, metody i nazwy:
Wzorzec do wykrywania kodu kreskowego
Przekoduj inicjalizację zgodnie z tym przykładem:
Wartość GMV
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
ma 2 różne interfejsy API do wykrywania. Oba działania są synchroniczne:
- (nullable NSArray<__kindof GMVFeature *> *) featuresInImage:(UIImage *)image options:(nullable NSDictionary *)options; - (nullable NSArray<__kindof GMVFeature *> *) featuresInBuffer:(CMSampleBufferRef)sampleBuffer options:(nullable NSDictionary *)options;
Zastąp GMVDetector
wartością MLKBarcodeScanner
.
Interfejs API wnioskowania można wywoływać synchronicznie lub asynchronicznie.
Synchroniczna
- (nullable NSArray<MLKBarcode *> *) resultsInImage:(MLKVisionImage *)image error:(NSError **)error;
Asynchroniczna
- (void)processImage:(MLKVisionImage *)image Completion: (MLKBarcodeScanningCallback)completion NS_SWIFT_NAME(process(_:completion:));
Zmień te klasy, metody i nazwy:
Rozpoznawanie tekstu
Przekoduj inicjalizację zgodnie z tym przykładem:
Wartość GMV
GMVDetector *textDetector = [GMVDetector detectorOfType:GMVDetectorTypeText options:nil];
ML Kit
MLKTextRecognizer *textRecognizer = [MLKTextRecognizer textRecognizer];
GMVDetector
ma 2 różne interfejsy API do wykrywania. Oba działania są synchroniczne:
- (nullable NSArray<__kindof GMVFeature *> *) featuresInImage:(UIImage *)image options:(nullable NSDictionary *)options; - (nullable NSArray<__kindof GMVFeature *> *) featuresInBuffer:(CMSampleBufferRef)sampleBuffer options:(nullable NSDictionary *)options;
Zastąp GMVDetector
wartością MLKTextRecognizer
.
Interfejs API wnioskowania można wywoływać synchronicznie lub asynchronicznie.
Synchroniczna
- (nullable MLKText *) resultsInImage:(MLKVisionImage *)image error:(NSError **)error;
Asynchroniczna
- (void)processImage:(MLKVisionImage *)image Completion: (MLKTextRecognitionCallback)completion NS_SWIFT_NAME(process(_:completion:));
Zmień te klasy, metody i nazwy:
Wartość GMV | ML Kit |
---|---|
GMVDetectorImageOrientation
|
MLKVisionImage.orientation
|
GMVTextBlockFeature
|
MLKTextBlock
|
GMVTextElementFeature
|
MLKTextElement
|
GMVTextLineFeature
|
MLKTextLine
|
Uzyskiwanie pomocy
W razie problemów zajrzyj na stronę Społeczność, aby przedstawić kanały, w których można się z nami skontaktować.