Ten dokument zawiera informacje o tym, jak przeprowadzić migrację projektów z Google Mobile Vision (GMV) do ML Kit na iOS.
Wymagania wstępne
Zanim zaczniesz migrować kod, upewnij się, że spełniasz te wymagania:
- ML Kit obsługuje Xcode w wersji 13.2.1 lub nowszej.
- ML Kit obsługuje iOS w wersji 15.5 lub nowszej.
- ML Kit nie obsługuje architektur 32-bitowych (i386 i armv7). ML Kit obsługuje architektury 64-bitowe (x86_64 i arm64).
Aktualizowanie cocoapods
Zaktualizuj zależności dla ML Kit iOS cocoapods w pliku Podfile aplikacji:
| Interfejs API | GMV Pod | 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 GMV API do wnioskowania przyjmują jako dane wejściowe
UIImagelubCMSampleBufferRef. ML Kit opakowuje je wMLKVisionImagei przyjmuje jako dane wejściowe. - GMV uses
NSDictionarydo przekazywania różnych opcji detektora. ML Kit używa do tego specjalnych klas opcji. - GMV przekazuje typ detektora do pojedynczej
GMVDetectorklasy podczas tworzenia detektora. ML Kit używa specjalnych klas do tworzenia oddzielnych instancji detektora, skanera i rozpoznawania. - Interfejsy GMV API obsługują tylko wykrywanie synchroniczne. Interfejsy ML Kit API do wnioskowania można wywoływać synchronicznie i asynchronicznie.
- GMV rozszerza
AVCaptureVideoDataOutputi udostępnia framework z wieloma detektorami do wykonywania wielu wykryć jednocześnie. ML Kit nie udostępnia takich mechanizmów, ale deweloper może w razie potrzeby zaimplementować tę samą funkcję.
Zmiany w interfejsie API
W tej sekcji opisujemy odpowiednie klasy i metody GMV i ML Kit dla każdego interfejsu Vision API oraz pokazujemy, jak zainicjować interfejs API.
FaceDetector
Zmień kod inicjowania zgodnie z tym przykładem:
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 są operacjami synchronicznymi:
- (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 elementem MLKFaceDetector.
Interfejs API do wnioskowania można wywoływać synchronicznie lub asynchronicznie.
Synchroniczna
- (nullable NSArray<MLKFace *> *) resultsInImage:(MLKVisionImage *)image error:(NSError **)error;
Asynchroniczny
- (void)processImage:(MLKVisionImage *)image Completion: (MLKFaceDetectionCallback)completion NS_SWIFT_NAME(process(_:completion:));
Zmień te klasy, metody i nazwy:
BarcodeDetector
Zmień kod inicjowania zgodnie z tym przykładem:
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 są operacjami synchronicznymi:
- (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 elementem
MLKBarcodeScanner.
Interfejs API do wnioskowania można wywoływać synchronicznie lub asynchronicznie.
Synchroniczna
- (nullable NSArray<MLKBarcode *> *) resultsInImage:(MLKVisionImage *)image error:(NSError **)error;
Asynchroniczny
- (void)processImage:(MLKVisionImage *)image Completion: (MLKBarcodeScanningCallback)completion NS_SWIFT_NAME(process(_:completion:));
Zmień te klasy, metody i nazwy:
TextRecognition
Zmień kod inicjowania zgodnie z tym przykładem:
GMV
GMVDetector *textDetector = [GMVDetector detectorOfType:GMVDetectorTypeText options:nil];
ML Kit
MLKTextRecognizer *textRecognizer = [MLKTextRecognizer textRecognizer];
GMVDetector ma 2 różne interfejsy API do wykrywania. Oba są operacjami synchronicznymi:
- (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 elementem
MLKTextRecognizer.
Interfejs API do wnioskowania można wywoływać synchronicznie lub asynchronicznie.
Synchroniczna
- (nullable MLKText *) resultsInImage:(MLKVisionImage *)image error:(NSError **)error;
Asynchroniczny
- (void)processImage:(MLKVisionImage *)image Completion: (MLKTextRecognitionCallback)completion NS_SWIFT_NAME(process(_:completion:));
Zmień te klasy, metody i nazwy:
| GMV | ML Kit |
|---|---|
GMVDetectorImageOrientation
|
MLKVisionImage.orientation
|
GMVTextBlockFeature
|
MLKTextBlock
|
GMVTextElementFeature
|
MLKTextElement
|
GMVTextLineFeature
|
MLKTextLine
|
Uzyskiwanie pomocy
Jeśli napotkasz jakieś problemy, zajrzyj na stronę społeczności , na której znajdziesz informacje o kanałach, za pomocą których możesz się z nami skontaktować.