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-তে ঢুকব।