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