आप छवियों में टेक्स्ट को पहचानने के लिए फायरबेस एमएल का उपयोग कर सकते हैं। फायरबेस एमएल में छवियों में पाठ को पहचानने के लिए उपयुक्त एक सामान्य प्रयोजन एपीआई है, जैसे कि सड़क चिह्न का पाठ, और दस्तावेजों के पाठ को पहचानने के लिए अनुकूलित एपीआई।
शुरू करने से पहले
- यदि आपने पहले से ही अपने ऐप में फायरबेस नहीं जोड़ा है, तो आरंभ करने की मार्गदर्शिका में दिए गए चरणों का पालन करके ऐसा करें।
- Xcode में, अपना ऐप प्रोजेक्ट खुला होने पर, फ़ाइल > पैकेज जोड़ें पर नेविगेट करें।
- संकेत मिलने पर, Firebase Apple प्लेटफ़ॉर्म SDK रिपॉजिटरी जोड़ें:
- फायरबेस एमएल लाइब्रेरी चुनें।
- अपने लक्ष्य की बिल्ड सेटिंग्स के अन्य लिंकर फ़्लैग अनुभाग में
-ObjC
फ़्लैग जोड़ें। - समाप्त होने पर, Xcode स्वचालित रूप से पृष्ठभूमि में आपकी निर्भरता को हल करना और डाउनलोड करना शुरू कर देगा।
- अपने ऐप में, फ़ायरबेस आयात करें:
तीव्र
import FirebaseMLModelDownloader
उद्देश्य सी
@import FirebaseMLModelDownloader;
यदि आपने पहले से ही अपने प्रोजेक्ट के लिए क्लाउड-आधारित एपीआई सक्षम नहीं किया है, तो अभी करें:
- फायरबेस कंसोल का फायरबेस एमएल एपीआई पेज खोलें।
यदि आपने पहले से ही अपने प्रोजेक्ट को ब्लेज़ मूल्य निर्धारण योजना में अपग्रेड नहीं किया है, तो ऐसा करने के लिए अपग्रेड पर क्लिक करें। (आपको केवल तभी अपग्रेड करने के लिए प्रेरित किया जाएगा यदि आपका प्रोजेक्ट ब्लेज़ योजना पर नहीं है।)
केवल ब्लेज़-स्तरीय प्रोजेक्ट ही क्लाउड-आधारित एपीआई का उपयोग कर सकते हैं।
- यदि क्लाउड-आधारित एपीआई पहले से सक्षम नहीं हैं, तो क्लाउड-आधारित एपीआई सक्षम करें पर क्लिक करें।
फायरबेस निर्भरता को स्थापित और प्रबंधित करने के लिए स्विफ्ट पैकेज मैनेजर का उपयोग करें।
https://github.com/firebase/firebase-ios-sdk.git
इसके बाद, कुछ इन-ऐप सेटअप करें:
अब आप छवियों में टेक्स्ट को पहचानना शुरू करने के लिए तैयार हैं।
इनपुट छवि दिशानिर्देश
फायरबेस एमएल के लिए टेक्स्ट को सटीक रूप से पहचानने के लिए, इनपुट छवियों में वह टेक्स्ट होना चाहिए जो पर्याप्त पिक्सेल डेटा द्वारा दर्शाया गया हो। आदर्श रूप से, लैटिन पाठ के लिए, प्रत्येक अक्षर कम से कम 16x16 पिक्सेल का होना चाहिए। चीनी, जापानी और कोरियाई पाठ के लिए, प्रत्येक वर्ण 24x24 पिक्सेल होना चाहिए। सभी भाषाओं के लिए, 24x24 पिक्सेल से बड़े वर्णों के लिए आमतौर पर कोई सटीकता लाभ नहीं होता है।
इसलिए, उदाहरण के लिए, एक 640x480 छवि एक व्यवसाय कार्ड को स्कैन करने के लिए अच्छी तरह से काम कर सकती है जो छवि की पूरी चौड़ाई घेरती है। अक्षर के आकार के कागज़ पर मुद्रित दस्तावेज़ को स्कैन करने के लिए, 720x1280 पिक्सेल छवि की आवश्यकता हो सकती है।
खराब छवि फोकस पाठ पहचान सटीकता को नुकसान पहुंचा सकता है। यदि आपको स्वीकार्य परिणाम नहीं मिल रहे हैं, तो उपयोगकर्ता से छवि पुनः प्राप्त करने के लिए कहें।
छवियों में पाठ को पहचानें
किसी छवि में टेक्स्ट को पहचानने के लिए, नीचे बताए अनुसार टेक्स्ट पहचानकर्ता चलाएँ।
1. पाठ पहचानकर्ता चलाएँ
छवि कोUIImage
या CMSampleBufferRef
के रूप में VisionTextRecognizer
की process(_:completion:)
विधि में पास करें:-
cloudTextRecognizer
कॉल करकेVisionTextRecognizer
का उदाहरण प्राप्त करें:तीव्र
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 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];
- क्लाउड विज़न को कॉल करने के लिए, छवि को बेस64-एन्कोडेड स्ट्रिंग के रूप में स्वरूपित किया जाना चाहिए।
UIImage
को संसाधित करने के लिए:तीव्र
guard let imageData = uiImage.jpegData(compressionQuality: 1.0) else { return } let base64encodedImage = imageData.base64EncodedString()
उद्देश्य सी
NSData *imageData = UIImageJPEGRepresentation(uiImage, 1.0f); NSString *base64encodedImage = [imageData base64EncodedStringWithOptions:NSDataBase64Encoding76CharacterLineLength];
- फिर, छवि को
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
ऑब्जेक्ट में छवि में पहचाना गया पूरा टेक्स्ट और शून्य या अधिक VisionTextBlock
ऑब्जेक्ट होते हैं। प्रत्येक VisionTextBlock
पाठ के एक आयताकार ब्लॉक का प्रतिनिधित्व करता है, जिसमें शून्य या अधिक VisionTextLine
ऑब्जेक्ट होते हैं। प्रत्येक VisionTextLine
ऑब्जेक्ट में शून्य या अधिक 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; } } }
अगले कदम
- इससे पहले कि आप क्लाउड एपीआई का उपयोग करने वाले किसी ऐप का उत्पादन शुरू करें, आपको अनधिकृत एपीआई एक्सेस के प्रभाव को रोकने और कम करने के लिए कुछ अतिरिक्त कदम उठाने चाहिए।
दस्तावेज़ों की छवियों में टेक्स्ट को पहचानें
किसी दस्तावेज़ के टेक्स्ट को पहचानने के लिए, नीचे बताए अनुसार दस्तावेज़ टेक्स्ट पहचानकर्ता को कॉन्फ़िगर करें और चलाएँ।
नीचे वर्णित दस्तावेज़ पाठ पहचान एपीआई, एक इंटरफ़ेस प्रदान करता है जिसका उद्देश्य दस्तावेज़ों की छवियों के साथ काम करने के लिए अधिक सुविधाजनक होना है। हालाँकि, यदि आप विरल पाठ एपीआई द्वारा प्रदान किए गए इंटरफ़ेस को पसंद करते हैं, तो आप घने पाठ मॉडल का उपयोग करने के लिए क्लाउड पाठ पहचानकर्ता को कॉन्फ़िगर करके दस्तावेज़ों को स्कैन करने के लिए इसका उपयोग कर सकते हैं।
दस्तावेज़ टेक्स्ट पहचान एपीआई का उपयोग करने के लिए:
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];
- क्लाउड विज़न को कॉल करने के लिए, छवि को बेस64-एन्कोडेड स्ट्रिंग के रूप में स्वरूपित किया जाना चाहिए।
UIImage
को संसाधित करने के लिए:तीव्र
guard let imageData = uiImage.jpegData(compressionQuality: 1.0) else { return } let base64encodedImage = imageData.base64EncodedString()
उद्देश्य सी
NSData *imageData = UIImageJPEGRepresentation(uiImage, 1.0f); NSString *base64encodedImage = [imageData base64EncodedStringWithOptions:NSDataBase64Encoding76CharacterLineLength];
- फिर, छवि को
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; } } } }
अगले कदम
- इससे पहले कि आप क्लाउड एपीआई का उपयोग करने वाले किसी ऐप का उत्पादन शुरू करें, आपको अनधिकृत एपीआई एक्सेस के प्रभाव को रोकने और कम करने के लिए कुछ अतिरिक्त कदम उठाने चाहिए।