iOS पर एमएल किट की मदद से, इमेज में मौजूद टेक्स्ट की पहचान करना

इमेज में मौजूद टेक्स्ट की पहचान करने के लिए, एमएल किट का इस्तेमाल किया जा सकता है. ML किट में अलग-अलग कामों के लिए इस्तेमाल किया जाने वाला एपीआई, जो इमेज में मौजूद टेक्स्ट की पहचान करने के लिए सही है, जैसे कि एक स्ट्रीट साइन का टेक्स्ट है, और एक API है, जो दस्तावेज़. अलग-अलग कामों के लिए इस्तेमाल किए जाने वाले एपीआई में, उपयोगकर्ता के डिवाइस और क्लाउड-आधारित, दोनों मॉडल उपलब्ध हैं. दस्तावेज़ में मौजूद टेक्स्ट की पहचान करने की सुविधा, सिर्फ़ क्लाउड-आधारित मॉडल के तौर पर उपलब्ध है. ज़्यादा जानकारी के लिए, खास जानकारी: क्लाउड और उपयोगकर्ता के डिवाइस पर उपलब्ध मॉडल के लिए उपलब्ध है.

शुरू करने से पहले

  1. अगर आपने पहले से अपने ऐप्लिकेशन में Firebase नहीं जोड़ा है, तो ऐसा करने के लिए शुरुआती निर्देश में दिए गए चरणों को पूरा करें.
  2. अपनी Podfile में ML Kit लाइब्रेरी शामिल करें:
    pod 'Firebase/MLVision', '6.25.0'
    # If using an on-device API:
    pod 'Firebase/MLVisionTextModel', '6.25.0'
    
    अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है प्रोजेक्ट के Pods को इंस्टॉल या अपडेट करने के बाद, अपना Xcode ज़रूर खोलें प्रोजेक्ट के .xcworkspace का इस्तेमाल करके बनाया गया है.
  3. अपने ऐप्लिकेशन में, Firebase इंपोर्ट करें:

    Swift

    import Firebase

    Objective-C

    @import Firebase;
  4. अगर आपको क्लाउड-आधारित मॉडल का इस्तेमाल करना है और आपने इसे पहले से चालू नहीं किया है क्लाउड-आधारित एपीआई का इस्तेमाल करना है, तो इसे अभी करें:

    1. एमएल किट खोलें Firebase कंसोल का एपीआई पेज.
    2. अगर आपने पहले से अपने प्रोजेक्ट को Blaze प्राइसिंग प्लान में अपग्रेड नहीं किया है, तो ऐसा करने के लिए अपग्रेड करें. (आपको अपग्रेड करने के लिए तभी कहा जाएगा, जब प्रोजेक्ट ब्लेज़ प्लान में नहीं है.)

      सिर्फ़ ब्लेज़-लेवल के प्रोजेक्ट ही क्लाउड-आधारित एपीआई का इस्तेमाल कर सकते हैं.

    3. अगर क्लाउड-आधारित एपीआई पहले से चालू नहीं हैं, तो क्लाउड-आधारित एपीआई चालू करें APIs.

    अगर आपको सिर्फ़ डिवाइस में मौजूद मॉडल का इस्तेमाल करना है, तो इस चरण को छोड़ा जा सकता है.

अब आप इमेज में मौजूद टेक्स्ट की पहचान करने के लिए तैयार हैं.

