আধুনিক ডকুমেন্ট চ্যালেঞ্জের জন্য উন্নত OCR
ডিপ লার্নিং-পাওয়ার্ড রিকগনিশন দ্বারা স্ক্যানড ডকুমেন্ট, ফটো এবং PDF থেকে টেক্সট নির্ভুলভাবে এক্সট্রাক্ট করুন
EasyOCR কি?
EasyOCR হল Jaided AI দ্বারা উন্নত একটি ওপেন সোর্স অপটিক্যাল ক্যারেক্টার রিকগনিশন (OCR) লাইব্রেরি, যা ইমেজ এবং স্ক্যানড ডকুমেন্ট থেকে উচ্চ নির্ভুলতায় টেক্সট এক্সট্রাক্ট করতে ডিজাইন করা হয়েছে। PyTorch-এ নির্মিত, এটি ৮০টিরও বেশি ভাষা সমর্থন করে, যার মধ্যে ল্যাটিন, চাইনিজ, আরবি এবং আরও অনেক কিছু রয়েছে। EasyOCR তার ব্যবহারের সহজতার জন্য পরিচিত, বাস্তবায়নের জন্য মাত্র কয়েক লাইন কোডের প্রয়োজন হয়, যা টেক্সট রিকগনিশন প্রকল্পে কাজ করা ডেভেলপার এবং গবেষকদের জন্য এটিকে একটি চমৎকার পছন্দ করে তোলে। এর প্রি-ট্রেনড ডিপ লার্নিং মডেলগুলির সাহায্যে, এটি বিভিন্ন ফন্ট, হ্যান্ডরাইটিং স্টাইল এবং জটিল ব্যাকগ্রাউন্ডে দক্ষতার সাথে টেক্সট সনাক্ত এবং চিনতে পারে। অটোমেটেড ডকুমেন্ট প্রসেসিং, লাইসেন্স প্লেট রিকগনিশন বা ইমেজ-ভিত্তিক টেক্সট এক্সট্রাকশনের জন্য EasyOCR একটি শক্তিশালী এবং লাইটওয়েট সমাধান প্রদান করে। সিস্টেমটি একত্রিত করে:
- মাল্টি-মডেল ডিটেকশন: ResNet ব্যাকবোন দ্বারা উন্নত CRAFT-ভিত্তিক টেক্সট লোকালাইজেশন
- অ্যাডাপ্টিভ রিকগনিশন: স্ক্রিপ্ট-স্পেসিফিক মডেল (ল্যাটিনের জন্য CRNN, CJK-এর জন্য ট্রান্সফরমার)
- কন্টেক্সট-অ্যাওয়্যার প্রসেসিং: প্যারাগ্রাফ রিকনস্ট্রাকশন এবং রিডিং অর্ডার প্রিজারভেশন
ডকুমেন্ট টাইপ অনুযায়ী পারফরম্যান্স বেঞ্চমার্ক:
ডকুমেন্ট টাইপ | নির্ভুলতা | থ্রুপুট | হার্ডওয়্যার |
---|---|---|---|
বিজনেস ডকুমেন্ট | ৯৮.৬% | ৪২ পৃষ্ঠা/মিনিট | NVIDIA T4 |
মোবাইল-ক্যাপচার্ড ইমেজ | ৯৪.২% | ২৮ ইমেজ/মিনিট | Google Colab GPU |
হিস্টোরিক্যাল আর্কাইভ | ৮৯.১% | ১৫ পৃষ্ঠা/মিনিট | CPU ক্লাস্টার |
আর্কিটেকচারটি ডকুমেন্টগুলিকে তিনটি অপ্টিমাইজড স্টেজে প্রসেস করে:
- ডিটেকশন: পিক্সেল-লেভেল টেক্সট রিজিয়ন সেগমেন্টেশন
- রিকগনিশন: ল্যাঙ্গুয়েজ মডেলিং সহ সিকোয়েন্স প্রেডিকশন
- রিকনস্ট্রাকশন: স্পেশিয়াল রিলেশনশিপ ম্যাপিং
কোর টেকনিক্যাল ক্যাপাবিলিটিস
১. অ্যাডভান্সড টেক্সট ডিটেকশন
ডিটেকশন সাবসিস্টেমের বৈশিষ্ট্য:
- ক্যারেক্টার-লেভেল হিটম্যাপ জেনারেশন
- অ্যারবিট্রারি-শেপড টেক্সট রিজিয়ন হ্যান্ডলিং
- মাল্টি-ওরিয়েন্টেশন সাপোর্ট (০-৩৬০°)
- ব্যাকগ্রাউন্ড নয়েজ সাপ্রেশন
২. হাইব্রিড রিকগনিশন সিস্টেম
স্ক্রিপ্ট টাইপ অনুযায়ী রিকগনিশন মডেল অপ্টিমাইজড:
- ল্যাটিন/সিরিলিক: ৭ CNN লেয়ার + BiLSTM সহ CRNN
- চাইনিজ/জাপানিজ/কোরিয়ান: ১২ অ্যাটেনশন হেড সহ ট্রান্সফরমার
- আরবি/হিব্রু: রাইট-টু-লেফ্ট BiLSTM עם কাস্টম টোকেনাইজেশন
৩. এন্টারপ্রাইজ ফিচারস
- অটোমেটিক কোয়ালিটি এস্টিমেশন
- কনফিগারেবল প্রিসিশন/রিকল ট্রেডঅফ
- হার্ডওয়্যার-অ্যাওয়্যার রিসোর্স অ্যালোকেশন
ইনস্টলেশন ও কনফিগারেশন
সিস্টেম রিকোয়ারমেন্টস
কম্পোনেন্ট | ডেভেলপমেন্ট | প্রোডাকশন |
---|---|---|
পাইথন | ৩.৬+ | ৩.৮+ |
মেমোরি | ৮GB | ১৬GB+ |
GPU | অপশনাল | NVIDIA (CUDA ১১.৮+) |
ইনস্টলেশন অপশনস
বেসিক ইনস্টলেশন
pip install easyocr # শুধুমাত্র CPU ডিপেন্ডেন্সি ইনস্টল করে
GPU সাপোর্ট (Linux/Windows)
pip install easyocr torch torchvision --index-url https://download.pytorch.org/whl/cu118
Docker (প্রোডাকশন ডেপ্লয়মেন্ট)
docker run -it --gpus all -v $(pwd):/data \
-e LANG_LIST="en,fr,es" \
jaidedai/easyocr
প্র্যাকটিক্যাল ইমপ্লিমেন্টেশন উদাহরণ
১. প্রোডাকশন ডকুমেন্ট পাইপলাইন
প্রিপ্রসেসিং এবং ভ্যালিডেশন সহ সম্পূর্ণ OCR ওয়ার্কফ্লো:
প্রোডাকশন-রেডি প্রসেসিং
from easyocr import Reader
import cv2
import numpy as np
class DocumentOCR:
def __init__(self, languages=['en']):
self.reader = Reader(languages, gpu=True)
def preprocess(self, image):
# কন্ট্রাস্ট এনহ্যান্সমেন্ট
lab = cv2.cvtColor(image, cv2.COLOR_BGR2LAB)
l, a, b = cv2.split(lab)
clahe = cv2.createCLAHE(clipLimit=3.0, tileGridSize=(8,8))
limg = cv2.merge([clahe.apply(l), a, b])
return cv2.cvtColor(limg, cv2.COLOR_LAB2BGR)
def process(self, image_path):
img = cv2.imread(image_path)
processed = self.preprocess(img)
results = self.reader.readtext(processed,
batch_size=4,
paragraph=True,
min_size=50,
text_threshold=0.8)
return {
'text': [r[1] for r in results],
'confidence': np.mean([r[2] for r in results])
}
# ব্যবহার
ocr = DocumentOCR(languages=['en','fr'])
result = ocr.process('legal_contract.jpg')
print(f"গড় কনফিডেন্স: {result['confidence']:.2%}")
২. ব্যাচ ইনভয়েস প্রসেসিং
একাধিক ইনভয়েস ফরম্যাট থেকে কী ফিল্ড এক্সট্রাক্ট করুন:
ইনভয়েস ডেটা এক্সট্রাকশন
import easyocr
import re
from pathlib import Path
reader = easyocr.Reader(['en'])
INVOICE_PATTERNS = {
'invoice_no': r'Invoice\s*Number[:#]?\s*([A-Z0-9-]+)',
'date': r'Date[:]?\s*(\d{2}[/-]\d{2}[/-]\d{4})',
'amount': r'Total\s*Due[:]?\s*\$?(\d+\.\d{2})'
}
def process_invoices(folder):
results = []
for invoice in Path(folder).glob('*.pdf'):
text = '\n'.join(reader.readtext(str(invoice), detail=0))
extracted = {field: re.search(pattern, text)
for field, pattern in INVOICE_PATTERNS.items()}
results.append({
'file': invoice.name,
'data': {k: v.group(1) if v else None
for k, v in extracted.items()}
})
return results
invoices_data = process_invoices('/invoices/')
পারফরম্যান্স অপ্টিমাইজেশন
GPU অ্যাক্সিলারেশন
- ব্যাচ প্রসেসিং: GPU মেমোরি অনুযায়ী অপ্টিমাল ব্যাচ সাইজ (৪-১৬)
- মেমোরি ম্যানেজমেন্ট: বড় ডকুমেন্টের জন্য অটো চাঙ্কিং
- মিক্সড প্রিসিশন: FP16 ইনফারেন্স উইথ টেনসর কোর
অ্যাকুরেসি টিউনিং
- কন্ট্রাস্ট থ্রেশহোল্ড: লো-কোয়ালিটি স্ক্যানের জন্য
contrast_ths
অ্যাডজাস্ট করুন - টেক্সট সাইজ ফিল্টারিং: ছোট টেক্সট ইগনোর করতে
min_size
সেট করুন - ল্যাঙ্গুয়েজ প্রায়োরিটাইজেশন: প্রত্যাশিত প্রিভ্যালেন্স অনুযায়ী ভাষা সাজান