इमेज में मौजूद टेक्स्ट की पहचान करने के लिए, ML Kit का इस्तेमाल किया जा सकता है. ML Kit में दो तरह के एपीआई होते हैं. एक सामान्य एपीआई होता है, जो इमेज में मौजूद टेक्स्ट की पहचान करने के लिए सही होता है. जैसे, सड़क के साइन बोर्ड पर लिखा टेक्स्ट. दूसरा एपीआई, दस्तावेज़ों में मौजूद टेक्स्ट की पहचान करने के लिए ऑप्टिमाइज़ किया गया होता है. सामान्य कामों के लिए उपलब्ध एपीआई में, ऑन-डिवाइस और क्लाउड-आधारित, दोनों तरह के मॉडल होते हैं. दस्तावेज़ में मौजूद टेक्स्ट की पहचान करने की सुविधा, सिर्फ़ क्लाउड पर आधारित मॉडल के तौर पर उपलब्ध है. क्लाउड और डिवाइस पर मौजूद मॉडल की तुलना करने के लिए, खास जानकारी देखें.
शुरू करने से पहले
- अगर आपने अपने ऐप्लिकेशन में Firebase को पहले से नहीं जोड़ा है, तो शुरू करने के लिए गाइड में दिए गए चरणों का पालन करके ऐसा करें.
- अपने Podfile में ML Kit की लाइब्रेरी शामिल करें:
अपने प्रोजेक्ट के पॉड इंस्टॉल या अपडेट करने के बाद, पक्का करें कि आपने Xcode प्रोजेक्ट को उसकेpod 'Firebase/MLVision', '6.25.0' # If using an on-device API: pod 'Firebase/MLVisionTextModel', '6.25.0'
.xcworkspace
का इस्तेमाल करके खोला हो. - अपने ऐप्लिकेशन में, Firebase को इंपोर्ट करें:
Swift
import Firebase
Objective-C
@import Firebase;
-
अगर आपको क्लाउड-आधारित मॉडल का इस्तेमाल करना है और आपने अपने प्रोजेक्ट के लिए क्लाउड-आधारित एपीआई पहले से चालू नहीं किए हैं, तो अभी ऐसा करें:
- Firebase कंसोल के ML Kit APIs पेज को खोलें.
-
अगर आपने अब तक अपने प्रोजेक्ट को Blaze प्लान में अपग्रेड नहीं किया है, तो ऐसा करने के लिए अपग्रेड करें पर क्लिक करें. (आपको अपग्रेड करने के लिए सिर्फ़ तब कहा जाएगा, जब आपका प्रोजेक्ट Blaze प्लान पर नहीं होगा.)
क्लाउड पर आधारित एपीआई का इस्तेमाल सिर्फ़ ब्लेज़-लेवल के प्रोजेक्ट कर सकते हैं.
- अगर क्लाउड पर आधारित एपीआई पहले से चालू नहीं हैं, तो क्लाउड पर आधारित एपीआई चालू करें पर क्लिक करें.
अगर आपको सिर्फ़ डिवाइस पर मौजूद मॉडल का इस्तेमाल करना है, तो इस चरण को छोड़ा जा सकता है.
अब आपके पास इमेज में मौजूद टेक्स्ट की पहचान करने की सुविधा है.
इनपुट इमेज के लिए दिशा-निर्देश
-
एमएल किट को टेक्स्ट की सही पहचान करने के लिए, इनपुट इमेज में ऐसा टेक्स्ट होना चाहिए जिसे दिखाने के लिए पिक्सल का सही डेटा इस्तेमाल किया गया हो. लैटिन टेक्स्ट के लिए, हर वर्ण कम से कम 16x16 पिक्सल का होना चाहिए. चाइनीज़, जैपनीज़, और कोरियन टेक्स्ट के लिए (सिर्फ़ क्लाउड पर आधारित एपीआई के साथ काम करता है), हर वर्ण 24x24 पिक्सल का होना चाहिए. आम तौर पर, सभी भाषाओं के लिए, वर्णों को 24x24 पिक्सल से बड़ा करने पर, सटीकता में कोई फ़ायदा नहीं होता.
इसलिए, उदाहरण के लिए, 640x480 इमेज का इस्तेमाल करके, ऐसे बिजनेस कार्ड को स्कैन किया जा सकता है जो इमेज की पूरी चौड़ाई में हो. लेटर साइज़ के पेपर पर प्रिंट किए गए दस्तावेज़ को स्कैन करने के लिए, 720x1280 पिक्सल की इमेज की ज़रूरत पड़ सकती है.
-
इमेज का फ़ोकस सही न होने पर, टेक्स्ट पहचानने की सुविधा सटीक तरीके से काम नहीं करती. अगर आपको सही नतीजे नहीं मिल रहे हैं, तो उपयोगकर्ता से इमेज को फिर से कैप्चर करने के लिए कहें.
-
अगर आपको किसी रीयल-टाइम ऐप्लिकेशन में टेक्स्ट की पहचान करनी है, तो आपको इनपुट इमेज के कुल डाइमेंशन पर भी ध्यान देना चाहिए. छोटी इमेज को तेज़ी से प्रोसेस किया जा सकता है. इसलिए, इमेज को कम रिज़ॉल्यूशन पर कैप्चर करें, ताकि लेटेन्सी कम हो. हालांकि, इस दौरान ऊपर बताई गई सटीकता से जुड़ी ज़रूरी शर्तों का ध्यान रखें. साथ ही, यह पक्का करें कि इमेज में ज़्यादा से ज़्यादा टेक्स्ट शामिल हो. रीयल-टाइम परफ़ॉर्मेंस को बेहतर बनाने के लिए सलाह भी देखें.
इमेज में मौजूद टेक्स्ट की पहचान करना
डिवाइस पर मौजूद या क्लाउड पर आधारित मॉडल का इस्तेमाल करके, किसी इमेज में मौजूद टेक्स्ट को पहचानने के लिए, टेक्स्ट पहचानने वाले टूल को नीचे दिए गए तरीके से चलाएं.
1. टेक्स्ट आइडेंटिफ़ायर को चालू करना
इमेज को `UIImage` या `CMSampleBufferRef` के तौर पर, `VisionTextRecognizer` के `process(_:completion:)` तरीके में पास करें:onDeviceTextRecognizer
याcloudTextRecognizer
को कॉल करके,VisionTextRecognizer
का इंस्टेंस पाएं: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];
-
UIImage
याCMSampleBufferRef
का इस्तेमाल करके,VisionImage
ऑब्जेक्ट बनाएं.UIImage
का इस्तेमाल करने के लिए:- अगर ज़रूरी हो, तो इमेज को घुमाएं, ताकि उसकी
imageOrientation
प्रॉपर्टी.up
हो. - सही तरीके से घुमाए गए
UIImage
का इस्तेमाल करके,VisionImage
ऑब्जेक्ट बनाएं. रोटेशन का कोई मेटाडेटा न डालें. डिफ़ॉल्ट वैल्यू.topLeft
का इस्तेमाल करें.Swift
let image = VisionImage(image: uiImage)
Objective-C
FIRVisionImage *image = [[FIRVisionImage alloc] initWithImage:uiImage];
CMSampleBufferRef
का इस्तेमाल करने के लिए:-
एक
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];
CMSampleBufferRef
ऑब्जेक्ट और रोटेशन मेटाडेटा का इस्तेमाल करके,VisionImage
ऑब्जेक्ट बनाएं:Swift
let image = VisionImage(buffer: sampleBuffer) image.metadata = metadata
Objective-C
FIRVisionImage *image = [[FIRVisionImage alloc] initWithBuffer:sampleBuffer]; image.metadata = metadata;
- अगर ज़रूरी हो, तो इमेज को घुमाएं, ताकि उसकी
-
इसके बाद, इमेज को
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; } } }
रीयल-टाइम परफ़ॉर्मेंस को बेहतर बनाने के लिए सलाह
अगर आपको किसी ऐप्लिकेशन में रीयल-टाइम में टेक्स्ट पहचानने के लिए, डिवाइस पर मौजूद मॉडल का इस्तेमाल करना है, तो सबसे अच्छे फ़्रेमरेट पाने के लिए इन दिशा-निर्देशों का पालन करें:
- टेक्स्ट पहचानने वाले टूल को किए जाने वाले कॉल की संख्या को सीमित करता है. अगर टेक्स्ट पहचानने की सुविधा चालू होने के दौरान कोई नया वीडियो फ़्रेम उपलब्ध होता है, तो फ़्रेम को छोड़ दें.
- अगर आपको इनपुट इमेज पर ग्राफ़िक ओवरले करने के लिए, टेक्स्ट पहचानने वाले टूल के आउटपुट का इस्तेमाल करना है, तो पहले ML Kit से नतीजे पाएं. इसके बाद, इमेज रेंडर करें और उसे एक ही चरण में ओवरले करें. ऐसा करने से, हर इनपुट फ़्रेम के लिए डिसप्ले सर्फ़ेस पर सिर्फ़ एक बार रेंडर किया जाता है. उदाहरण के लिए, शोकेस सैंपल ऐप्लिकेशन में previewOverlayView और FIRDetectionOverlayView क्लास देखें.
- इमेज को कम रिज़ॉल्यूशन में कैप्चर करें. हालांकि, इस एपीआई के इमेज डाइमेंशन से जुड़ी ज़रूरी शर्तों का भी ध्यान रखें.
अगले चरण
- Cloud API का इस्तेमाल करने वाले किसी ऐप्लिकेशन को प्रोडक्शन में डिप्लॉय करने से पहले, आपको कुछ और कार्रवाइयां करनी चाहिए. इससे एपीआई के अनधिकृत ऐक्सेस को रोकने और उसके असर को कम करने में मदद मिलती है.
दस्तावेज़ों की इमेज में मौजूद टेक्स्ट की पहचान करना
किसी दस्तावेज़ के टेक्स्ट को पहचानने के लिए, क्लाउड पर आधारित दस्तावेज़ के टेक्स्ट को पहचानने वाले टूल को कॉन्फ़िगर करें और उसे चलाएं. इसके लिए, यहां दिया गया तरीका अपनाएं.
दस्तावेज़ में मौजूद टेक्स्ट को पहचानने वाला एपीआई, नीचे बताया गया है. यह एक ऐसा इंटरफ़ेस उपलब्ध कराता है जो दस्तावेज़ों की इमेज के साथ काम करने के लिए ज़्यादा सुविधाजनक है. हालांकि, अगर आपको Sparse Text API का इंटरफ़ेस पसंद है, तो इसका इस्तेमाल किया जा सकता है. इसके लिए, Cloud Text Recognizer को कॉन्फ़िगर करके, डेंस टेक्स्ट मॉडल का इस्तेमाल करें.
दस्तावेज़ में मौजूद टेक्स्ट की पहचान करने वाले एपीआई का इस्तेमाल करने के लिए:
1. टेक्स्ट आइडेंटिफ़ायर को चालू करना
इमेज कोUIImage
या CMSampleBufferRef
के तौर पर, VisionDocumentTextRecognizer
के process(_:completion:)
तरीके में पास करें:
cloudDocumentTextRecognizer
को कॉल करके,VisionDocumentTextRecognizer
का इंस्टेंस पाएं: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];
-
UIImage
याCMSampleBufferRef
का इस्तेमाल करके,VisionImage
ऑब्जेक्ट बनाएं.UIImage
का इस्तेमाल करने के लिए:- अगर ज़रूरी हो, तो इमेज को घुमाएं, ताकि उसकी
imageOrientation
प्रॉपर्टी.up
हो. - सही तरीके से घुमाए गए
UIImage
का इस्तेमाल करके,VisionImage
ऑब्जेक्ट बनाएं. रोटेशन का कोई मेटाडेटा न डालें. डिफ़ॉल्ट वैल्यू.topLeft
का इस्तेमाल करें.Swift
let image = VisionImage(image: uiImage)
Objective-C
FIRVisionImage *image = [[FIRVisionImage alloc] initWithImage:uiImage];
CMSampleBufferRef
का इस्तेमाल करने के लिए:-
एक
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];
CMSampleBufferRef
ऑब्जेक्ट और रोटेशन मेटाडेटा का इस्तेमाल करके,VisionImage
ऑब्जेक्ट बनाएं:Swift
let image = VisionImage(buffer: sampleBuffer) image.metadata = metadata
Objective-C
FIRVisionImage *image = [[FIRVisionImage alloc] initWithBuffer:sampleBuffer]; image.metadata = metadata;
- अगर ज़रूरी हो, तो इमेज को घुमाएं, ताकि उसकी
-
इसके बाद, इमेज को
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 का इस्तेमाल करने वाले किसी ऐप्लिकेशन को प्रोडक्शन में डिप्लॉय करने से पहले, आपको कुछ और कार्रवाइयां करनी चाहिए. इससे एपीआई के अनधिकृत ऐक्सेस को रोकने और उसके असर को कम करने में मदद मिलती है.