इनपुट इमेज के लिए दिशा-निर्देश

  • एमएल किट टेक्स्ट की सटीक पहचान कर सके, इसके लिए इनपुट इमेज में ये चीज़ें होनी चाहिए ज़रूरत के मुताबिक पिक्सल डेटा से दिखाया जाने वाला टेक्स्ट. आम तौर पर, लैटिन भाषा के लिए टेक्स्ट के लिए, हर वर्ण कम से कम 16x16 पिक्सल का होना चाहिए. चाइनीज़ के लिए, जैपनीज़ और कोरियन टेक्स्ट के लिए (सिर्फ़ क्लाउड-आधारित एपीआई पर काम करता है) वर्ण 24x24 पिक्सल का होना चाहिए. सभी भाषाओं के लिए, आम तौर पर यह 24x24 पिक्सल से ज़्यादा बड़े वर्णों के लिए, सटीक होने का फ़ायदा देता है.

    उदाहरण के लिए, बिज़नेस कार्ड को स्कैन करने के लिए, 640x480 की इमेज अच्छी तरह से काम कर सकती है जो इमेज की पूरी चौड़ाई में समा जाता है. प्रिंट किए गए दस्तावेज़ को स्कैन करने के लिए अक्षर के साइज़ के पेपर के साथ, 720x1280 पिक्सल की इमेज की ज़रूरत पड़ सकती है.

  • इमेज पर फ़ोकस खराब होने से, टेक्स्ट की पहचान करने के तरीके पर बुरा असर पड़ सकता है. अगर आपको सही नतीजे पाने के लिए, उपयोगकर्ता को इमेज दोबारा कैप्चर करने के लिए कहें.

  • अगर टेक्स्ट की पहचान रीयल-टाइम में की जा रही है, तो आपको इनपुट इमेज के कुल डाइमेंशन को ध्यान में रखना चाहिए. इससे छोटा छवियों को तेज़ी से संसाधित किया जा सकता है, इसलिए प्रतीक्षा अवधि को कम करने के लिए, कम रिज़ॉल्यूशन (ऊपर बताई गई सटीक होने से जुड़ी ज़रूरी शर्तों को ध्यान में रखते हुए) और पक्का करें कि टेक्स्ट में इमेज के ज़्यादा से ज़्यादा हिस्से हों. यह भी देखें रीयल-टाइम में परफ़ॉर्मेंस को बेहतर बनाने के लिए सलाह.


इमेज में मौजूद टेक्स्ट की पहचान करें

डिवाइस या क्लाउड-आधारित मॉडल का इस्तेमाल करके, किसी इमेज में मौजूद टेक्स्ट की पहचान करने के लिए, नीचे बताए गए तरीके से टेक्स्ट आइडेंटिफ़ायर को चलाएं.

1. टेक्स्ट आइडेंटिफ़ायर चलाएं

