OCR מתקדם לאתגרי מסמכים מודרניים
חלץ טקסט במדויק ממסמכים סרוקים, תמונות וקבצי PDF עם זיהוי מבוסס למידה עמוקה
מה זה EasyOCR?
EasyOCR היא ספריית קוד פתוח לזיהוי תווים אופטי (OCR) שפותחה על ידי Jaided AI, המיועדת לחילוץ טקסט מתמונות ומסמכים סרוקים בדיוק גבוה. מבוססת על PyTorch, היא תומכת ביותר מ-80 שפות כולל לטינית, סינית, ערבית ועוד. EasyOCR ידועה בקלות השימוש שלה - נדרשים רק כמה שורות קוד כדי ליישם אותה, מה שהופך אותה לבחירה מצוינת למפתחים וחוקרים העובדים על פרויקטים של זיהוי טקסט. עם מודלי למידה עמוקה מאומנים מראש, היא יכולה לזהות ולקרוא טקסט ביעילות בגופנים שונים, כתבי יד ורקעים מורכבים. בין אם לעיבוד מסמכים אוטומטי, זיהוי לוחיות רישוי או חילוץ טקסט מתמונות, EasyOCR מספקת פתרון עוצמתי וקל משקל. המערכת משלבת:
- זיהוי רב-מודלי: איתור טקסט מבוסס CRAFT עם שיפור 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. תכונות ארגוניות
- הערכת איכות אוטומטית
- איזונים ניתנים להגדרה בין דיוק לריקול
- הקצאת משאבים מותאמת חומרה
התקנה והגדרה
דרישות מערכת
רכיב | פיתוח | ייצור |
---|---|---|
Python | 3.6+ | 3.8+ |
זיכרון | 8GB | 16GB+ |
GPU | אופציונלי | NVIDIA (CUDA 11.8+) |
אפשרויות התקנה
התקנה בסיסית
pip install easyocr # מתקין רק תלותיות מעבד
תמיכת 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,he" \
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','he'])
result = ocr.process('חוזה_משפטי.jpg')
print(f"דיוק ממוצע: {result['confidence']:.2%}")
2. עיבוד קבוצתי של חשבוניות
חילוץ שדות מפתח מפורמטים שונים של חשבוניות:
חילוץ נתוני חשבוניות
import easyocr
import re
from pathlib import Path
reader = easyocr.Reader(['he'])
PATTERNS_INVOICE = {
'invoice_no': r'חשבונית\s*מספר[:#]?\s*([A-Z0-9-]+)',
'date': r'תאריך[:]?\s*(\d{2}[/-]\d{2}[/-]\d{4})',
'amount': r'סכום\s*סופי[:]?\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 PATTERNS_INVOICE.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('/חשבוניות/')
אופטימיזציית ביצועים
האצת GPU
- עיבוד קבוצתי: גדלי קבוצה אופטימליים (4-16 בהתאם לזיכרון GPU)
- ניהול זיכרון: חלוקה אוטומטית למסמכים גדולים
- דיוק מעורב: הסקה ב-FP16 עם Tensor Cores
כוונון דיוק
- ספי ניגודיות: כוונן
contrast_ths
לסריקות באיכות נמוכה - סינון גודל טקסט: הגדר
min_size
להתעלם מטקסט קטן - עדיפות שפה: סדר שפות לפי שכיחות צפויה