OCR متقدم لتحديات المستندات الحديثة

استخراج النص بدقة من المستندات الممسوحة ضوئيًا والصور وملفات PDF باستخدام تقنيات التعلم العميق

ما هو EasyOCR؟

EasyOCR هي مكتبة مفتوحة المصدر للتعرف البصري على الحروف (OCR) تم تطويرها بواسطة Jaided AI، مصممة لاستخراج النص من الصور والمستندات الممسوحة ضوئيًا بدقة عالية. مبنية على PyTorch، وتدعم أكثر من 80 لغة، بما في ذلك اللاتينية والصينية والعربية وغيرها. تشتهر EasyOCR بسهولة استخدامها، حيث تتطلب بضعة أسطر من الكود للتنفيذ، مما يجعلها خيارًا ممتازًا للمطورين والباحثين العاملين على مشاريع التعرف على النص. بفضل نماذج التعلم العميق المدربة مسبقًا، يمكنها اكتشاف النص والتعرف عليه بكفاءة في خطوط متنوعة وأنماط خط اليد وخلفيات معقدة. سواءً لمعالجة المستندات الآلية أو التعرف على لوحات السيارات أو استخراج النص من الصور، توفر EasyOCR حلًا قويًا وخفيفًا. يجمع النظام:

  • كشف متعدد النماذج: تحديد موقع النص باستخدام CRAFT مع تعزيز ببنية ResNet
  • نظام تعرف متكيف: نماذج مخصصة لأنواع الكتابة (CRNN للاتينية، Transformer للصينية/اليابانية/الكورية)
  • معالجة واعية للسياق: إعادة بناء الفقرات والحفاظ على ترتيب القراءة

تظهر معايير الأداء نتائج متسقة عبر أنواع المستندات:

نوع المستندالدقةالإنتاجيةالأجهزة
المستندات التجارية98.6%42 صفحة/دقيقةNVIDIA T4
الصور الملتقطة بالهاتف94.2%28 صورة/دقيقةGoogle Colab GPU
الأرشيفات التاريخية89.1%15 صفحة/دقيقةمجموعة معالجات CPU

EasyOCR للتعرف على النص واستخراجه

تعالج البنية المستندات عبر ثلاث مراحل محسنة:

  1. الكشف: تجزئة مناطق النص على مستوى البكسل
  2. التعرف: التنبؤ بالتسلسل مع نمذجة اللغة
  3. إعادة البناء: رسم العلاقات المكانية
GitHub

إحصائيات جيثب

اسم:
لغة:
النجوم:
الشوك:
رخصة:
تم تحديث المستودع آخر مرة في

القدرات التقنية الأساسية

1. كشف النص المتقدم

يتميز نظام الكشف بما يلي:

  • إنشاء خريطة حرارية على مستوى الحرف
  • معالجة مناطق النص ذات الأشكال التعسفية
  • دعم التوجهات المتعددة (0-360 درجة)
  • قمع ضوضاء الخلفية

2. نظام تعرف هجين

تم تحسين نماذج التعرف حسب نوع الكتابة:

  • اللاتينية/السيريلية: CRNN مع 7 طبقات CNN + BiLSTM
  • الصينية/اليابانية/الكورية: Transformer مع 12 رأس انتباه
  • العربية/العبرية: BiLSTM من اليمين لليسار مع تجزئة مخصصة

3. ميزات المؤسسات

  • تقييم الجودة التلقائي
  • ضبط التوازن بين الدقة والاستدعاء
  • تخصيص الموارد حسب الأجهزة

التثبيت والإعداد

متطلبات النظام

المكونالتطويرالإنتاج
بايثون3.6+3.8+
الذاكرة8GB16GB+
وحدة معالجة الرسومياتاختياريNVIDIA (CUDA 11.8+)

خيارات التثبيت

التثبيت الأساسي


pip install easyocr  # تثبيت متطلبات وحدة المعالجة المركزية فقط

دعم وحدة معالجة الرسوميات (لينكس/ويندوز)


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/')

تحسين الأداء

تسريع وحدة معالجة الرسوميات

  • المعالجة المجمعة: أحجام الدفعات المثلى (4-16 حسب ذاكرة GPU)
  • إدارة الذاكرة: التقسيم التلقائي للمستندات الكبيرة
  • الدقة المختلطة: استدلال FP16 مع Tensor Cores

ضبط الدقة

  • عتبات التباين: اضبط contrast_ths للمسح الضوئي منخفض الجودة
  • تصفية حجم النص: حدد min_size لتجاهل النص الصغير
  • أولوية اللغة: رتب اللغات حسب التوقع السائد

منتجات مماثلة

 عربي