छवियों में टेक्स्ट को पहचानने के लिए आप एमएल किट का उपयोग कर सकते हैं। एमएल किट में छवियों में पाठ को पहचानने के लिए उपयुक्त एक सामान्य-उद्देश्य एपीआई है, जैसे कि सड़क के संकेत का पाठ, और दस्तावेजों के पाठ को पहचानने के लिए अनुकूलित एपीआई। सामान्य-उद्देश्य API में ऑन-डिवाइस और क्लाउड-आधारित दोनों मॉडल हैं। दस्तावेज़ पाठ पहचान केवल क्लाउड-आधारित मॉडल के रूप में उपलब्ध है। क्लाउड और ऑन-डिवाइस मॉडल की तुलना के लिए ओवरव्यू देखें।
शुरू करने से पहले
- यदि आपने पहले से अपने ऐप में Firebase नहीं जोड़ा है, तो आरंभ करने की मार्गदर्शिका में दिए गए चरणों का पालन करके ऐसा करें।
- अपने पॉडफाइल में एमएल किट लाइब्रेरी शामिल करें:
pod 'Firebase/MLVision', '6.25.0' # If using an on-device API: pod 'Firebase/MLVisionTextModel', '6.25.0'
अपने प्रोजेक्ट के पॉड्स को इंस्टॉल या अपडेट करने के बाद, अपने एक्सकोड प्रोजेक्ट को इसके.xcworkspace
का उपयोग करके खोलना सुनिश्चित करें। - अपने ऐप्लिकेशन में, Firebase आयात करें:
तीव्र
import Firebase
उद्देश्य सी
@import Firebase;
यदि आप क्लाउड-आधारित मॉडल का उपयोग करना चाहते हैं, और आपने पहले से ही अपने प्रोजेक्ट के लिए क्लाउड-आधारित API को सक्षम नहीं किया है, तो अभी करें:
- फायरबेस कंसोल का एमएल किट एपीआई पेज खोलें।
यदि आपने पहले से ही अपने प्रोजेक्ट को ब्लेज़ मूल्य निर्धारण योजना में अपग्रेड नहीं किया है, तो ऐसा करने के लिए अपग्रेड पर क्लिक करें। (आपको केवल तभी अपग्रेड करने के लिए कहा जाएगा जब आपका प्रोजेक्ट ब्लेज़ प्लान पर न हो।)
केवल ब्लेज़-स्तरीय प्रोजेक्ट ही क्लाउड-आधारित API का उपयोग कर सकते हैं।
- यदि क्लाउड-आधारित API पहले से सक्षम नहीं हैं, तो क्लाउड-आधारित API सक्षम करें क्लिक करें .
यदि आप केवल ऑन-डिवाइस मॉडल का उपयोग करना चाहते हैं, तो आप इस चरण को छोड़ सकते हैं।
अब आप इमेज में टेक्स्ट को पहचानना शुरू करने के लिए तैयार हैं।
इनपुट छवि दिशानिर्देश
एमएल किट के लिए टेक्स्ट को सटीक रूप से पहचानने के लिए, इनपुट इमेज में ऐसा टेक्स्ट होना चाहिए जो पर्याप्त पिक्सेल डेटा द्वारा दर्शाया गया हो। आदर्श रूप से, लैटिन पाठ के लिए, प्रत्येक वर्ण कम से कम 16x16 पिक्सेल का होना चाहिए। चीनी, जापानी और कोरियाई टेक्स्ट (केवल क्लाउड-आधारित API द्वारा समर्थित) के लिए, प्रत्येक वर्ण 24x24 पिक्सेल का होना चाहिए। सभी भाषाओं के लिए, 24x24 पिक्सेल से बड़े वर्णों के लिए आमतौर पर कोई सटीकता लाभ नहीं होता है।
इसलिए, उदाहरण के लिए, एक 640x480 छवि एक व्यवसाय कार्ड को स्कैन करने के लिए अच्छी तरह से काम कर सकती है जो छवि की पूरी चौड़ाई पर कब्जा कर लेता है। अक्षर आकार के कागज़ पर मुद्रित दस्तावेज़ को स्कैन करने के लिए, एक 720x1280 पिक्सेल छवि की आवश्यकता हो सकती है।
खराब छवि फोकस पाठ पहचान सटीकता को नुकसान पहुंचा सकता है। यदि आपको स्वीकार्य परिणाम नहीं मिल रहे हैं, तो उपयोगकर्ता से छवि को पुनः प्राप्त करने के लिए कहने का प्रयास करें।
यदि आप रीयल-टाइम एप्लिकेशन में टेक्स्ट को पहचान रहे हैं, तो आप इनपुट छवियों के समग्र आयामों पर भी विचार करना चाहेंगे। छोटी छवियों को तेजी से संसाधित किया जा सकता है, इसलिए विलंबता को कम करने के लिए, कम रिज़ॉल्यूशन पर छवियों को कैप्चर करें (उपरोक्त सटीकता आवश्यकताओं को ध्यान में रखते हुए) और सुनिश्चित करें कि टेक्स्ट जितना संभव हो उतना छवि पर कब्जा कर लेता है। रीयल-टाइम प्रदर्शन को बेहतर बनाने के लिए युक्तियाँ भी देखें।
छवियों में पाठ को पहचानें
किसी ऑन-डिवाइस या क्लाउड-आधारित मॉडल का उपयोग करके किसी छवि में टेक्स्ट को पहचानने के लिए, टेक्स्ट पहचानकर्ता को नीचे बताए अनुसार चलाएं।
1. पाठ पहचानकर्ता चलाएँ
छवि को `UIImage` या `CMSampleBufferRef` के रूप में `VisionTextRecognizer` की `प्रक्रिया (_: पूर्णता :)` विधि में पास करें:-
onDeviceTextRecognizer
याcloudTextRecognizer
पर कॉल करकेVisionTextRecognizer
का एक उदाहरण प्राप्त करें:तीव्र
ऑन-डिवाइस मॉडल का उपयोग करने के लिए:
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)
उद्देश्य सी
ऑन-डिवाइस मॉडल का उपयोग करने के लिए:
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
, का उपयोग किया जाना चाहिए।तीव्र
let image = VisionImage(image: uiImage)
उद्देश्य सी
FIRVisionImage *image = [[FIRVisionImage alloc] initWithImage:uiImage];
CMSampleBufferRef
का उपयोग करने के लिए:एक
VisionImageMetadata
ऑब्जेक्ट बनाएं जोCMSampleBufferRef
बफ़र में निहित छवि डेटा के उन्मुखीकरण को निर्दिष्ट करता है।छवि अभिविन्यास प्राप्त करने के लिए:
तीव्र
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 } }
उद्देश्य सी
- (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; } }
फिर, मेटाडेटा ऑब्जेक्ट बनाएं:
तीव्र
let cameraPosition = AVCaptureDevice.Position.back // Set to the capture device you used. let metadata = VisionImageMetadata() metadata.orientation = imageOrientation( deviceOrientation: UIDevice.current.orientation, cameraPosition: cameraPosition )
उद्देश्य सी
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
ऑब्जेक्ट बनाएं:तीव्र
let image = VisionImage(buffer: sampleBuffer) image.metadata = metadata
उद्देश्य सी
FIRVisionImage *image = [[FIRVisionImage alloc] initWithBuffer:sampleBuffer]; image.metadata = metadata;
- यदि आवश्यक हो, तो छवि को घुमाएं ताकि उसकी छवि
- फिर, छवि को
process(_:completion:)
विधि में पास करें:तीव्र
textRecognizer.process(visionImage) { result, error in guard error == nil, let result = result else { // ... return } // Recognized text }
उद्देश्य सी
[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` ऑब्जेक्ट के लिए, आप क्षेत्र में पहचाने जाने वाले टेक्स्ट और क्षेत्र के बाउंडिंग निर्देशांक प्राप्त कर सकते हैं। उदाहरण के लिए:तीव्र
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 } } }
उद्देश्य सी
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; } } }
रीयल-टाइम प्रदर्शन को बेहतर बनाने के लिए टिप्स
यदि आप रीयल-टाइम एप्लिकेशन में टेक्स्ट को पहचानने के लिए ऑन-डिवाइस मॉडल का उपयोग करना चाहते हैं, तो सर्वोत्तम फ्रैमरेट प्राप्त करने के लिए इन दिशानिर्देशों का पालन करें:
- पाठ पहचानकर्ता को थ्रॉटल कॉल। यदि पाठ पहचानकर्ता के चलने के दौरान कोई नया वीडियो फ़्रेम उपलब्ध हो जाता है, तो फ़्रेम को छोड़ दें।
- यदि आप इनपुट छवि पर ग्राफिक्स को ओवरले करने के लिए टेक्स्ट पहचानकर्ता के आउटपुट का उपयोग कर रहे हैं, तो पहले एमएल किट से परिणाम प्राप्त करें, फिर एक ही चरण में छवि और ओवरले प्रस्तुत करें। ऐसा करने से, आप प्रत्येक इनपुट फ्रेम के लिए केवल एक बार प्रदर्शन सतह पर प्रस्तुत करते हैं। उदाहरण के लिए शोकेस सैंपल ऐप में प्रीव्यूऑवरलेव्यू और एफआईआरडिटेक्शनऑवरलेव्यू क्लासेस देखें।
- कम रिज़ॉल्यूशन वाली छवियों को कैप्चर करने पर विचार करें। हालांकि, इस एपीआई की छवि आयाम आवश्यकताओं को भी ध्यान में रखें।
अगले कदम
- क्लाउड एपीआई का उपयोग करने वाले ऐप के उत्पादन के लिए तैनात करने से पहले, आपको अनधिकृत एपीआई एक्सेस के प्रभाव को रोकने और कम करने के लिए कुछ अतिरिक्त कदम उठाने चाहिए।
दस्तावेज़ों की छवियों में पाठ को पहचानें
किसी दस्तावेज़ के टेक्स्ट को पहचानने के लिए, नीचे बताए अनुसार क्लाउड-आधारित दस्तावेज़ टेक्स्ट पहचानकर्ता को कॉन्फ़िगर और चलाएं।
दस्तावेज़ टेक्स्ट रिकग्निशन एपीआई, नीचे वर्णित है, एक इंटरफ़ेस प्रदान करता है जिसका उद्देश्य दस्तावेज़ों की छवियों के साथ काम करने के लिए अधिक सुविधाजनक होना है। हालाँकि, यदि आप विरल पाठ API द्वारा प्रदान किए गए इंटरफ़ेस को पसंद करते हैं, तो आप इसके बजाय घने पाठ मॉडल का उपयोग करने के लिए क्लाउड टेक्स्ट पहचानकर्ता को कॉन्फ़िगर करके दस्तावेज़ों को स्कैन करने के लिए इसका उपयोग कर सकते हैं।
दस्तावेज़ पाठ पहचान API का उपयोग करने के लिए:
1. पाठ पहचानकर्ता चलाएँ
छवि कोUIImage
या CMSampleBufferRef
के रूप में VisionDocumentTextRecognizer
की process(_:completion:)
विधि में पास करें:-
cloudDocumentTextRecognizer
को कॉल करकेVisionDocumentTextRecognizer
का एक उदाहरण प्राप्त करें:तीव्र
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)
उद्देश्य सी
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
, का उपयोग किया जाना चाहिए।तीव्र
let image = VisionImage(image: uiImage)
उद्देश्य सी
FIRVisionImage *image = [[FIRVisionImage alloc] initWithImage:uiImage];
CMSampleBufferRef
का उपयोग करने के लिए:एक
VisionImageMetadata
ऑब्जेक्ट बनाएं जोCMSampleBufferRef
बफ़र में निहित छवि डेटा के उन्मुखीकरण को निर्दिष्ट करता है।छवि अभिविन्यास प्राप्त करने के लिए:
तीव्र
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 } }
उद्देश्य सी
- (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; } }
फिर, मेटाडेटा ऑब्जेक्ट बनाएं:
तीव्र
let cameraPosition = AVCaptureDevice.Position.back // Set to the capture device you used. let metadata = VisionImageMetadata() metadata.orientation = imageOrientation( deviceOrientation: UIDevice.current.orientation, cameraPosition: cameraPosition )
उद्देश्य सी
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
ऑब्जेक्ट बनाएं:तीव्र
let image = VisionImage(buffer: sampleBuffer) image.metadata = metadata
उद्देश्य सी
FIRVisionImage *image = [[FIRVisionImage alloc] initWithBuffer:sampleBuffer]; image.metadata = metadata;
- यदि आवश्यक हो, तो छवि को घुमाएं ताकि उसकी छवि
- फिर, छवि को
process(_:completion:)
विधि में पास करें:तीव्र
textRecognizer.process(visionImage) { result, error in guard error == nil, let result = result else { // ... return } // Recognized text }
उद्देश्य सी
[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
ऑब्जेक्ट के लिए, आप क्षेत्र में पहचाने जाने वाले पाठ और क्षेत्र के बाउंडिंग निर्देशांक प्राप्त कर सकते हैं।
उदाहरण के लिए:
तीव्र
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 } } } }
उद्देश्य सी
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; } } } }
अगले कदम
- क्लाउड एपीआई का उपयोग करने वाले ऐप के उत्पादन के लिए तैनात करने से पहले, आपको अनधिकृत एपीआई एक्सेस के प्रभाव को रोकने और कम करने के लिए कुछ अतिरिक्त कदम उठाने चाहिए।