इमेज को `UIImage` या `CMSampleBufferRef` के तौर पर `VisionTextLocationr` की `प्रोसेस(_:पूरे होने:)` तरीका:
  1. इनमें से किसी एक को कॉल करके VisionTextRecognizer का इंस्टेंस पाएं onDeviceTextRecognizer या cloudTextRecognizer:

    Swift

    डिवाइस पर मौजूद मॉडल का इस्तेमाल करने के लिए:

    let vision = Vision.vision()
    let textRecognizer = vision.onDeviceTextRecognizer()
    

    क्लाउड मॉडल का इस्तेमाल करने के लिए:

    let vision = Vision.vision()
    let textRecognizer = vision.cloudTextRecognizer()
    
    // Or, to provide language hints to assist with language detection:
    // See https://cloud.google.com/vision/docs/languages for supported languages
    let options = VisionCloudTextRecognizerOptions()
    options.languageHints = ["en", "hi"]
    let textRecognizer = vision.cloudTextRecognizer(options: options)
    

    Objective-C

    डिवाइस पर मौजूद मॉडल का इस्तेमाल करने के लिए:

    FIRVision *vision = [FIRVision vision];
    FIRVisionTextRecognizer *textRecognizer = [vision onDeviceTextRecognizer];
    

    क्लाउड मॉडल का इस्तेमाल करने के लिए:

    FIRVision *vision = [FIRVision vision];
    FIRVisionTextRecognizer *textRecognizer = [vision cloudTextRecognizer];
    
    // Or, to provide language hints to assist with language detection:
    // See https://cloud.google.com/vision/docs/languages for supported languages
    FIRVisionCloudTextRecognizerOptions *options =
            [[FIRVisionCloudTextRecognizerOptions alloc] init];
    options.languageHints = @[@"en", @"hi"];
    FIRVisionTextRecognizer *textRecognizer = [vision cloudTextRecognizerWithOptions:options];
    
  2. UIImage याVisionImage CMSampleBufferRef.

    UIImage का इस्तेमाल करने के लिए:

    1. अगर ज़रूरी हो, तो इमेज को घुमाएं, ताकि इसकी imageOrientation प्रॉपर्टी .up है.
    2. स्क्रीन की दिशा को सही तरीके से घुमाने के लिए, VisionImage ऑब्जेक्ट बनाएं UIImage. कोई भी रोटेशन मेटाडेटा तय न करें—डिफ़ॉल्ट .topLeft वैल्यू का इस्तेमाल करना ज़रूरी है.

      Swift

      let image = VisionImage(image: uiImage)

      Objective-C

      FIRVisionImage *image = [[FIRVisionImage alloc] initWithImage:uiImage];

    CMSampleBufferRef का इस्तेमाल करने के लिए:

    1. एक VisionImageMetadata ऑब्जेक्ट बनाएं, जो में शामिल इमेज डेटा का ओरिएंटेशन CMSampleBufferRef बफ़र.

      इमेज का ओरिएंटेशन पाने के लिए:

      Swift

      func imageOrientation(
          deviceOrientation: UIDeviceOrientation,
          cameraPosition: AVCaptureDevice.Position
          ) -> VisionDetectorImageOrientation {
          switch deviceOrientation {
          case .portrait:
              return cameraPosition == .front ? .leftTop : .rightTop
          case .landscapeLeft:
              return cameraPosition == .front ? .bottomLeft : .topLeft
          case .portraitUpsideDown:
              return cameraPosition == .front ? .rightBottom : .leftBottom
          case .landscapeRight:
              return cameraPosition == .front ? .topRight : .bottomRight
          case .faceDown, .faceUp, .unknown:
              return .leftTop
          }
      }

      Objective-C

      - (FIRVisionDetectorImageOrientation)
          imageOrientationFromDeviceOrientation:(UIDeviceOrientation)deviceOrientation
                                 cameraPosition:(AVCaptureDevicePosition)cameraPosition {
        switch (deviceOrientation) {
          case UIDeviceOrientationPortrait:
            if (cameraPosition == AVCaptureDevicePositionFront) {
              return FIRVisionDetectorImageOrientationLeftTop;
            } else {
              return FIRVisionDetectorImageOrientationRightTop;
            }
          case UIDeviceOrientationLandscapeLeft:
            if (cameraPosition == AVCaptureDevicePositionFront) {
              return FIRVisionDetectorImageOrientationBottomLeft;
            } else {
              return FIRVisionDetectorImageOrientationTopLeft;
            }
          case UIDeviceOrientationPortraitUpsideDown:
            if (cameraPosition == AVCaptureDevicePositionFront) {
              return FIRVisionDetectorImageOrientationRightBottom;
            } else {
              return FIRVisionDetectorImageOrientationLeftBottom;
            }
          case UIDeviceOrientationLandscapeRight:
            if (cameraPosition == AVCaptureDevicePositionFront) {
              return FIRVisionDetectorImageOrientationTopRight;
            } else {
              return FIRVisionDetectorImageOrientationBottomRight;
            }
          default:
            return FIRVisionDetectorImageOrientationTopLeft;
        }
      }

      इसके बाद, मेटाडेटा ऑब्जेक्ट बनाएं:

      Swift

      let cameraPosition = AVCaptureDevice.Position.back  // Set to the capture device you used.
      let metadata = VisionImageMetadata()
      metadata.orientation = imageOrientation(
          deviceOrientation: UIDevice.current.orientation,
          cameraPosition: cameraPosition
      )

      Objective-C

      FIRVisionImageMetadata *metadata = [[FIRVisionImageMetadata alloc] init];
      AVCaptureDevicePosition cameraPosition =
          AVCaptureDevicePositionBack;  // Set to the capture device you used.
      metadata.orientation =
          [self imageOrientationFromDeviceOrientation:UIDevice.currentDevice.orientation
                                       cameraPosition:cameraPosition];
    2. VisionImage ऑब्जेक्ट बनाने के लिए, CMSampleBufferRef ऑब्जेक्ट और रोटेशन मेटाडेटा:

      Swift

      let image = VisionImage(buffer: sampleBuffer)
      image.metadata = metadata

      Objective-C

      FIRVisionImage *image = [[FIRVisionImage alloc] initWithBuffer:sampleBuffer];
      image.metadata = metadata;
  3. इसके बाद, process(_:completion:) तरीके से इमेज पास करें:

    Swift

    textRecognizer.process(visionImage) { result, error in
      guard error == nil, let result = result else {
        // ...
        return
      }
    
      // Recognized text
    }
    

    Objective-C

    [textRecognizer processImage:image
                      completion:^(FIRVisionText *_Nullable result,
                                   NSError *_Nullable error) {
      if (error != nil || result == nil) {
        // ...
        return;
      }
    
      // Recognized text
    }];
    

