این سند مراحلی را که باید برای انتقال پروژههایتان از Google Mobile Vision (GMV) به ML Kit در iOS انجام دهید پوشش میدهد.
پیشنیازها
قبلاز شروع انتقال کد، مطمئن شوید که این الزامات را برآورده میکنید:
- ML Kit از Xcode نسخه ۱۳.۲.۱ یا بالاتر پشتیبانی میکند.
- ML Kit از iOS نسخه ۱۵.۵ یا بالاتر پشتیبانی میکند.
- ML Kit از معماریهای ۳۲ بیتی (i386 و armv7) پشتیبانی نمیکند. ML Kit از معماریهای ۶۴ بیتی (x86_64 و arm64) پشتیبانی میکند.
بهروزرسانی cocoapods
وابستگیهای cocoapods کیت یادگیری ماشین iOS را در Podfile برنامهتان بهروز کنید:
| میانای برنامهسازی کاربردی | GMV Pod | ML Kit Pod |
|---|---|---|
| اسکن کردن رمزینه | GoogleMobileVision/BarcodeDetector |
GoogleMLKit/BarcodeScanning |
| تشخیص چهره | GoogleMobileVision/FaceDetector |
GoogleMLKit/FaceDetection |
| تشخیص نوشتار | GoogleMobileVision/TextDetector |
GoogleMLKit/TextRecognition |
تغییرات کلی میانای برنامهسازی کاربردی
این تغییرات برای همه میاناهای برنامهسازی کاربردی اعمال میشود:
- میاناهای برنامهسازی کاربردی استنتاج GMV،
UIImageیاCMSampleBufferRefرا بهعنوان ورودی میگیرند. ML Kit آنها را در یکMLKVisionImageمیپیچد و آن را بهعنوان ورودی میگیرد. - GMV از
NSDictionaryبرای ارسال گزینههای مختلف آشکارساز استفاده میکند. «کیت یادگیری ماشین» برای این منظور از کلاسهای گزینههای اختصاصی استفاده میکند. - GMV نوع آشکارساز را هنگام ایجاد آشکارساز به کلاس تکی
GMVDetectorارسال میکند. ML Kit از کلاسهای اختصاصی برای ایجاد نمونههای جداگانه آشکارساز، اسکنر، و تشخیصدهنده استفاده میکند. - میاناهای برنامهسازی کاربردی GMV فقط از تشخیص همگام پشتیبانی میکنند. میاناهای برنامهسازی کاربردی استنتاج ML Kit را میتوان بهصورت همزمان و ناهمزمان فراخوانی کرد.
- GMV
AVCaptureVideoDataOutputرا گسترش میدهد و چارچوب چندآشکارساز را برای انجام چندین تشخیص بهطور همزمان ارائه میدهد. «کیت یادگیری ماشین» چنین سازوکارهایی را ارائه نمیدهد، اما درصورت تمایل، توسعهدهنده میتواند همان عملکرد را پیادهسازی کند.
تغییرات مختص میانای برنامهسازی کاربردی
این بخش کلاسها و روشهای 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 دو میانای برنامهسازی کاربردی تشخیص متفاوت دارد. هر دو عملیات همگام هستند:
- (nullable NSArray<__kindof GMVFeature *> *) featuresInImage:(UIImage *)image options:(nullable NSDictionary *)options; - (nullable NSArray<__kindof GMVFeature *> *) featuresInBuffer:(CMSampleBufferRef)sampleBuffer options:(nullable NSDictionary *)options;
GMVDetector را با MLKFaceDetector جایگزین کنید.
میانای برنامهسازی کاربردی استنتاج را میتوان بهصورت همزمان یا ناهمزمان فراخوانی کرد.
همگام
- (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 دو میانای برنامهسازی کاربردی تشخیص متفاوت دارد. هر دو عملیات همگام هستند:
- (nullable NSArray<__kindof GMVFeature *> *) featuresInImage:(UIImage *)image options:(nullable NSDictionary *)options; - (nullable NSArray<__kindof GMVFeature *> *) featuresInBuffer:(CMSampleBufferRef)sampleBuffer options:(nullable NSDictionary *)options;
GMVDetector را با
MLKBarcodeScanner جایگزین کنید.
میانای برنامهسازی کاربردی استنتاج را میتوان بهصورت همگام یا ناهمگام فراخوانی کرد.
همگام
- (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 دو میانای برنامهسازی کاربردی تشخیص متفاوت دارد. هر دو عملیات همگام هستند:
- (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 Kit |
|---|---|
GMVDetectorImageOrientation
|
MLKVisionImage.orientation
|
GMVTextBlockFeature
|
MLKTextBlock
|
GMVTextElementFeature
|
MLKTextElement
|
GMVTextLineFeature
|
MLKTextLine
|
دریافت راهنمایی
اگر با مشکلی مواجه شدید، صفحه انجمن ما را بررسی کنید که در آن کانالهای موجود برای تماس با ما را شرح دادهایم.