trOCR: ثورة في التعرف على النصوص باستخدام المحولات (Transformer)
احصل على دقة تشبه البشر في استخراج النصوص من المحتوى المطبوع، والمكتوب بخط اليد، ومتعدد اللغات.
ما هي واجهة برمجة تطبيقات trOCR؟
trOCR (التعرف البصري على الحروف المعتمد على المحولات) هو نموذج OCR الثوري من مايكروسوفت الذي يستغل قوة معماريات المحولات (Transformer) لتقديم دقة غير مسبوقة في التعرف على النصوص. على عكس أنظمة OCR التقليدية التي تعتمد فقط على الشبكات التلافيفية، يدمج trOCR محولات الرؤية (ViTs) مع نمذجة التسلسل إلى تسلسل، مما يمكنه من فهم السياق والعلاقات المكانية في النصوص — حتى للمدخلات الصعبة مثل الملاحظات المكتوبة بخط اليد، أو الصور منخفضة الدقة، أو النصوص المعقدة.
تشمل المزايا الرئيسية لـ trOCR:
- تعرف يشبه البشر: يتفوق في قراءة الخط المتصل والنصوص المشوهة حيث تفشل أنظمة OCR التقليدية.
- إتقان متعدد اللغات: النماذج المدربة مسبقًا تدعم الإنجليزية، الفرنسية، الألمانية، والمزيد، مع إمكانية الضبط الدقيق للغات أخرى.
- خطوة عمل متكاملة: يجمع بين اكتشاف النصوص والتعرف عليها في عملية واحدة مبسطة.
- تكامل سلس: مبني على مكتبة Hugging Face's Transformers لنشر سهل في سير العمل الحالي.
من أرشفة الوثائق التاريخية إلى معالجة الفواتير، يحدد trOCR معيارًا جديدًا لأداء OCR في التطبيقات الواقعية.
لماذا تختار trOCR؟
- مدعوم بالمحولات (Transformer): يتفوق على النماذج المعتمدة على CNN بدقة أعلى بنسبة 15-20% في مجموعات البيانات القياسية مثل IAM Handwriting.
- متخصص في الخط اليدوي: نموذج
trocr-base-handwritten
يحقق دقة تزيد عن 90% للنص المتصل. - حد أدنى من المعالجة المسبقة: متين ضد الاختلافات في الخط، والتوجيه، والضوضاء في الخلفية.
- استدلال قابل للتوسيع: يعالج مجموعات من الصور بسرعة شبه خطية على وحدات معالجة الرسومات (GPU).
- قابل للتخصيص: اضبطه على بيانات خاصة بمجال معين (مثل الوصفات الطبية، أو الفواتير).
التثبيت
يتطلب trOCR كل من PyTorch أو TensorFlow ومكتبة Hugging Face Transformers. للحصول على أفضل أداء، نوصي باستخدام بيئة مدعومة بوحدة معالجة الرسومات (GPU):
التثبيت باستخدام PyTorch (يوصى باستخدام GPU)
pip install transformers torch torchvision
pip install datasets # اختياري للضبط الدقيق
ملاحظة: نماذج microsoft/trocr-base
تتطلب ~1.5 جيجابايت من مساحة التخزين لكل نوع (مطبوع/مكتوب بخط اليد). تأكد من توفر مساحة تخزين كافية وذاكرة وصول عشوائي (8 جيجابايت+ للمعالجة المجمعة).
أمثلة على الأكواد
استكشف إمكانيات trOCR من خلال هذه التطبيقات العملية. تفترض جميع الأمثلة أنك قمت بتثبيت التبعيات المطلوبة.
المثال 1: التعرف على النصوص المكتوبة بخط اليد
يوضح هذا المثال قوة trOCR في فك الخط المتصل. النموذج (trocr-base-handwritten
) تم تدريبه على قاعدة بيانات IAM للخط اليدوي، مما يجعله مثاليًا للملاحظات، الرسائل، أو الوثائق التاريخية.
التعرف على الخط اليدوي
from transformers import TrOCRProcessor, VisionEncoderDecoderModel
from PIL import Image
# تحميل المعالج والنموذج (مخصص للخط اليدوي)
processor = TrOCRProcessor.from_pretrained("microsoft/trocr-base-handwritten")
model = VisionEncoderDecoderModel.from_pretrained("microsoft/trocr-base-handwritten")
# فتح الصورة ومعالجتها مسبقًا
image = Image.open("handwritten_note.jpg").convert("RGB") # تأكد من تنسيق RGB
pixel_values = processor(image, return_tensors="pt").pixel_values # تطبيع وتغيير الحجم
# توليد توقعات النص
generated_ids = model.generate(pixel_values)
text = processor.batch_decode(generated_ids, skip_special_tokens=True)[0]
print(f"النص المستخرج: {text}")
نصيحة: للحصول على أفضل النتائج مع الخط اليدوي:
- استخدم صورًا بدقة 300+ DPI
- تأكد من الإضاءة المناسبة لتجنب الظلال
- اقتصص الصورة لمناطق النص إذا أمكن
المثال 2: معالجة المستندات المطبوعة
للنصوص المطبوعة أو المكتوبة (الكتب، الفواتير، إلخ)، يقدم نموذج trocr-base-printed
دقة شبه كاملة. يوضح هذا المثال كيفية معالجة مستند ممسوح ضوئيًا:
استخراج النص المطبوع
from transformers import pipeline
from PIL import Image
# استخدم خط أنابيب Hugging Face للتبسيط
ocr = pipeline("image-to-text", model="microsoft/trocr-base-printed")
# معالجة المستند
image = Image.open("contract.png").convert("RGB") # تحويل إلى RGB
results = ocr(image)
# عرض النتائج المنظمة
for idx, item in enumerate(results):
print(f"الصفحة {idx + 1}: {item['generated_text']}")
ملاحظة الأداء: على وحدة معالجة رسومات NVIDIA T4، يعالج هذا ~3 صفحات/ثانية. للعمليات المجمعة، استخدم المعالجة المجمعة (انظر المثال 3).
المثال 3: المعالجة المجمعة للكفاءة
يدعم trOCR الاستدلال المجمع لتعظيم استخدام الأجهزة. يعالج هذا المثال صورًا متعددة بالتوازي:
استخراج النص المتوازي
import torch
from transformers import TrOCRProcessor, VisionEncoderDecoderModel
from PIL import Image
# التهيئة
device = "cuda" if torch.cuda.is_available() else "cpu"
processor = TrOCRProcessor.from_pretrained("microsoft/trocr-base-printed")
model = VisionEncoderDecoderModel.from_pretrained("microsoft/trocr-base-printed").to(device)
# إعداد المجموعة
image_paths = ["doc1.jpg", "doc2.jpg", "doc3.jpg"]
images = [Image.open(path).convert("RGB") for path in image_paths]
# معالجة المجموعة
pixel_values = processor(images, return_tensors="pt").pixel_values.to(device)
generated_ids = model.generate(pixel_values)
texts = processor.batch_decode(generated_ids, skip_special_tokens=True)
# عرض النتائج
for path, text in zip(image_paths, texts):
print(f"{path}: {text[:50]}...") # عرض أول 50 حرفًا
إرشادات حجم المجموعة:
ذاكرة وحدة معالجة الرسومات (VRAM) | حجم المجموعة الموصى به |
---|---|
8 جيجابايت | 4-8 صور (1024x768) |
16 جيجابايت+ | 16-32 صورة |
نصائح متقدمة
لتعزيز أداء trOCR بشكل أكبر:
- المعالجة المسبقة: استخدم OpenCV لتصحيح الانحرافات وضبط التباين:
تحسين الصورة
import cv2 img = cv2.imread("low_quality_doc.jpg") img = cv2.rotate(img, cv2.ROTATE_90_CLOCKWISE) # تصحيح الاتجاه img = cv2.threshold(img, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)[1] # ثنائي
- الضبط الدقيق: قم بتكييفه مع بيانات مجالك الخاص:
نص الضبط الدقيق
from transformers import Seq2SeqTrainingArguments args = Seq2SeqTrainingArguments( output_dir="./trocr-finetuned", per_device_train_batch_size=8, num_train_epochs=3, save_steps=1000, evaluation_strategy="steps" ) # راجع وثائق Hugging Face لإعداد التدريب الكامل
الختام
يعيد trOCR تعريف ما هو ممكن في التعرف البصري على الحروف من خلال الجمع بين معماريات المحولات (Transformer) ورؤية الحاسوب. تجعله قدرته على التعامل مع كل شيء من الملاحظات المكتوبة بخط اليد إلى المستندات متعددة اللغات الكثيفة أداة لا غنى عنها في:
- المشاريع الأرشيفية: أرشفة المخطوطات التاريخية مع الحفاظ على التنسيق.
- سير عمل قانونية/طبية: استخراج النصوص من المستندات الحساسة مع سجلات التدقيق.
- هندسة إمكانية الوصول: إنشاء نصوص بديلة للصور على نطاق واسع.
مع التحسينات المستمرة من مايكروسوفت ومجتمع المصادر المفتوحة، يواصل trOCR دفع حدود تقنية التعرف على النصوص.