আপনি চিত্র বা ভিডিওতে পাঠ্য সনাক্ত করতে ML কিট ব্যবহার করতে পারেন, যেমন রাস্তার চিহ্নের পাঠ্য। এই বৈশিষ্ট্যের প্রধান বৈশিষ্ট্য হল:
টেক্সট রিকগনিশন API | |
---|---|
বর্ণনা | ছবি বা ভিডিওতে ল্যাটিন-স্ক্রিপ্টের পাঠ্য চিনুন। |
SDK নাম | GoogleMLKit/TextRecognition (version 2.2.0) |
বাস্তবায়ন | বিল্ড টাইমে অ্যাসেটগুলি আপনার অ্যাপের সাথে স্ট্যাটিকভাবে লিঙ্ক করা থাকে। |
অ্যাপের আকারের প্রভাব | প্রায় 20 এমবি |
কর্মক্ষমতা | বেশিরভাগ ডিভাইসে রিয়েল-টাইম। |
চেষ্টা কর
- এই API এর একটি উদাহরণ ব্যবহার দেখতে নমুনা অ্যাপের সাথে খেলুন।
- কোডল্যাবের সাথে কোডটি নিজে চেষ্টা করুন।
তুমি শুরু করার আগে
- আপনার পডফাইলে নিম্নলিখিত ML কিট পডগুলি অন্তর্ভুক্ত করুন:
pod 'GoogleMLKit/TextRecognition','2.2.0'
- আপনি আপনার প্রোজেক্টের পড ইনস্টল বা আপডেট করার পরে, এটির
.xcworkspace
ব্যবহার করে আপনার Xcode প্রকল্পটি খুলুন। ML Kit Xcode সংস্করণ 12.4 বা তার বেশিতে সমর্থিত।
1. TextRecognizer
এর একটি উদাহরণ তৈরি করুন
+textRecognizer
কল করে TextRecognizer
এর একটি উদাহরণ তৈরি করুন:সুইফট
let textRecognizer = TextRecognizer.textRecognizer()
উদ্দেশ্য গ
MLKTextRecognizer *textRecognizer = [MLKTextRecognizer textRecognizer];
2. ইনপুট ইমেজ প্রস্তুত করুন
ছবিটিকে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];
3. চিত্রটি প্রক্রিয়া করুন
তারপরে, ছবিটিকে
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 }];
4. স্বীকৃত পাঠ্যের ব্লকগুলি থেকে পাঠ্য বের করুন
পাঠ্য শনাক্তকরণ অপারেশন সফল হলে, এটি একটি
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; } } }
ইনপুট ইমেজ নির্দেশিকা
ML Kit সঠিকভাবে পাঠ্য সনাক্ত করার জন্য, ইনপুট চিত্রগুলিতে পাঠ্য থাকতে হবে যা পর্যাপ্ত পিক্সেল ডেটা দ্বারা প্রতিনিধিত্ব করা হয়। আদর্শভাবে, প্রতিটি অক্ষর কমপক্ষে 16x16 পিক্সেল হওয়া উচিত। সাধারণত 24x24 পিক্সেলের চেয়ে বড় অক্ষরগুলির জন্য কোন নির্ভুলতা সুবিধা নেই।
সুতরাং, উদাহরণস্বরূপ, একটি 640x480 চিত্র একটি ব্যবসায়িক কার্ড স্ক্যান করতে ভাল কাজ করতে পারে যা চিত্রটির সম্পূর্ণ প্রস্থ দখল করে। অক্ষর আকারের কাগজে মুদ্রিত একটি নথি স্ক্যান করতে, একটি 720x1280 পিক্সেল চিত্রের প্রয়োজন হতে পারে।
খারাপ ইমেজ ফোকাস টেক্সট স্বীকৃতি নির্ভুলতা প্রভাবিত করতে পারে. আপনি যদি গ্রহণযোগ্য ফলাফল না পান, তাহলে ব্যবহারকারীকে ছবিটি পুনরায় ক্যাপচার করতে বলার চেষ্টা করুন।
আপনি যদি রিয়েল-টাইম অ্যাপ্লিকেশানে টেক্সট চিনতে থাকেন, তাহলে আপনার ইনপুট ইমেজের সামগ্রিক মাত্রা বিবেচনা করা উচিত। ছোট ছবি দ্রুত প্রক্রিয়া করা যেতে পারে. লেটেন্সি কমাতে, নিশ্চিত করুন যে টেক্সট যতটা সম্ভব ইমেজ দখল করে, এবং কম রেজোলিউশনে ছবি ক্যাপচার করুন (উপরে উল্লিখিত নির্ভুলতার প্রয়োজনীয়তাগুলি মনে রেখে)। আরও তথ্যের জন্য, কর্মক্ষমতা উন্নত করার টিপস দেখুন।
কর্মক্ষমতা উন্নত করার টিপস
- ভিডিও ফ্রেম প্রক্রিয়াকরণের জন্য, ডিটেক্টরের
results(in:)
সিঙ্ক্রোনাস API ব্যবহার করুন। প্রদত্ত ভিডিও ফ্রেম থেকে সুসংগতভাবে ফলাফল পেতেAVCaptureVideoDataOutputSampleBufferDelegate
'scaptureOutput(_, didOutput:from:)
ফাংশন থেকে এই পদ্ধতিতে কল করুন।AVCaptureVideoDataOutput
এরalwaysDiscardsLateVideoFrames
ডিটেক্টরে কল থ্রোটল করার জন্যtrue
হিসাবে রাখুন৷ ডিটেক্টর চলাকালীন একটি নতুন ভিডিও ফ্রেম উপলব্ধ হলে, এটি বাদ দেওয়া হবে৷ - আপনি যদি ইনপুট ইমেজে গ্রাফিক্স ওভারলে করার জন্য ডিটেক্টরের আউটপুট ব্যবহার করেন, তাহলে প্রথমে ML Kit থেকে ফলাফল পান, তারপর একটি একক ধাপে চিত্র এবং ওভারলে রেন্ডার করুন। এটি করার মাধ্যমে, আপনি প্রতিটি প্রক্রিয়াকৃত ইনপুট ফ্রেমের জন্য শুধুমাত্র একবার প্রদর্শন পৃষ্ঠে রেন্ডার করবেন। একটি উদাহরণের জন্য ML কিট কুইকস্টার্ট নমুনায় UpdatePreviewOverlayViewWithLastFrame দেখুন।
- কম রেজোলিউশনে ছবি তোলার কথা বিবেচনা করুন। যাইহোক, এই API এর চিত্র মাত্রা প্রয়োজনীয়তাও মনে রাখবেন।
অন্য কিছু উল্লেখ না করা থাকলে, এই পৃষ্ঠার কন্টেন্ট Creative Commons Attribution 4.0 License-এর অধীনে এবং কোডের নমুনাগুলি Apache 2.0 License-এর অধীনে লাইসেন্স প্রাপ্ত। আরও জানতে, Google Developers সাইট নীতি দেখুন। Java হল Oracle এবং/অথবা তার অ্যাফিলিয়েট সংস্থার রেজিস্টার্ড ট্রেডমার্ক।
2023-03-31 UTC-তে শেষবার আপডেট করা হয়েছে।
[] [] { "lastModified": "2023-03-31 UTC-তে শেষবার আপডেট করা হয়েছে।", "confidential": False }