การย้ายข้อมูลจาก Mobile Vision ไปยัง ML Kit บน iOS

เอกสารนี้ครอบคลุมถึงขั้นตอนที่คุณต้องทำเพื่อย้ายข้อมูลโปรเจ็กต์ Google Mobile Vision (GMV) ไปยัง ML Kit บน iOS

ข้อกำหนดเบื้องต้น

ก่อนที่จะเริ่มย้ายข้อมูลโค้ด โปรดตรวจสอบว่าคุณมีคุณสมบัติตรงตามข้อกำหนดต่อไปนี้

  • ML Kit รองรับ Xcode 13.2.1 หรือใหม่กว่า
  • ML Kit รองรับ iOS เวอร์ชัน 10 หรือใหม่กว่า
  • ML Kit ไม่รองรับสถาปัตยกรรม 32 บิต (i386 และ armv7) ML Kit รองรับสถาปัตยกรรม 64 บิต (x86_64 และ arm64)

อัปเดต CocoaPod

อัปเดตทรัพยากร Dependency สำหรับ CocoaPods ของ ML Kit บน iOS ใน Podfile ของแอป โดยทำดังนี้

APIพ็อด GMVพ็อด ML Kit
การสแกนบาร์โค้ด 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 สำหรับ Vision API แต่ละรายการ รวมถึงแสดงวิธีเริ่มต้นใช้งาน API

FaceDetector

เขียนโค้ดการเริ่มต้นใหม่ดังที่แสดงในตัวอย่างนี้

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 มี 2 รายการ API การตรวจจับต่างๆ การดำเนินการทั้ง 2 รายการเป็นการดำเนินการแบบซิงโครนัส ดังนี้

- (nullable NSArray<__kindof GMVFeature *> *)
    featuresInImage:(UIImage *)image
            options:(nullable NSDictionary *)options;

- (nullable NSArray<__kindof GMVFeature *> *)
    featuresInBuffer:(CMSampleBufferRef)sampleBuffer
             options:(nullable NSDictionary *)options;

แทนที่ GMVDetector ด้วย MLKFaceDetector โดย Inference API อาจเรียกแบบซิงโครนัสหรืออะซิงโครนัสได้

พร้อมกัน

- (nullable NSArray<MLKFace *> *)
    resultsInImage:(MLKVisionImage *)image
             error:(NSError **)error;

อะซิงโครนัส

- (void)processImage:(MLKVisionImage *)image
    Completion:
        (MLKFaceDetectionCallback)completion
    NS_SWIFT_NAME(process(_:completion:));

เปลี่ยนคลาส เมธอด และชื่อต่อไปนี้

GMV ML Kit
GMVFaceFeature MLKFace
GMVFaceContour MLKFaceContour
GMVDetectorImageOrientation MLKVisionImage.orientation
ตัวเลือกการตรวจจับใบหน้า NSDictionary MLKFaceDetectorOptions
GMVDetectorFaceFastMode Set MLKFaceDetectorOptions.performanceMode to MLKFaceDetectorPerformanceModeFast
GMVDetectorFaceAccurateMode Set MLKFaceDetectorOptions.performanceMode to MLKFaceDetectorPerformanceModeAccurate
GMVDetectorFaceSelfieMode Set MLKFaceDetectorOptions.contourMode to MLKFaceDetectorContourModeAll
GMVDetectorFaceLandmarkType MLKFaceDetectorOptions.landmarkMode
GMVDetectorFaceLandmarkNone Set MLKFaceDetectorOptions.landmarkMode to MLKFaceDetectorLandmarkModeNone
GMVDetectorFaceLandmarkAll Set MLKFaceDetectorOptions.landmarkMode to MLKFaceDetectorLandmarkModeAll
GMVDetectorFaceLandmarkContour Set MLKFaceDetectorOptions.contourMode to MLKFaceDetectorContourModeAll
GMVDetectorFaceClassificationType MLKFaceDetectorOptions.classificationMode
GMVDetectorFaceClassificationNone Set MLKFaceDetectorOptions.classificationMode to MLKFaceDetectorClassificationModeNone
GMVDetectorFaceClassificationAll Set MLKFaceDetectorOptions.classificationMode to MLKFaceDetectorClassificationModeAll
GMVDetectorFaceTrackingEnabled MLKFaceDetectorOptions.trackingEnabled
GMVDetectorProminentFaceOnly Set MLKFaceDetectorOptions.contourMode to MLKFaceDetectorContourModeAll
GMVDetectorFaceMinSize MLKFaceDetectorOptions.minFaceSize

