OCR پیشرفته برای چالشهای اسناد مدرن
استخراج دقیق متن از اسناد اسکن شده، عکسها و فایلهای PDF با تشخیص مبتنی بر یادگیری عمیق
EasyOCR چیست؟
EasyOCR یک کتابخانه متنباز تشخیص نوری کاراکتر (OCR) است که توسط Jaided AI توسعه یافته و برای استخراج متن از تصاویر و اسناد اسکن شده با دقت بالا طراحی شده است. این کتابخانه مبتنی بر PyTorch بوده و از بیش از 80 زبان از جمله لاتین، چینی، عربی و دیگر زبانها پشتیبانی میکند. EasyOCR به دلیل سهولت استفاده شناخته شده است و تنها با چند خط کد قابل پیادهسازی میباشد که آن را به انتخاب ایدهآلی برای توسعهدهندگان و محققان در پروژههای تشخیص متن تبدیل میکند. با مدلهای از پیش آموزش دیده یادگیری عمیق، میتواند متن را در فونتهای مختلف، دستنوشتهها و پسزمینههای پیچیده به طور مؤثر تشخیص دهد. چه برای پردازش خودکار اسناد، تشخیص پلاک خودرو یا استخراج متن از تصاویر، EasyOCR یک راهحل قدرتمند و سبک ارائه میدهد. این سیستم ترکیبی از:
- تشخیص چند مدلی: مکانیابی متن مبتنی بر CRAFT تقویت شده با backbone ResNet
- تشخیص تطبیقی: مدلهای خاص برای هر نوع نوشتار (CRNN برای لاتین، Transformer برای CJK)
- پردازش مبتنی بر زمینه: بازسازی پاراگرافها و حفظ ترتیب خواندن
معیارهای عملکرد نتایج ثابتی را در انواع مختلف اسناد نشان میدهد:
نوع سند | دقت | عملکرد | سختافزار |
---|---|---|---|
اسناد تجاری | 98.6% | 42 صفحه/دقیقه | NVIDIA T4 |
تصاویر موبایل | 94.2% | 28 تصویر/دقیقه | Google Colab GPU |
آرشیوهای تاریخی | 89.1% | 15 صفحه/دقیقه | خوشه CPU |
معماری این سیستم اسناد را در سه مرحله بهینه پردازش میکند:
- تشخیص: تقسیمبندی ناحیه متن در سطح پیکسل
- شناسایی: پیشبینی دنباله با مدلسازی زبان
- بازسازی: نگاشت روابط فضایی
قابلیتهای فنی اصلی
1. تشخیص پیشرفته متن
سیستم تشخیص شامل:
- تولید نقشه حرارتی در سطح کاراکتر
- مدیریت نواحی متن با اشکال دلخواه
- پشتیبانی از چندین جهتگیری (0-360 درجه)
- سرکوب نویز پسزمینه
2. سیستم شناسایی ترکیبی
مدلهای شناسایی برای هر نوع نوشتار بهینه شدهاند:
- لاتین/سیریلیک: CRNN با 7 لایه CNN + BiLSTM
- چینی/ژاپنی/کرهای: Transformer با 12 هد توجه
- عربی/عبری: BiLSTM راست به چپ با توکنسازی سفارشی
3. ویژگیهای سازمانی
- تخمین خودکار کیفیت
- تنظیمات قابل پیکربندی دقت/فراخوانی
- تخصیص منابع با آگاهی از سختافزار
نصب و پیکربندی
نیازمندیهای سیستم
مؤلفه | توسعه | تولید |
---|---|---|
پایتون | 3.6+ | 3.8+ |
حافظه | 8GB | 16GB+ |
GPU | اختیاری | NVIDIA (CUDA 11.8+) |
گزینههای نصب
نصب پایه
pip install easyocr # نصب وابستگیهای فقط CPU
پشتیبانی GPU (لینوکس/ویندوز)
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
نمونههای عملی پیادهسازی
1. خط لوله پردازش اسناد
گردش کار کامل 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%}")
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
- پردازش دستهای: اندازههای بهینه دسته (4-16 بسته به حافظه GPU)
- مدیریت حافظه: تقسیم خودکار اسناد بزرگ
- دقت ترکیبی: استنتاج FP16 با Tensor Cores
تنظیم دقت
- آستانههای کنتراست: تنظیم
contrast_ths
برای اسکنهای با کیفیت پایین - فیلتر اندازه متن: تنظیم
min_size
برای نادیده گرفتن متن کوچک - اولویتدهی زبان: مرتبسازی زبانها بر اساس فراوانی مورد انتظار