این سند مراحلی را که باید برای انتقال پروژههای خود از Google Mobile Vision (GMV) به ML Kit در iOS انجام دهید، پوشش میدهد.
قبل از شروع به انتقال کد خود، مطمئن شوید که این الزامات را برآورده میکنید:
- کیت ML از Xcode نسخه ۱۳.۲.۱ یا بالاتر پشتیبانی میکند.
- ML Kit از iOS نسخه ۱۵.۵ یا بالاتر پشتیبانی میکند.
- ML Kit از معماریهای ۳۲ بیتی (i386 و armv7) پشتیبانی نمیکند. ML Kit از معماریهای ۶۴ بیتی (x86_64 و arm64) پشتیبانی میکند.
وابستگیهای cocoapods مربوط به ML Kit iOS را در Podfile برنامه خود بهروزرسانی کنید:
| رابط برنامهنویسی کاربردی | غلاف GMV | پاد کیت ML |
|---|---|---|
| اسکن بارکد | GoogleMobileVision/BarcodeDetector | GoogleMLKit/BarcodeScanning |
| تشخیص چهره | GoogleMobileVision/FaceDetector | GoogleMLKit/FaceDetection |
| تشخیص متن | GoogleMobileVision/TextDetector | GoogleMLKit/TextRecognition |
این تغییرات برای همه 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 چنین مکانیسمهایی را ارائه نمیدهد، اما در صورت تمایل، توسعهدهنده میتواند همین عملکرد را پیادهسازی کند.
این بخش کلاسها و متدهای مربوط به GMV و ML Kit را برای هر Vision API شرح میدهد و نحوه مقداردهی اولیه API را نشان میدهد.
مقداردهی اولیه را همانطور که در این مثال نشان داده شده است، بازنویسی کنید:
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:));
کلاسها، متدها و نامهای زیر را تغییر دهید:
مقداردهی اولیه را همانطور که در این مثال نشان داده شده است، بازنویسی کنید:
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 جایگزین کنید. رابط برنامهنویسی استنتاج (inference 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 جایگزین کنید. رابط برنامهنویسی استنتاج میتواند به صورت همزمان یا غیرهمزمان فراخوانی شود.
- (nullable MLKText *) resultsInImage:(MLKVisionImage *)image error:(NSError **)error;
- (void)processImage:(MLKVisionImage *)image Completion: (MLKTextRecognitionCallback)completion NS_SWIFT_NAME(process(_:completion:));
کلاسها، متدها و نامهای زیر را تغییر دهید:
| جی ام وی | کیت ML |
|---|---|
GMVDetectorImageOrientation | MLKVisionImage.orientation |
GMVTextBlockFeature | MLKTextBlock |
GMVTextElementFeature | MLKTextElement |
GMVTextLineFeature | MLKTextLine |
اگر با هرگونه مشکلی مواجه شدید، به صفحه انجمن ما مراجعه کنید، جایی که کانالهای موجود برای ارتباط با ما را شرح دادهایم.