Chapter 26
OCR
OCR
🎬 ছবি থেকে টেক্সট
OCR (Optical Character Recognition) ইমেজ বা স্ক্যান থেকে টেক্সট পড়ে — যেমন স্ক্যান করা PDF, নম্বরপ্লেট, রসিদ, হাতের লেখা। আধুনিক OCR ডিপ লার্নিং-নির্ভর।
OCR পাইপলাইন
Input Image
↓ Preprocess (denoise, deskew, binarize)
↓ Text Detection (কোথায় text আছে?)
↓ Text Recognition (কী লেখা?)
↓ Post-processing (spell-correct, structure)মূল Approach
- CNN + CTC: CRNN — sequence labeling, alignment ছাড়াই।
- Encoder-Decoder + Attention: seq2seq, irregular text-এ ভালো।
- Transformer-based: TrOCR, Donut — SOTA।
জনপ্রিয় টুল
টুল
শক্তি
সীমাবদ্ধতা
Tesseract
Open-source, ১০০+ ভাষা
হাতের লেখায় দুর্বল
EasyOCR
সহজ API, GPU
মাঝারি accuracy
PaddleOCR
SOTA, multilingual
একটু ভারী setup
TrOCR (HF)
Transformer, accurate
GPU দরকার
Google Vision API
খুব accurate, paid
cloud-dependent
Tesseract — দ্রুত শুরু
pip install pytesseract pillow
# system: apt-get install tesseract-ocr tesseract-ocr-ben
import pytesseract
from PIL import Image
text = pytesseract.image_to_string(Image.open("scan.png"), lang="ben+eng")
print(text)
# word-level box
boxes = pytesseract.image_to_data(Image.open("scan.png"), output_type=pytesseract.Output.DICT)EasyOCR — Detection + Recognition একসাথে
import easyocr
reader = easyocr.Reader(["bn", "en"], gpu=True)
result = reader.readtext("receipt.jpg")
for box, text, conf in result:
print(round(conf, 2), text)PaddleOCR — উন্নত
pip install paddleocr paddlepaddle
from paddleocr import PaddleOCR
ocr = PaddleOCR(use_angle_cls=True, lang="en")
result = ocr.ocr("invoice.jpg", cls=True)
for line in result[0]:
print(line[1][0], line[1][1])TrOCR — Transformer (HuggingFace)
from transformers import TrOCRProcessor, VisionEncoderDecoderModel
proc = TrOCRProcessor.from_pretrained("microsoft/trocr-base-handwritten")
mdl = VisionEncoderDecoderModel.from_pretrained("microsoft/trocr-base-handwritten")
img = Image.open("handwriting.png").convert("RGB")
pixel = proc(images=img, return_tensors="pt").pixel_values
ids = mdl.generate(pixel)
print(proc.batch_decode(ids, skip_special_tokens=True)[0])Preprocessing টিপ
- Grayscale + adaptive threshold।
- Deskew (cv2.minAreaRect) — কাত লেখা সোজা করুন।
- Resize — ছোট text অন্তত 30-px উচ্চতা।
- Denoise — bilateralFilter।
🔑 বাংলা OCR
Tesseract-এ "ben" trained data + ভালো preprocessing দিলে মুদ্রিত বাংলা ৯০%+ accurate পাওয়া যায়। হাতের লেখায় BanglaOCR বা TrOCR-fine-tune ভালো বিকল্প।
Real-world Use Case
- রসিদ/ইনভয়েস পার্সিং → key-value extraction।
- নম্বরপ্লেট রিকগনিশন (ALPR)।
- স্ক্যান করা PDF → searchable text।
- ID কার্ড ভেরিফিকেশন।
অনুশীলন
১. একটি স্ক্যান করা পৃষ্ঠায় Tesseract চালিয়ে accuracy যাচাই করুন।
২. EasyOCR দিয়ে রসিদ থেকে total amount extract করুন।
৩. PaddleOCR বনাম TrOCR — একই ইমেজে তুলনা করুন।
সারসংক্ষেপ
✨ এই অধ্যায়ে যা শিখলাম
- OCR = detection + recognition + post-process।
- Tesseract সহজ, PaddleOCR/TrOCR SOTA।
- Preprocessing-ই OCR-এর accuracy-র ৫০% নির্ধারণ করে।
- এই অধ্যায়ে Phase 3 শেষ। পরের Phase-এ আমরা NLP-তে ঢুকব।