2. पहचाने गए टेक्स्ट के ब्लॉक से टेक्स्ट निकालें

अगर लेख पहचान कार्रवाई सफल होती है, तो यह [`VisionText`][VisionText] ऑब्जेक्ट. `VisionText` ऑब्जेक्ट में पूरा टेक्स्ट होता है जिसे इमेज में और शून्य या उससे ज़्यादा [`VisionTextBlock`][VisionTextBlock] में पहचाना गया हो ऑब्जेक्ट हैं. हर `VisionTextBlock` में दिए गए टेक्स्ट के आयताकार ब्लॉक को दिखाया जाता है. इसमें टेक्स्ट शामिल होता है शून्य या उससे ज़्यादा [`VisionTextLine`][VisionTextLine] ऑब्जेक्ट. हर `VisionTextLine` ऑब्जेक्ट में शून्य या उससे ज़्यादा [`VisionTextElement`][VisionTextElement] ऑब्जेक्ट हैं, जो शब्दों और शब्द जैसी इकाइयों (तारीख, संख्याएं वगैरह) को दिखाती हैं. हर `VisionTextBlock`, `VisionTextLine`, और `VisionTextElement` ऑब्जेक्ट के लिए, तो इससे क्षेत्र और इसके बाउंडिंग निर्देशांक में टेक्स्ट को पहचाना जा सकता है क्षेत्र. उदाहरण के लिए:

Swift

let resultText = result.text
for block in result.blocks {
    let blockText = block.text
    let blockConfidence = block.confidence
    let blockLanguages = block.recognizedLanguages
    let blockCornerPoints = block.cornerPoints
    let blockFrame = block.frame
    for line in block.lines {
        let lineText = line.text
        let lineConfidence = line.confidence
        let lineLanguages = line.recognizedLanguages
        let lineCornerPoints = line.cornerPoints
        let lineFrame = line.frame
        for element in line.elements {
            let elementText = element.text
            let elementConfidence = element.confidence
            let elementLanguages = element.recognizedLanguages
            let elementCornerPoints = element.cornerPoints
            let elementFrame = element.frame
        }
    }
}

Objective-C

NSString *resultText = result.text;
for (FIRVisionTextBlock *block in result.blocks) {
  NSString *blockText = block.text;
  NSNumber *blockConfidence = block.confidence;
  NSArray<FIRVisionTextRecognizedLanguage *> *blockLanguages = block.recognizedLanguages;
  NSArray<NSValue *> *blockCornerPoints = block.cornerPoints;
  CGRect blockFrame = block.frame;
  for (FIRVisionTextLine *line in block.lines) {
    NSString *lineText = line.text;
    NSNumber *lineConfidence = line.confidence;
    NSArray<FIRVisionTextRecognizedLanguage *> *lineLanguages = line.recognizedLanguages;
    NSArray<NSValue *> *lineCornerPoints = line.cornerPoints;
    CGRect lineFrame = line.frame;
    for (FIRVisionTextElement *element in line.elements) {
      NSString *elementText = element.text;
      NSNumber *elementConfidence = element.confidence;
      NSArray<FIRVisionTextRecognizedLanguage *> *elementLanguages = element.recognizedLanguages;
      NSArray<NSValue *> *elementCornerPoints = element.cornerPoints;
      CGRect elementFrame = element.frame;
    }
  }
}

रीयल-टाइम परफ़ॉर्मेंस को बेहतर बनाने के लिए सलाह

टेक्स्ट की पहचान रीयल-टाइम में करने के लिए, डिवाइस पर मौजूद मॉडल का इस्तेमाल करने के लिए आवेदन करते समय, सर्वश्रेष्ठ फ़्रेमरेट हासिल करने के लिए इन दिशा-निर्देशों का पालन करें:

  • कॉल को टेक्स्ट आइडेंटिफ़ायर को थ्रॉटल करें. अगर कोई नया वीडियो फ़्रेम टेक्स्ट आइडेंटिफ़ायर के चलने के दौरान उपलब्ध होता है, तो फ़्रेम छोड़ें.
  • अगर ग्राफ़िक ओवरले करने के लिए, टेक्स्ट आइडेंटिफ़ायर के आउटपुट का इस्तेमाल किया जा रहा है इनपुट इमेज को चुनने के बाद, पहले एमएल किट से नतीजा पाएं. इसके बाद, इमेज को रेंडर करें और ओवरले को एक ही चरण में पूरा करें. ऐसा करके, डिसप्ले सरफ़ेस पर रेंडर हो जाता है हर इनपुट फ़्रेम के लिए सिर्फ़ एक बार. previewOverlayView देखें और FIRDetectionOverlayView उदाहरण के लिए शोकेस सैंपल ऐप्लिकेशन में क्लास.
  • कम रिज़ॉल्यूशन वाली इमेज कैप्चर करें. हालांकि, यह भी ध्यान रखें कि इस एपीआई की इमेज डाइमेंशन से जुड़ी ज़रूरी शर्तें.

