التعرّف الضوئي على نصوص المشاهد باستخدام Ultralytics YOLO26
ما التعرّف الضوئي على نصوص المشاهد؟#
يكشف التعرّف الضوئي على الحروف (OCR) النصوص في الصور ويقرأها. يجمع حل OCR بين كاشف نصوص Ultralytics YOLO26 وواجهة خلفية للتعرّف على النصوص. ويدعم مربعات الكشف المحاذية للمحاور، ومربعات الكشف الموجّهة (OBB)، ومضلعات التجزئة، ثم يُرجع النص المتعرّف عليه بترتيب القراءة.
يظل الكشف والتعرّف مكوّنين منفصلين، لذا يمكنك إقران كاشف نصوص المشاهد لديك مع PaddleOCR أو نموذج التعرّف الخاص بك.
لماذا تستخدم التعرّف الضوئي على نصوص المشاهد؟#
- هندسة نصوص مرنة: استخدم نماذج الكشف أو OBB أو التجزئة للنصوص الأفقية أو المُدارة أو غير المنتظمة.
- تعرّف قابل للتبديل: شغّل PaddleOCR من دون شيفرة تكامل إضافية، أو مرّر دالة قابلة للاستدعاء لنموذج آخر.
- مخرجات منظّمة: يمكنك الوصول إلى النص المتعرّف عليه، ودرجتي الثقة للتعرّف والكشف، والهندسة المصدرية، وصورة مشروحة من كائن نتائج واحد.
شغّل التعرّف الضوئي على نصوص المشاهد باستخدام YOLO26#
PaddleOCR اختياري ويُحمّل عند إنشاء OCR باستخدام recognizer="paddleocr"، مع تثبيت PaddleOCR 3.x وإصدار PaddlePaddle المخصص لوحدة CPU عند عدم توفرهما. للتعرّف باستخدام GPU، ثبّت أولاً إصدار paddlepaddle-gpu المتوافق؛ ولا تُضاف حزم OCR إلى تبعيات Ultralytics الأساسية.
مرّر صورة وكاشف نصوص إلى حل OCR. تتضمن النتيجة الصورة المشروحة والنص المتعرّف عليه:
yolo solutions ocr model="scene-text-obb.pt" source="path/to/video.mp4" recognizer="paddleocr"نقاط تحقق YOLO26-Text#
توفر عائلة YOLO26-Text العامة نقاط تحقق OBB من n وs وm وl وx. عيّن ULTRALYTICS_API_KEY إلى مفتاح API الخاص بك في منصة Ultralytics، ثم حمّل نقطة تحقق باستخدام معرّف URI الخاص بالمنصة:
export ULTRALYTICS_API_KEY="your-api-key"ocr = solutions.OCR(model="ul://ultralytics-yolo/yolo26-text/yolo26n-text", recognizer="paddleocr")
result = ocr(im0)استبدل yolo26n-text بـ yolo26s-text أو yolo26m-text أو yolo26l-text أو yolo26x-text لاستخدام نموذج أكبر.
وسيطات OCR#
إليك جدولًا بمعاملات OCR:
| المعامل | النوع | الافتراضي | الوصف |
|---|---|---|---|
model | str | None | مسار ملف نموذج Ultralytics YOLO. |
recognizer | str أو Callable | 'paddleocr' | واجهة خلفية للتعرّف على النصوص أو دالة قابلة للاستدعاء تقبل قصاصة BGR وتُرجع (text, confidence). |
line_width | int | 2 | سماكة الخط للصناديق والنقاط المفتاحية والعدادات التي يرسمها الحل. |
verbose | bool | True | يفعّل سجل الحل لكل إطار، ويشمل شكل المدخل وعدد الفئات وسرعة المعالجة. يظل استدعاء التتبع نفسه صامتًا دائمًا. |
بالإضافة إلى ذلك، تُدعم إعدادات التصور التالية:
| المعامل | النوع | الافتراضي | الوصف |
|---|---|---|---|
show | bool | False | إذا كان True، يعرض الصور أو مقاطع الفيديو المشروحة في نافذة. يفيد ذلك في الحصول على ملاحظات مرئية فورية أثناء التطوير أو الاختبار. |
show_conf | bool | True | يعرض درجة الثقة لكل اكتشاف بجوار التسمية، ما يوضح مدى يقين النموذج بشأن كل اكتشاف. |
show_labels | bool | True | يعرض تسميات كل اكتشاف في المخرجات المرئية، ما يتيح فهم الكائنات المكتشفة فورًا. |
كيف يعمل التعرّف الضوئي على نصوص المشاهد؟#
- اكتشاف النصوص: يُنتج YOLO26 مربعات محاذية للمحاور أو مربعات موجّهة أو مضلعات تجزئة.
- إنشاء قصاصات للتعرّف: تُقصّ المربعات لتلائم الصورة. وتُصحّح مربعات OBB تحويلياً على امتداد الحافة التي تمتد من اليسار إلى اليمين بأكبر قدر، بحيث تظل المربعات القريبة من الشكل المربّع معتدلة، وتصبح أسطر النص المائلة أفقية في اتجاه القراءة. أما مضلعات التجزئة، فيُصحّح مستطيلها المُدار ذو المساحة الدنيا مع الإبقاء على المضلع الأصلي. وتُدار القصاصات التي يزيد ارتفاعها على عرضها بمقدار 1.5 مرة على الأقل 90° عكس اتجاه عقارب الساعة، كما في PaddleOCR.
- التعرّف على النصوص: يعالج PaddleOCR جميع القصاصات على دفعات من 16. أما أدوات التعرّف المخصّصة، فتتلقى قصاصة واحدة في كل مرة.
- ترتيب النتائج وعرضها: تُجمع النصوص في أسطر أفقية وتُرتّب من الأعلى إلى الأسفل ومن اليسار إلى اليمين. ويستخدم التصوير المرئي خط Unicode للنصوص غير ASCII، مثل الصينية.
تشير الإحداثيات دائماً إلى الصورة الأصلية، لا إلى مدخل الكاشف أو قصاصة التعرّف.
استخدام أداة تعرّف مخصّصة#
مرّر دالة قابلة للاستدعاء لدمج نموذج تعرّف آخر من دون تغيير مسار الكشف أو الهندسة أو الترتيب. تُشغّل الدالة مرة واحدة لكل قصاصة BGR غير فارغة من numpy.ndarray. أعد صفاً واحداً من (text, confidence) في كل استدعاء، وليس قائمة بنتائج دفعة:
| عنصر الصف | النوع المقبول | الوصف |
|---|---|---|
text | str | النص المفكوك لهذه القصاصة. أعد "" عند عدم التعرّف على أي نص. |
confidence | float أو int أو numpy.floating | قيمة ثقة رقمية للتعرّف، يحوّلها الحل إلى float. |
def recognize(crop):
# شغّل نموذج التعرّف لديك على قصاصة BGR وفكّ ترميز مخرجاته هنا.
return "example", 0.95
ocr = solutions.OCR(model="custom-text.pt", recognizer=recognize)
result = ocr(im0)تؤدي أسماء الواجهات الخلفية غير المدعومة إلى رفع استثناء ValueError. عند عدم اكتشاف أي نص، تكون result.texts فارغة ولا يُستدعى جهاز التعرّف.
نتائج OCR#
يُرجع كل استدعاء كائن SolutionResults . استخدم result.plot_im للصورة المشروحة وresult.texts للسجلات بترتيب قراءة حتمي:
| المفتاح | النوع | الوصف |
|---|---|---|
text | str | النص المتعرّف عليه. |
confidence | float | ثقة التعرّف، وهي منفصلة عن ثقة الكشف. |
detection_confidence | float | ثقة كاشف YOLO. |
detection_index | int | فهرس الكشف المصدر قبل الترتيب حسب تسلسل القراءة. |
polygon | list[list[float]] | مضلع الصورة الأصلية: أربع زوايا لعمليات الكشف بالمربعات ومربعات OBB، أو مخطط القناع. |
التبعيات والتراخيص#
| المكوّن | مطلوب | الدور | الترخيص |
|---|---|---|---|
| Ultralytics | نعم | كشف YOLO وهندسة القصاصات وتنسيق النتائج | AGPL-3.0 |
| PaddlePaddle | لـ recognizer="paddleocr" فقط | بيئة تشغيل التعرّف | Apache-2.0 |
| PaddleOCR 3.x | لـ recognizer="paddleocr" فقط | نماذج التعرّف على أسطر النصوص ومهايئ الاستدلال | Apache-2.0 |
| دالة مخصّصة قابلة للاستدعاء | لا | تكامل التعرّف الذي يملكه المستخدم | يحدده الجهاز الخلفي |
قد يُنزّل PaddleOCR أوزان التعرّف عند الاستخدام الأول. راجع بطاقة النموذج المحدد وشروط إعادة التوزيع قبل تضمين هذه الملفات أو نشرها. وتُعد تراخيص نقاط التحقق المخصّصة مستقلة.
الأسئلة الشائعة#
نعم. مرّر دالة قابلة للاستدعاء بوصفها
recognizerوأعد(text, confidence)لكل قصاصة BGR. راجع استخدام أداة تعرّف مخصّصة لمعرفة مواصفات المدخلات والمخرجات.لا. يتعامل OCR مع كل صورة مدخلة على حدة، من دون معرّفات تتبّع أو تخزين مؤقت لنتائج التعرّف. عالج كل إطار فيديو كمدخل مستقل عندما تحتاج إلى OCR إطاراً بإطار.
يمكنك تصدير كاشف YOLO باستخدام وضع التصدير المعتاد، لكن PaddleOCR أو أداة التعرّف المخصّصة لا تُضمّن في ملف كاشف ONNX أو TensorRT أو أي صيغة أخرى. انشر الكاشف المُصدّر وبيئة تشغيل التعرّف كمكوّنين منفصلين، أو أبقِ طبقة التركيب هذه في Python.
التعليقات
اطرح سؤالًا، وشارك نتائجك، أو ساعد شخصًا آخر.