আপনি ছবি বা ভিডিওতে থাকা লেখা, যেমন রাস্তার সাইনবোর্ডের লেখা, শনাক্ত করতে এমএল কিট ব্যবহার করতে পারেন। এই ফিচারের প্রধান বৈশিষ্ট্যগুলো হলো:
| টেক্সট রিকগনিশন v2 এপিআই | |
|---|---|
| বর্ণনা | ছবি বা ভিডিওতে থাকা লেখা শনাক্ত করুন, ল্যাটিন, চীনা, দেবনাগরী, জাপানি ও কোরিয়ান লিপি এবং আরও বহু ভাষার সমর্থন রয়েছে। |
| SDK নামগুলি | GoogleMLKit/TextRecognition |
| বাস্তবায়ন | বিল্ড টাইমে অ্যাসেটগুলো আপনার অ্যাপের সাথে স্ট্যাটিক্যালি লিঙ্ক করা হয়। |
| অ্যাপের আকারের প্রভাব | প্রতি স্ক্রিপ্ট এসডিকে প্রায় ৩৮ এমবি |
| কর্মক্ষমতা | ল্যাটিন স্ক্রিপ্ট এসডিকে-র ক্ষেত্রে বেশিরভাগ ডিভাইসে রিয়েল-টাইম, অন্যগুলোতে ধীরগতির। |
চেষ্টা করে দেখুন
- এই API-টির একটি উদাহরণমূলক ব্যবহার দেখতে নমুনা অ্যাপটি ব্যবহার করে দেখুন।
- কোডল্যাব ব্যবহার করে কোডটি নিজে চেষ্টা করে দেখুন।
শুরু করার আগে
- আপনার Podfile-এ নিম্নলিখিত ML Kit পডগুলি অন্তর্ভুক্ত করুন:
# To recognize Latin script pod 'GoogleMLKit/TextRecognition', '8.0.0' # To recognize Chinese script pod 'GoogleMLKit/TextRecognitionChinese', '8.0.0' # To recognize Devanagari script pod 'GoogleMLKit/TextRecognitionDevanagari', '8.0.0' # To recognize Japanese script pod 'GoogleMLKit/TextRecognitionJapanese', '8.0.0' # To recognize Korean script pod 'GoogleMLKit/TextRecognitionKorean', '8.0.0'
- আপনার প্রোজেক্টের Pod-গুলো ইনস্টল বা আপডেট করার পর, সেটির
.xcworkspaceব্যবহার করে আপনার Xcode প্রোজেক্টটি খুলুন। ML Kit, Xcode ভার্সন 12.4 বা তার পরবর্তী ভার্সনগুলোতে সমর্থিত।
1. Create an instance of TextRecognizer
Create an instance of TextRecognizer by calling +textRecognizer(options:) , passing the options related to the SDK you declared as dependency on above: সুইফট
// When using Latin script recognition SDK let latinOptions = TextRecognizerOptions() let latinTextRecognizer = TextRecognizer.textRecognizer(options:options) // When using Chinese script recognition SDK let chineseOptions = ChineseTextRecognizerOptions() let chineseTextRecognizer = TextRecognizer.textRecognizer(options:options) // When using Devanagari script recognition SDK let devanagariOptions = DevanagariTextRecognizerOptions() let devanagariTextRecognizer = TextRecognizer.textRecognizer(options:options) // When using Japanese script recognition SDK let japaneseOptions = JapaneseTextRecognizerOptions() let japaneseTextRecognizer = TextRecognizer.textRecognizer(options:options) // When using Korean script recognition SDK let koreanOptions = KoreanTextRecognizerOptions() let koreanTextRecognizer = TextRecognizer.textRecognizer(options:options)
উদ্দেশ্য-সি
// When using Latin script recognition SDK MLKTextRecognizerOptions *latinOptions = [[MLKTextRecognizerOptions alloc] init]; MLKTextRecognizer *latinTextRecognizer = [MLKTextRecognizer textRecognizerWithOptions:options]; // When using Chinese script recognition SDK MLKChineseTextRecognizerOptions *chineseOptions = [[MLKChineseTextRecognizerOptions alloc] init]; MLKTextRecognizer *chineseTextRecognizer = [MLKTextRecognizer textRecognizerWithOptions:options]; // When using Devanagari script recognition SDK MLKDevanagariTextRecognizerOptions *devanagariOptions = [[MLKDevanagariTextRecognizerOptions alloc] init]; MLKTextRecognizer *devanagariTextRecognizer = [MLKTextRecognizer textRecognizerWithOptions:options]; // When using Japanese script recognition SDK MLKJapaneseTextRecognizerOptions *japaneseOptions = [[MLKJapaneseTextRecognizerOptions alloc] init]; MLKTextRecognizer *japaneseTextRecognizer = [MLKTextRecognizer textRecognizerWithOptions:options]; // When using Korean script recognition SDK MLKKoreanTextRecognizerOptions *koreanOptions = [[MLKKoreanTextRecognizerOptions alloc] init]; MLKTextRecognizer *koreanTextRecognizer = [MLKTextRecognizer textRecognizerWithOptions:options];
২. ইনপুট চিত্রটি প্রস্তুত করুন।
ছবিটিকেUIImage অথবা CMSampleBufferRef হিসেবে TextRecognizer এর process(_:completion:) মেথডে পাস করুন: একটি UIImage বা একটি CMSampleBuffer ব্যবহার করে একটি VisionImage অবজেক্ট তৈরি করুন।
আপনি যদি UIImage ব্যবহার করেন, তাহলে এই ধাপগুলো অনুসরণ করুন:
-
UIImageব্যবহার করে একটিVisionImageঅবজেক্ট তৈরি করুন। সঠিক.orientationউল্লেখ করতে ভুলবেন না।সুইফট
let image = VisionImage(image: UIImage) visionImage.orientation = image.imageOrientation
উদ্দেশ্য-সি
MLKVisionImage *visionImage = [[MLKVisionImage alloc] initWithImage:image]; visionImage.orientation = image.imageOrientation;
আপনি যদি
CMSampleBufferব্যবহার করেন, তাহলে এই ধাপগুলো অনুসরণ করুন:CMSampleBufferএ থাকা ইমেজ ডেটার অভিমুখ নির্দিষ্ট করুন।ছবির অভিমুখ পেতে:
সুইফট
func imageOrientation( deviceOrientation: UIDeviceOrientation, cameraPosition: AVCaptureDevice.Position ) -> UIImage.Orientation { switch deviceOrientation { case .portrait: return cameraPosition == .front ? .leftMirrored : .right case .landscapeLeft: return cameraPosition == .front ? .downMirrored : .up case .portraitUpsideDown: return cameraPosition == .front ? .rightMirrored : .left case .landscapeRight: return cameraPosition == .front ? .upMirrored : .down case .faceDown, .faceUp, .unknown: return .up } }
উদ্দেশ্য-সি
- (UIImageOrientation) imageOrientationFromDeviceOrientation:(UIDeviceOrientation)deviceOrientation cameraPosition:(AVCaptureDevicePosition)cameraPosition { switch (deviceOrientation) { case UIDeviceOrientationPortrait: return cameraPosition == AVCaptureDevicePositionFront ? UIImageOrientationLeftMirrored : UIImageOrientationRight; case UIDeviceOrientationLandscapeLeft: return cameraPosition == AVCaptureDevicePositionFront ? UIImageOrientationDownMirrored : UIImageOrientationUp; case UIDeviceOrientationPortraitUpsideDown: return cameraPosition == AVCaptureDevicePositionFront ? UIImageOrientationRightMirrored : UIImageOrientationLeft; case UIDeviceOrientationLandscapeRight: return cameraPosition == AVCaptureDevicePositionFront ? UIImageOrientationUpMirrored : UIImageOrientationDown; case UIDeviceOrientationUnknown: case UIDeviceOrientationFaceUp: case UIDeviceOrientationFaceDown: return UIImageOrientationUp; } }
-
CMSampleBufferঅবজেক্ট এবং ওরিয়েন্টেশন ব্যবহার করে একটিVisionImageঅবজেক্ট তৈরি করুন:সুইফট
let image = VisionImage(buffer: sampleBuffer) image.orientation = imageOrientation( deviceOrientation: UIDevice.current.orientation, cameraPosition: cameraPosition)
উদ্দেশ্য-সি
MLKVisionImage *image = [[MLKVisionImage alloc] initWithBuffer:sampleBuffer]; image.orientation = [self imageOrientationFromDeviceOrientation:UIDevice.currentDevice.orientation cameraPosition:cameraPosition];
৩. ছবিটি প্রক্রিয়া করুন
তারপর, ছবিটি
process(_:completion:)মেথডে পাঠান:সুইফট
textRecognizer.process(visionImage) { result, error in guard error == nil, let result = result else { // Error handling return } // Recognized text }উদ্দেশ্য-সি
[textRecognizer processImage:image completion:^(MLKText *_Nullable result, NSError *_Nullable error) { if (error != nil || result == nil) { // Error handling return; } // Recognized text }];
৪. শনাক্তকৃত টেক্সটের ব্লকগুলো থেকে টেক্সট বের করুন।
টেক্সট শনাক্তকরণ প্রক্রিয়া সফল হলে, এটি একটি
Textঅবজেক্ট রিটার্ন করে। একটিTextঅবজেক্টে ছবিতে শনাক্ত করা সম্পূর্ণ টেক্সট এবং শূন্য বা তার বেশিTextBlockঅবজেক্ট থাকে।প্রতিটি
TextBlockএকটি আয়তাকার টেক্সট ব্লক উপস্থাপন করে, যার মধ্যে শূন্য বা একাধিকTextLineঅবজেক্ট থাকে। প্রতিটিTextLineঅবজেক্টের মধ্যে শূন্য বা একাধিকTextElementঅবজেক্ট থাকে, যা শব্দ এবং শব্দ-সদৃশ সত্তা যেমন তারিখ ও সংখ্যাকে উপস্থাপন করে।প্রতিটি
TextBlock,TextLine, এবংTextElementঅবজেক্টের জন্য, আপনি ঐ অঞ্চলে শনাক্তকৃত টেক্সট এবং অঞ্চলটির বাউন্ডিং স্থানাঙ্ক পেতে পারেন।উদাহরণস্বরূপ:
সুইফট
let resultText = result.text for block in result.blocks { let blockText = block.text let blockLanguages = block.recognizedLanguages let blockCornerPoints = block.cornerPoints let blockFrame = block.frame for line in block.lines { let lineText = line.text let lineLanguages = line.recognizedLanguages let lineCornerPoints = line.cornerPoints let lineFrame = line.frame for element in line.elements { let elementText = element.text let elementCornerPoints = element.cornerPoints let elementFrame = element.frame } } }উদ্দেশ্য-সি
NSString *resultText = result.text; for (MLKTextBlock *block in result.blocks) { NSString *blockText = block.text; NSArray<MLKTextRecognizedLanguage *> *blockLanguages = block.recognizedLanguages; NSArray<NSValue *> *blockCornerPoints = block.cornerPoints; CGRect blockFrame = block.frame; for (MLKTextLine *line in block.lines) { NSString *lineText = line.text; NSArray<MLKTextRecognizedLanguage *> *lineLanguages = line.recognizedLanguages; NSArray<NSValue *> *lineCornerPoints = line.cornerPoints; CGRect lineFrame = line.frame; for (MLKTextElement *element in line.elements) { NSString *elementText = element.text; NSArray<NSValue *> *elementCornerPoints = element.cornerPoints; CGRect elementFrame = element.frame; } } }ইনপুট ছবির নির্দেশিকা
এমএল কিট-এর পক্ষে টেক্সট সঠিকভাবে শনাক্ত করার জন্য, ইনপুট ইমেজগুলিতে এমন টেক্সট থাকতে হবে যা পর্যাপ্ত পিক্সেল ডেটা দ্বারা উপস্থাপিত। আদর্শগতভাবে, প্রতিটি অক্ষর কমপক্ষে ১৬x১৬ পিক্সেলের হওয়া উচিত। সাধারণত, অক্ষরগুলো ২৪x২৪ পিক্সেলের চেয়ে বড় হলে নির্ভুলতার ক্ষেত্রে কোনো সুবিধা হয় না।
সুতরাং, উদাহরণস্বরূপ, একটি বিজনেস কার্ড স্ক্যান করার জন্য একটি 640x480 সাইজের ছবি বেশ কার্যকর হতে পারে, যদি কার্ডটি ছবির সম্পূর্ণ প্রস্থ জুড়ে থাকে। লেটার-সাইজের কাগজে প্রিন্ট করা কোনো ডকুমেন্ট স্ক্যান করার জন্য 720x1280 পিক্সেলের একটি ছবির প্রয়োজন হতে পারে।
ছবির ফোকাস ঠিক না থাকলে তা লেখা শনাক্তকরণের নির্ভুলতাকে প্রভাবিত করতে পারে। যদি আপনি গ্রহণযোগ্য ফলাফল না পান, তবে ব্যবহারকারীকে ছবিটি পুনরায় তুলতে বলুন।
আপনি যদি কোনো রিয়েল-টাইম অ্যাপ্লিকেশনে টেক্সট শনাক্ত করেন, তবে আপনার ইনপুট ইমেজগুলোর সামগ্রিক আকার বিবেচনা করা উচিত। ছোট আকারের ইমেজ দ্রুত প্রসেস করা যায়। ল্যাটেন্সি কমাতে, নিশ্চিত করুন যেন টেক্সটটি ইমেজের যতটা সম্ভব বেশি অংশ জুড়ে থাকে, এবং কম রেজোলিউশনে ইমেজ ক্যাপচার করুন (উপরে উল্লিখিত নির্ভুলতার প্রয়োজনীয়তাগুলো মাথায় রেখে)। আরও তথ্যের জন্য, পারফরম্যান্স উন্নত করার টিপস দেখুন।
কর্মক্ষমতা উন্নত করার টিপস
- ভিডিও ফ্রেম প্রসেস করার জন্য, ডিটেক্টরের
results(in:)সিনক্রোনাস এপিআই ব্যবহার করুন। প্রদত্ত ভিডিও ফ্রেম থেকে সিনক্রোনাসভাবে ফলাফল পেতেAVCaptureVideoDataOutputSampleBufferDelegateএরcaptureOutput(_, didOutput:from:)ফাংশন থেকে এই মেথডটি কল করুন। ডিটেক্টরে কল সীমিত রাখতেAVCaptureVideoDataOutputএরalwaysDiscardsLateVideoFramesকেtrueরাখুন। ডিটেক্টর চলার সময় যদি একটি নতুন ভিডিও ফ্রেম উপলব্ধ হয়, তবে সেটি বাদ দেওয়া হবে। - যদি আপনি ইনপুট ইমেজের উপর গ্রাফিক্স ওভারলে করার জন্য ডিটেক্টরের আউটপুট ব্যবহার করেন, তাহলে প্রথমে এমএল কিট (ML Kit) থেকে ফলাফলটি নিন, তারপর ইমেজটি রেন্ডার করুন এবং একটি একক ধাপে ওভারলে করুন। এভাবে করলে, প্রতিটি প্রসেস করা ইনপুট ফ্রেমের জন্য আপনি ডিসপ্লে সারফেসে কেবল একবারই রেন্ডার করবেন। একটি উদাহরণের জন্য এমএল কিট কুইকস্টার্ট স্যাম্পলের updatePreviewOverlayViewWithLastFrame অংশটি দেখুন।
- কম রেজোলিউশনে ছবি তোলার কথা বিবেচনা করুন। তবে, এই API-এর ছবির আকারের প্রয়োজনীয়তাগুলোও মনে রাখবেন।
- সম্ভাব্য পারফরম্যান্সের অবনতি এড়াতে, ভিন্ন স্ক্রিপ্ট অপশন সহ একাধিক
TextRecognizerইনস্ট্যান্স একই সাথে চালাবেন না।
অন্য কিছু উল্লেখ না করা থাকলে, এই পৃষ্ঠার কন্টেন্ট Creative Commons Attribution 4.0 License-এর অধীনে এবং কোডের নমুনাগুলি Apache 2.0 License-এর অধীনে লাইসেন্স প্রাপ্ত। আরও জানতে, Google Developers সাইট নীতি দেখুন। Java হল Oracle এবং/অথবা তার অ্যাফিলিয়েট সংস্থার রেজিস্টার্ড ট্রেডমার্ক।
2026-03-19 UTC-তে শেষবার আপডেট করা হয়েছে।
[[["সহজে বোঝা যায়","easyToUnderstand","thumb-up"],["আমার সমস্যার সমাধান হয়েছে","solvedMyProblem","thumb-up"],["অন্যান্য","otherUp","thumb-up"]],[["এতে আমার প্রয়োজনীয় তথ্য নেই","missingTheInformationINeed","thumb-down"],["খুব জটিল / অনেক ধাপ","tooComplicatedTooManySteps","thumb-down"],["পুরনো","outOfDate","thumb-down"],["অনুবাদ সংক্রান্ত সমস্যা","translationIssue","thumb-down"],["নমুনা / কোড সংক্রান্ত সমস্যা","samplesCodeIssue","thumb-down"],["অন্যান্য","otherDown","thumb-down"]],["2026-03-19 UTC-তে শেষবার আপডেট করা হয়েছে।"],[],[]]