अगले चरण

  • Cloud API का इस्तेमाल करने वाले ऐप्लिकेशन को प्रोडक्शन में डिप्लॉय करने से पहले, आपको Google Ads के ट्रैफ़िक को रोकने और उसे कम करने के लिए, अनधिकृत एपीआई ऐक्सेस का असर.

दस्तावेज़ों की इमेज में मौजूद टेक्स्ट की पहचान करें

किसी दस्तावेज़ के टेक्स्ट की पहचान करने के लिए, क्लाउड-आधारित ऑपरेटिंग सिस्टम को कॉन्फ़िगर करें और चलाएं दस्तावेज़ पाठ पहचानकर्ता जैसा कि नीचे बताया गया है.

नीचे बताया गया, दस्तावेज़ टेक्स्ट की पहचान करने वाला एपीआई ऐसा इंटरफ़ेस देता है जो दस्तावेज़ों की इमेज के साथ काम करने के लिए डिज़ाइन किया गया है. हालांकि, अगर आपको Spirse text API का इंटरफ़ेस पसंद है, तो दस्तावेज़ों को स्कैन करने के लिए, इसे क्लाउड टेक्स्ट आइडेंटिफ़ायर को कॉन्फ़िगर करें सघन टेक्स्ट मॉडल का इस्तेमाल करें.

दस्तावेज़ टेक्स्ट की पहचान करने वाले एपीआई का इस्तेमाल करने के लिए:

1. टेक्स्ट आइडेंटिफ़ायर चलाएं