BarcodeDetector

เขียนโค้ดการเริ่มต้นใหม่ดังที่แสดงในตัวอย่างนี้

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 มี API การตรวจจับ 2 แบบที่แตกต่างกัน การดำเนินการทั้ง 2 รายการเป็นการดำเนินการแบบซิงโครนัส ดังนี้

- (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:));

เปลี่ยนคลาส เมธอด และชื่อต่อไปนี้

GMV ML Kit
GMVDetectorImageOrientation MLKVisionImage.orientation
ตัวเลือกเครื่องตรวจจับบาร์โค้ด NSDictionary MLKBarcodeScannerOptions
GMVDetectorBarcodeFormats MLKBarcodeScannerOptions.formats
GMVBarcodeFeature MLKBarcode
GMVBarcodeFeatureAddress MLKBarcodeAddress
GMVBarcodeFeatureCalendarEvent MLKBarcodeCalendarEvent
GMVBarcodeFeatureContactInfo MLKBarcodeContactInfo
GMVBarcodeFeatureDriverLicense MLKBarcodeDriverLicense
GMVBarcodeFeatureEmail MLKBarcodeEmail
GMVBarcodeFeatureGeoPoint MLKBarcodeGeoPoint
GMVBarcodeFeaturePersonName MLKBarcodePersonName
GMVBarcodeFeaturePhone MLKBarcodePhone
GMVBarcodeFeatureSMS MLKBarcodeSMS
GMVBarcodeFeatureURLBookmark MLKBarcodeURLBookmark
GMVBarcodeFeatureWiFi MLKBarcodeWiFi

TextRecognition

เขียนโค้ดการเริ่มต้นใหม่ดังที่แสดงในตัวอย่างนี้

GMV

GMVDetector *textDetector =
    [GMVDetector detectorOfType:GMVDetectorTypeText options:nil];

ML Kit

MLKTextRecognizer *textRecognizer = [MLKTextRecognizer textRecognizer];

GMVDetector มี 2 รายการ API การตรวจจับต่างๆ การดำเนินการทั้ง 2 รายการเป็นการดำเนินการแบบซิงโครนัส ดังนี้

- (nullable NSArray<__kindof GMVFeature *> *)
    featuresInImage:(UIImage *)image
            options:(nullable NSDictionary *)options;

- (nullable NSArray<__kindof GMVFeature *> *)
    featuresInBuffer:(CMSampleBufferRef)sampleBuffer
             options:(nullable NSDictionary *)options;

แทนที่ GMVDetector ด้วย MLKTextRecognizer โดย Inference API อาจเรียกแบบซิงโครนัสหรืออะซิงโครนัสได้

พร้อมกัน

- (nullable MLKText *)
    resultsInImage:(MLKVisionImage *)image
             error:(NSError **)error;

อะซิงโครนัส

- (void)processImage:(MLKVisionImage *)image
    Completion:
        (MLKTextRecognitionCallback)completion
    NS_SWIFT_NAME(process(_:completion:));

เปลี่ยนคลาส เมธอด และชื่อต่อไปนี้

GMV ML Kit
GMVDetectorImageOrientation MLKVisionImage.orientation
GMVTextBlockFeature MLKTextBlock
GMVTextElementFeature MLKTextElement
GMVTextLineFeature MLKTextLine

การขอความช่วยเหลือ

หากพบปัญหา โปรดไปที่หน้าชุมชน ซึ่งระบุช่องทางต่างๆ ที่สามารถติดต่อเราได้