আপনি ছবিতে টেক্সট চিনতে Firebase ML ব্যবহার করতে পারেন। Firebase ML উভয়ই একটি সাধারণ-উদ্দেশ্য API রয়েছে যা চিত্রগুলিতে পাঠ্য সনাক্ত করার জন্য উপযুক্ত, যেমন একটি রাস্তার চিহ্নের পাঠ্য এবং নথির পাঠ্য সনাক্ত করার জন্য অপ্টিমাইজ করা একটি API।
আপনি শুরু করার আগে
- আপনি যদি ইতিমধ্যে আপনার অ্যাপে Firebase যোগ না করে থাকেন, তাহলে শুরু করার নির্দেশিকাতে দেওয়া ধাপগুলি অনুসরণ করে তা করুন৷
- এক্সকোডে, আপনার অ্যাপ্লিকেশন প্রকল্পটি খোলা থাকলে, ফাইল> প্যাকেজ যুক্ত করুন।
- যখন অনুরোধ করা হয়, ফায়ারবেস অ্যাপল প্ল্যাটফর্মগুলি এসডিকে সংগ্রহস্থল যুক্ত করুন:
- Choose the Firebase ML library.
- আপনার টার্গেটের বিল্ড সেটিংসের অন্যান্য লিঙ্কার পতাকা বিভাগে
-ObjC
পতাকা যুক্ত করুন। - শেষ হয়ে গেলে, এক্সকোড স্বয়ংক্রিয়ভাবে পটভূমিতে আপনার নির্ভরতাগুলি সমাধান এবং ডাউনলোড শুরু করবে।
- আপনার অ্যাপে, Firebase আমদানি করুন:
সুইফট
import FirebaseMLModelDownloader
উদ্দেশ্য-C
@import FirebaseMLModelDownloader;
আপনি যদি ইতিমধ্যে আপনার প্রকল্পের জন্য ক্লাউড-ভিত্তিক এপিআই সক্ষম না করে থাকেন তবে এখনই এটি করুন:
- Open the Firebase ML APIs page of the Firebase console.
আপনি যদি ইতিমধ্যে আপনার প্রকল্পটি ব্লেজ প্রাইসিং প্ল্যানে আপগ্রেড না করে থাকেন তবে এটি করতে আপগ্রেড ক্লিক করুন। (আপনার প্রকল্পটি ব্লেজ পরিকল্পনায় না থাকলে আপনাকে কেবল আপগ্রেড করার অনুরোধ জানানো হবে))
কেবল ব্লেজ-স্তরের প্রকল্পগুলি ক্লাউড-ভিত্তিক এপিআই ব্যবহার করতে পারে।
- যদি ক্লাউড-ভিত্তিক এপিআইগুলি ইতিমধ্যে সক্ষম না হয় তবে ক্লাউড-ভিত্তিক এপিআই সক্ষম করুন ক্লিক করুন।
ফায়ারবেস নির্ভরতাগুলি ইনস্টল এবং পরিচালনা করতে সুইফট প্যাকেজ ম্যানেজার ব্যবহার করুন।
https://github.com/firebase/firebase-ios-sdk.git
Next, perform some in-app setup:
Now you are ready to start recognizing text in images.
ইনপুট চিত্রের নির্দেশিকা
For Firebase ML to accurately recognize text, input images must contain text that is represented by sufficient pixel data. Ideally, for Latin text, each character should be at least 16x16 pixels. For Chinese, Japanese, and Korean text, each character should be 24x24 pixels. For all languages, there is generally no accuracy benefit for characters to be larger than 24x24 pixels.
So, for example, a 640x480 image might work well to scan a business card that occupies the full width of the image. To scan a document printed on letter-sized paper, a 720x1280 pixel image might be required.
Poor image focus can hurt text recognition accuracy. আপনি যদি গ্রহণযোগ্য ফলাফল না পান, তাহলে ব্যবহারকারীকে ছবিটি পুনরায় ক্যাপচার করতে বলার চেষ্টা করুন।
চিত্রগুলিতে পাঠ্য সনাক্ত করুন
কোনও ছবিতে পাঠ্য সনাক্ত করতে, নীচে বর্ণিত হিসাবে পাঠ্য স্বীকৃতিটি চালান।
1. Run the text recognizer
Pass the image as aUIImage
or a CMSampleBufferRef
to the VisionTextRecognizer
's process(_:completion:)
method:-
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)
উদ্দেশ্য-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];
- In order to call Cloud Vision, the image must be formatted as a base64-encoded string. একটি
UIImage
প্রক্রিয়া করতে:সুইফট
guard let imageData = uiImage.jpegData(compressionQuality: 1.0) else { return } let base64encodedImage = imageData.base64EncodedString()
উদ্দেশ্য-C
NSData *imageData = UIImageJPEGRepresentation(uiImage, 1.0f); NSString *base64encodedImage = [imageData base64EncodedStringWithOptions:NSDataBase64Encoding76CharacterLineLength];
- Then, pass the image to the
process(_:completion:)
method:সুইফট
textRecognizer.process(visionImage) { result, error in guard error == nil, let result = result else { // ... return } // Recognized text }
উদ্দেশ্য-C
[textRecognizer processImage:image completion:^(FIRVisionText *_Nullable result, NSError *_Nullable error) { if (error != nil || result == nil) { // ... return; } // Recognized text }];
2. স্বীকৃত পাঠ্যের ব্লকগুলি থেকে পাঠ্য বের করুন
If the text recognition operation succeeds, it will return aVisionText
object. A VisionText
object contains the full text recognized in the image and zero or more VisionTextBlock
objects. Each VisionTextBlock
represents a rectangular block of text, which contain zero or more VisionTextLine
objects. Each VisionTextLine
object contains zero or more VisionTextElement
objects, which represent words and word-like entities (dates, numbers, and so on).
For each VisionTextBlock
, VisionTextLine
, and VisionTextElement
object, you can get the text recognized in the region and the bounding coordinates of the region.
যেমন:
সুইফট
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 } } }
উদ্দেশ্য-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; } } }
পরবর্তী পদক্ষেপ
- Before you deploy to production an app that uses a Cloud API, you should take some additional steps to prevent and mitigate the effect of unauthorized API access .
নথির ছবিতে পাঠ্য চিনুন
To recognize the text of a document, configure and run the document text recognizer as described below.
The document text recognition API, described below, provides an interface that is intended to be more convenient for working with images of documents. However, if you prefer the interface provided by the sparse text API, you can use it instead to scan documents by configuring the cloud text recognizer to use the dense text model .
ডকুমেন্ট টেক্সট রিকগনিশন API ব্যবহার করতে:
1. পাঠ্য শনাক্তকারী চালান
Pass the image as aUIImage
or a CMSampleBufferRef
to the VisionDocumentTextRecognizer
's process(_:completion:)
method:-
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)
উদ্দেশ্য-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];
- ক্লাউড ভিশনকে কল করার জন্য, চিত্রটি অবশ্যই বেস 64-এনকোডযুক্ত স্ট্রিং হিসাবে ফর্ম্যাট করতে হবে। একটি
UIImage
প্রক্রিয়া করতে:সুইফট
guard let imageData = uiImage.jpegData(compressionQuality: 1.0) else { return } let base64encodedImage = imageData.base64EncodedString()
উদ্দেশ্য-C
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 }
উদ্দেশ্য-C
[textRecognizer processImage:image completion:^(FIRVisionDocumentText *_Nullable result, NSError *_Nullable error) { if (error != nil || result == nil) { // ... return; } // Recognized text }];
2. Extract text from blocks of recognized text
পাঠ্য শনাক্তকরণ অপারেশন সফল হলে, এটি একটিVisionDocumentText
অবজেক্ট ফিরিয়ে দেবে। A VisionDocumentText
object contains the full text recognized in the image and a hierarchy of objects that reflect the structure of the recognized document: For each VisionDocumentTextBlock
, VisionDocumentTextParagraph
, VisionDocumentTextWord
, and VisionDocumentTextSymbol
object, you can get the text recognized in the region and the bounding coordinates of the region.
যেমন:
সুইফট
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 } } } }
উদ্দেশ্য-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; } } } }
পরবর্তী পদক্ষেপ
- Before you deploy to production an app that uses a Cloud API, you should take some additional steps to prevent and mitigate the effect of unauthorized API access .