इमेज को UIImage या CMSampleBufferRef के तौर पर VisionDocumentTextRecognizer का process(_:completion:) तरीका:

  1. इस नंबर पर कॉल करके, VisionDocumentTextRecognizer का इंस्टेंस पाएं cloudDocumentTextRecognizer:

    Swift

    let vision = Vision.vision()
    let textRecognizer = vision.cloudDocumentTextRecognizer()
    
    // Or, to provide language hints to assist with language detection:
    // See https://cloud.google.com/vision/docs/languages for supported languages
    let options = VisionCloudDocumentTextRecognizerOptions()
    options.languageHints = ["en", "hi"]
    let textRecognizer = vision.cloudDocumentTextRecognizer(options: options)
    

    Objective-C

    FIRVision *vision = [FIRVision vision];
    FIRVisionDocumentTextRecognizer *textRecognizer = [vision cloudDocumentTextRecognizer];
    
    // Or, to provide language hints to assist with language detection:
    // See https://cloud.google.com/vision/docs/languages for supported languages
    FIRVisionCloudDocumentTextRecognizerOptions *options =
            [[FIRVisionCloudDocumentTextRecognizerOptions alloc] init];
    options.languageHints = @[@"en", @"hi"];
    FIRVisionDocumentTextRecognizer *textRecognizer = [vision cloudDocumentTextRecognizerWithOptions:options];
    
  2. UIImage या किसीVisionImage CMSampleBufferRef.

    UIImage का इस्तेमाल करने के लिए:

    1. अगर ज़रूरी हो, तो इमेज को घुमाएं, ताकि इसकी imageOrientation प्रॉपर्टी .up है.
    2. स्क्रीन की दिशा को सही तरीके से घुमाने के लिए, VisionImage ऑब्जेक्ट बनाएं UIImage. कोई भी रोटेशन मेटाडेटा तय न करें—डिफ़ॉल्ट .topLeft वैल्यू का इस्तेमाल करना ज़रूरी है.

      Swift

      let image = VisionImage(image: uiImage)

      Objective-C

      FIRVisionImage *image = [[FIRVisionImage alloc] initWithImage:uiImage];

    CMSampleBufferRef का इस्तेमाल करने के लिए:

    1. एक VisionImageMetadata ऑब्जेक्ट बनाएं, जो में शामिल इमेज डेटा का ओरिएंटेशन CMSampleBufferRef बफ़र.

      इमेज का ओरिएंटेशन पाने के लिए:

      Swift

      func imageOrientation(
          deviceOrientation: UIDeviceOrientation,
          cameraPosition: AVCaptureDevice.Position
          ) -> VisionDetectorImageOrientation {
          switch deviceOrientation {
          case .portrait:
              return cameraPosition == .front ? .leftTop : .rightTop
          case .landscapeLeft:
              return cameraPosition == .front ? .bottomLeft : .topLeft
          case .portraitUpsideDown:
              return cameraPosition == .front ? .rightBottom : .leftBottom
          case .landscapeRight:
              return cameraPosition == .front ? .topRight : .bottomRight
          case .faceDown, .faceUp, .unknown:
              return .leftTop
          }
      }

      Objective-C

      - (FIRVisionDetectorImageOrientation)
          imageOrientationFromDeviceOrientation:(UIDeviceOrientation)deviceOrientation
                                 cameraPosition:(AVCaptureDevicePosition)cameraPosition {
        switch (deviceOrientation) {
          case UIDeviceOrientationPortrait:
            if (cameraPosition == AVCaptureDevicePositionFront) {
              return FIRVisionDetectorImageOrientationLeftTop;
            } else {
              return FIRVisionDetectorImageOrientationRightTop;
            }
          case UIDeviceOrientationLandscapeLeft:
            if (cameraPosition == AVCaptureDevicePositionFront) {
              return FIRVisionDetectorImageOrientationBottomLeft;
            } else {
              return FIRVisionDetectorImageOrientationTopLeft;
            }
          case UIDeviceOrientationPortraitUpsideDown:
            if (cameraPosition == AVCaptureDevicePositionFront) {
              return FIRVisionDetectorImageOrientationRightBottom;
            } else {
              return FIRVisionDetectorImageOrientationLeftBottom;
            }
          case UIDeviceOrientationLandscapeRight:
            if (cameraPosition == AVCaptureDevicePositionFront) {
              return FIRVisionDetectorImageOrientationTopRight;
            } else {
              return FIRVisionDetectorImageOrientationBottomRight;
            }
          default:
            return FIRVisionDetectorImageOrientationTopLeft;
        }
      }

      इसके बाद, मेटाडेटा ऑब्जेक्ट बनाएं:

      Swift

      let cameraPosition = AVCaptureDevice.Position.back  // Set to the capture device you used.
      let metadata = VisionImageMetadata()
      metadata.orientation = imageOrientation(
          deviceOrientation: UIDevice.current.orientation,
          cameraPosition: cameraPosition
      )

      Objective-C

      FIRVisionImageMetadata *metadata = [[FIRVisionImageMetadata alloc] init];
      AVCaptureDevicePosition cameraPosition =
          AVCaptureDevicePositionBack;  // Set to the capture device you used.
      metadata.orientation =
          [self imageOrientationFromDeviceOrientation:UIDevice.currentDevice.orientation
                                       cameraPosition:cameraPosition];
    2. VisionImage ऑब्जेक्ट बनाने के लिए, CMSampleBufferRef ऑब्जेक्ट और रोटेशन मेटाडेटा:

      Swift

      let image = VisionImage(buffer: sampleBuffer)
      image.metadata = metadata

      Objective-C

      FIRVisionImage *image = [[FIRVisionImage alloc] initWithBuffer:sampleBuffer];
      image.metadata = metadata;
  3. इसके बाद, process(_:completion:) तरीके से इमेज पास करें:

    Swift

    textRecognizer.process(visionImage) { result, error in
      guard error == nil, let result = result else {
        // ...
        return
      }
    
      // Recognized text
    }
    

    Objective-C

    [textRecognizer processImage:image
                      completion:^(FIRVisionDocumentText *_Nullable result,
                                   NSError *_Nullable error) {
      if (error != nil || result == nil) {
        // ...
        return;
      }
    
        // Recognized text
    }];
    

