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

EasyOCR برای تشخیص و استخراج متن OCR

معماری این سیستم اسناد را در سه مرحله بهینه پردازش می‌کند:

  1. تشخیص: تقسیم‌بندی ناحیه متن در سطح پیکسل
  2. شناسایی: پیش‌بینی دنباله با مدل‌سازی زبان
  3. بازسازی: نگاشت روابط فضایی
GitHub

آمار GitHub

نام:
زبان:
ستاره ها:
چنگال:
مجوز:
آخرین به روز رسانی مخزن در

قابلیت‌های فنی اصلی

1. تشخیص پیشرفته متن

سیستم تشخیص شامل:

  • تولید نقشه حرارتی در سطح کاراکتر
  • مدیریت نواحی متن با اشکال دلخواه
  • پشتیبانی از چندین جهت‌گیری (0-360 درجه)
  • سرکوب نویز پس‌زمینه

2. سیستم شناسایی ترکیبی

مدل‌های شناسایی برای هر نوع نوشتار بهینه شده‌اند:

  • لاتین/سیریلیک: CRNN با 7 لایه CNN + BiLSTM
  • چینی/ژاپنی/کره‌ای: Transformer با 12 هد توجه
  • عربی/عبری: BiLSTM راست به چپ با توکن‌سازی سفارشی

3. ویژگی‌های سازمانی

  • تخمین خودکار کیفیت
  • تنظیمات قابل پیکربندی دقت/فراخوانی
  • تخصیص منابع با آگاهی از سخت‌افزار

نصب و پیکربندی

نیازمندی‌های سیستم

مؤلفهتوسعهتولید
پایتون3.6+3.8+
حافظه8GB16GB+
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 برای نادیده گرفتن متن کوچک
  • اولویت‌دهی زبان: مرتب‌سازی زبان‌ها بر اساس فراوانی مورد انتظار

محصولات مشابه

 فارسی