2. पहचाने गए टेक्स्ट के ब्लॉक से टेक्स्ट निकालें

अगर लेख पहचान कार्रवाई सफल होती है, तो यह VisionDocumentText ऑब्जेक्ट. VisionDocumentText ऑब्जेक्ट इसमें इमेज में पहचाना गया पूरा टेक्स्ट और ऑब्जेक्ट का क्रम शामिल होता है, पुष्टि किए गए दस्तावेज़ का स्ट्रक्चर दिखाए:

हर VisionDocumentTextBlock, VisionDocumentTextParagraph, के लिए VisionDocumentTextWord और VisionDocumentTextSymbol ऑब्जेक्ट देते हैं, तो क्षेत्र में पहचाने गए टेक्स्ट और क्षेत्र के सीमा वाले निर्देशांक.

उदाहरण के लिए:

Swift

let resultText = result.text
for block in result.blocks {
    let blockText = block.text
    let blockConfidence = block.confidence
    let blockRecognizedLanguages = block.recognizedLanguages
    let blockBreak = block.recognizedBreak
    let blockCornerPoints = block.cornerPoints
    let blockFrame = block.frame
    for paragraph in block.paragraphs {
        let paragraphText = paragraph.text
        let paragraphConfidence = paragraph.confidence
        let paragraphRecognizedLanguages = paragraph.recognizedLanguages
        let paragraphBreak = paragraph.recognizedBreak
        let paragraphCornerPoints = paragraph.cornerPoints
        let paragraphFrame = paragraph.frame
        for word in paragraph.words {
            let wordText = word.text
            let wordConfidence = word.confidence
            let wordRecognizedLanguages = word.recognizedLanguages
            let wordBreak = word.recognizedBreak
            let wordCornerPoints = word.cornerPoints
            let wordFrame = word.frame
            for symbol in word.symbols {
                let symbolText = symbol.text
                let symbolConfidence = symbol.confidence
                let symbolRecognizedLanguages = symbol.recognizedLanguages
                let symbolBreak = symbol.recognizedBreak
                let symbolCornerPoints = symbol.cornerPoints
                let symbolFrame = symbol.frame
            }
        }
    }
}

Objective-C

NSString *resultText = result.text;
for (FIRVisionDocumentTextBlock *block in result.blocks) {
  NSString *blockText = block.text;
  NSNumber *blockConfidence = block.confidence;
  NSArray<FIRVisionTextRecognizedLanguage *> *blockRecognizedLanguages = block.recognizedLanguages;
  FIRVisionTextRecognizedBreak *blockBreak = block.recognizedBreak;
  CGRect blockFrame = block.frame;
  for (FIRVisionDocumentTextParagraph *paragraph in block.paragraphs) {
    NSString *paragraphText = paragraph.text;
    NSNumber *paragraphConfidence = paragraph.confidence;
    NSArray<FIRVisionTextRecognizedLanguage *> *paragraphRecognizedLanguages = paragraph.recognizedLanguages;
    FIRVisionTextRecognizedBreak *paragraphBreak = paragraph.recognizedBreak;
    CGRect paragraphFrame = paragraph.frame;
    for (FIRVisionDocumentTextWord *word in paragraph.words) {
      NSString *wordText = word.text;
      NSNumber *wordConfidence = word.confidence;
      NSArray<FIRVisionTextRecognizedLanguage *> *wordRecognizedLanguages = word.recognizedLanguages;
      FIRVisionTextRecognizedBreak *wordBreak = word.recognizedBreak;
      CGRect wordFrame = word.frame;
      for (FIRVisionDocumentTextSymbol *symbol in word.symbols) {
        NSString *symbolText = symbol.text;
        NSNumber *symbolConfidence = symbol.confidence;
        NSArray<FIRVisionTextRecognizedLanguage *> *symbolRecognizedLanguages = symbol.recognizedLanguages;
        FIRVisionTextRecognizedBreak *symbolBreak = symbol.recognizedBreak;
        CGRect symbolFrame = symbol.frame;
      }
    }
  }
}

अगले चरण

  • Cloud API का इस्तेमाल करने वाले ऐप्लिकेशन को प्रोडक्शन में डिप्लॉय करने से पहले, आपको Google Ads के ट्रैफ़िक को रोकने और उसे कम करने के लिए, अनधिकृत एपीआई ऐक्सेस का असर.