ذكاء البيانات التوليدية

كيفية التعرف الضوئي على الحروف باستخدام Tesseract و OpenCV و Python

التاريخ:

في منشور المدونة هذا ، سنحاول شرح التكنولوجيا وراء محرك Tesseract الأكثر استخدامًا ، والذي تمت ترقيته بأحدث المعارف التي تم البحث عنها في التعرف الضوئي على الأحرف.

ستعمل هذه المقالة أيضًا كدليل إرشادي / تعليمي حول كيفية التنفيذ التعرف الضوئي على الحروف في الثعبان باستخدام محرك Tesseract. سنستعرض الوحدات التالية:

  • ميزات Tesseract OCR
  • معالجة OCR باستخدام OpenCV
  • تشغيل Tesseract مع CLI و Python
  • حدود محرك Tesseract

المُقدّمة

التعرف الضوئي على الحروف = التعرف الضوئي على الحروف. بمعنى آخر ، تقوم أنظمة التعرف الضوئي على الحروف بتحويل صورة ثنائية الأبعاد للنص ، والتي يمكن أن تحتوي على نص مطبوع أو مكتوب بخط اليد من تمثيل الصورة إلى نص يمكن قراءته آليًا. يتكون التعرف الضوئي على الحروف كعملية بشكل عام من عدة عمليات فرعية لأداء بأكبر قدر ممكن من الدقة. العمليات الفرعية هي:

  • معالجة الصورة
  • توطين النص
  • تجزئة الحروف
  • التعرف على الحروف
  • بعد تجهيز

يمكن أن تختلف العمليات الفرعية في القائمة أعلاه بالطبع ، ولكن هذه خطوات تقريبًا مطلوبة للتعامل مع التعرف التلقائي على الأحرف. في برنامج OCR ، الهدف الرئيسي هو التعرف على جميع الكلمات الفريدة والتقاطها باستخدام لغات مختلفة من أحرف نصية مكتوبة.

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

عملية التعرف الضوئي على الحروف (مجاملة)

تتعامل محركات OCR من الجيل التالي مع هذه المشكلات المذكورة أعلاه جيدة حقًا من خلال الاستفادة من أحدث الأبحاث في مجال التعلم العميق. من خلال الاستفادة من مجموعة النماذج العميقة ومجموعات البيانات الضخمة المتاحة للجمهور ، تحقق النماذج دقة عالية في مهام معينة. في الوقت الحاضر من الممكن أيضا توليد بيانات اصطناعية مع خطوط مختلفة باستخدام شبكات الخصومة التوليدية وعدد قليل من المناهج التوليدية الأخرى.

التعرف الضوئي على الحروف لا يزال أ مشكلة صعبة عندما يحدث النص في بيئات غير مقيدة ، مثل مشاهد طبيعية، بسبب التشوهات الهندسية والخلفيات المعقدة والخطوط المتنوعة. لا تزال التكنولوجيا لديها إمكانات هائلة بسبب حالات الاستخدام المختلفة للتعلم العميق القائم على OCR مثل


هل لديك مشكلة في التعرف الضوئي على الحروف؟ هل تريد تقليل تكاليف إدخال البيانات في مؤسستك؟ رئيس لأكثر من النانو وبناء نماذج التعرف الضوئي على الحروف استخراج النص من الصور or استخراج البيانات من ملفات PDF مع الذكاء الاصطناعي التعرف الضوئي على الحروف بتنسيق PDF!


هناك الكثير من التعرف الضوئي على الحروف البرامج المتاحة. لم أجد أي مقارنة جودة بينهما ، لكنني سأكتب عن بعضها الذي يبدو أنه الأكثر ملاءمة للمطورين.

تسراكت - محرك OCR مفتوح المصدر اكتسب شعبية بين مطوري OCR. على الرغم من أنه قد يكون التنفيذ والتعديل أمرًا مؤلمًا في بعض الأحيان ، إلا أنه لم يكن هناك الكثير من بدائل OCR المجانية والقوية في السوق لأطول فترة. بدأت Tesseract كدكتوراه. مشروع بحثي في ​​HP Labs ، بريستول. اكتسب شعبية وتم تطويره بواسطة HP بين عامي 1984 و 1994. في عام 2005 أصدرت HP Tesseract كبرنامج مفتوح المصدر. منذ عام 2006 تم تطويره من قبل جوجل.

مقارنة اتجاهات جوجل لمختلف أدوات OCR مفتوحة المصدر

الأخطبوط - OCRopus هو نظام OCR مفتوح المصدر يسمح بسهولة تقييم وإعادة استخدام مكونات OCR من قبل الباحثين والشركات. مجموعة من برامج تحليل المستندات ، وليس نظام التعرف الضوئي على الحروف الجاهز. لتطبيقه على المستندات الخاصة بك ، قد تحتاج إلى القيام ببعض المعالجة المسبقة للصورة ، وربما تدريب نماذج جديدة أيضًا. بالإضافة إلى نصوص التعرف نفسها ، هناك العديد من النصوص البرمجية لتحرير الحقيقة الأساسية وتصحيحها ، وقياس معدلات الأخطاء ، وتحديد مصفوفات الارتباك التي يسهل استخدامها وتحريرها.


بصري - يعمل نظام العين بشكل أفضل على المستندات المطبوعة باستخدام مكبس يدوي ، بما في ذلك تلك المكتوبة بلغات متعددة. تعمل باستخدام سطر الأوامر. إنه نظام OCR التاريخي الحديث. ميزاته الأساسية هي:

  • التعلم بدون إشراف لخطوط غير معروفة: يتطلب فقط صور المستندات ومجموعة نصية.
  • القدرة على التعامل مع المستندات المزعجة: الكتابة بالحبر غير المتسقة ، التباعد ، المحاذاة العمودية
  • دعم المستندات متعددة اللغات ، بما في ذلك تلك التي تحتوي على تبديل رمز كبير على مستوى الكلمة.
  • التعلم بدون إشراف لأنماط التباين الإملائي بما في ذلك التهجئة القديمة واختزال الطابعة.
  • في وقت واحد ، النسخ المشترك في كل من الأشكال الدبلوماسية (الحرفية) والتطبيعية.

سويفت اوكر - سوف أذكر أيضًا محرك OCR المكتوب بلغة Swift نظرًا لوجود تطور كبير يتم إجراؤه في تطوير استخدام لغة Swift كلغة برمجة تطوير مستخدمة للتعلم العميق. الدفع مدونة لمعرفة المزيد لماذا. SwiftOCR هي مكتبة OCR سريعة وبسيطة تستخدم الشبكات العصبية للتعرف على الصور. تدعي SwiftOCR أن محركها يتفوق على مكتبة Tessaract المعروفة جيدًا.

في منشور المدونة هذا ، سنضع التركيز على Tesseract OCR ومعرفة المزيد عن كيفية عملها وكيفية استخدامها.


Tesseract OCR

Tesseract هو محرك التعرف على النص مفتوح المصدر (OCR) ، وهو متاح بموجب ترخيص Apache 2.0. يمكن استخدامه مباشرة ، أو (للمبرمجين) باستخدام API لاستخراج النص المطبوع من الصور. وهو يدعم مجموعة متنوعة من اللغات. لا تحتوي Tesseract على واجهة مستخدم رسومية مضمنة ، ولكن هناك العديد منها متاحًا من صفحة 3rdParty. Tesseract متوافق مع العديد من لغات البرمجة والأطر من خلال الأغلفة التي يمكن العثور عليها هنا. يمكن استخدامه مع تحليل التخطيط الحالي للتعرف على النص داخل مستند كبير ، أو يمكن استخدامه جنبًا إلى جنب مع كاشف النص الخارجي للتعرف على النص من صورة سطر نصي واحد.

تدفق عملية OCR لبناء API مع Tesseract من أ بلوق وظيفة

يتضمن Tesseract 4.00 نظامًا فرعيًا جديدًا للشبكة العصبية تم تكوينه ليكون أداة التعرف على سطر النص. لها أصولها في OCRopus المستندة إلى Python LSTM التنفيذ ولكن أعيد تصميمه لـ Tesseract في C ++. نظام الشبكة العصبية في Tesseract يسبق TensorFlow ولكنه متوافق معه ، حيث توجد لغة وصف شبكة تسمى لغة مواصفات الرسم البياني المتغير (VGSL) ، وهي متاحة أيضًا لـ TensorFlow.

للتعرف على صورة تحتوي على حرف واحد ، نستخدم عادةً الشبكة العصبية التلافيفية (CNN). نص الطول التعسفي هو سلسلة من الأحرف ، ويتم حل هذه المشاكل باستخدام RNNs و LSTM هو شكل شائع من RNN. اقرأ هذا المنشور لمعرفة المزيد عنه LSTM.


التكنولوجيا - كيف تعمل

LSTMs رائعة في تسلسل التعلم ولكنها تبطئ كثيرًا عندما يكون عدد الحالات كبيرًا جدًا. هناك نتائج تجريبية تشير إلى أنه من الأفضل أن تطلب من LSTM تعلم تسلسل طويل من تسلسل قصير من العديد من الفئات. تم تطوير Tesseract من نموذج OCRopus في Python والذي كان شوكة لـ LSMT في C ++ ، تسمى CLSTM. CLSTM هو تطبيق لنموذج الشبكة العصبية المتكررة LSTM في C ++ ، باستخدام مكتبة Eigen للحسابات العددية.

Tesseract 3 عملية التعرف الضوئي على الحروف من ورقة

Legacy Tesseract 3.x كان يعتمد على العملية متعددة المراحل حيث يمكننا التمييز بين الخطوات:

  • العثور على الكلمات
  • العثور على الخط
  • تصنيف الشخصية

تم العثور على الكلمات عن طريق تنظيم خطوط النص في النقط ، ويتم تحليل الخطوط والمناطق للحصول على درجة ثابتة أو نص متناسب. يتم تقسيم أسطر النص إلى كلمات بشكل مختلف وفقًا لنوع تباعد الأحرف. ثم يستمر الاعتراف كعملية تمرير. في التمرير الأول ، تتم محاولة التعرف على كل كلمة على حدة. يتم تمرير كل كلمة مرضية إلى المصنف التكيفي كبيانات تدريب. ثم يحصل المصنف التكيفي على فرصة للتعرف بدقة أكبر على النص في أسفل الصفحة.

كان تحديث أداة Tesseract بمثابة جهد في تنظيف الكود وإضافة نموذج LSTM جديد. تتم معالجة صورة الإدخال في مربعات (مستطيل) خطًا تلو الآخر في نموذج LSTM وإعطاء الإخراج. في الصورة أدناه يمكننا تصور كيف يعمل.

كيف يستخدم Tesseract نموذج LSTM <font style="vertical-align: inherit;"> كمادة تطعيم في تجديد عيوب محيط بالذورة (الحنك) الكبيرة:</font>

بعد إضافة أداة تدريب جديدة وتدريب النموذج بالكثير من البيانات والخطوط ، يحقق Tesseract أداءً أفضل. ومع ذلك ، ليس جيدًا بما يكفي للعمل على نص مكتوب بخط اليد وخطوط غريبة. من الممكن ضبط الطبقات العليا أو إعادة تدريبها للتجريب.


تثبيت Tesseract

يعد تثبيت tesseract على Windows أمرًا سهلاً مع الثنائيات المترجمة مسبقًا هنا. لا تنس تعديل متغير البيئة "المسار" وإضافة مسار تريسراكت. بالنسبة لتثبيت Linux أو Mac ، يتم تثبيته مع أوامر قليلة.

بعد التثبيت ، تحقق من أن كل شيء يعمل عن طريق كتابة الأمر في المحطة الطرفية أو cmd:

$ tesseract --version

وسترى الناتج مشابهًا لما يلي:

tesseract 4.0.0
leptonica-1.76.0
libjpeg 9c : libpng 1.6.34 : libtiff 4.0.9 : zlib 1.2.8
Found AVX2
Found AVX
Found SSE

يمكنك تثبيت غلاف ثعبان الثعبان بعد ذلك باستخدام النقطة.
$ pip install pytesseract

يتم شحن مكتبة Tesseract باستخدام أداة سطر أوامر سهلة الاستخدام تسمى tesseract. يمكننا استخدام هذه الأداة لإجراء OCR على الصور ويتم تخزين الإخراج في ملف نصي. إذا أردنا دمج Tesseract في كود C ++ أو Python ، فسنستخدم واجهة برمجة تطبيقات Tesseract.


تشغيل Tesseract مع CLI

استدعاء محرك Tesseract على الصورة مع مسار_الصورة وتحويل الصورة إلى نص ، مكتوبة سطرا بسطر في موجه الأوامر بكتابة ما يلي:

$ tesseract image_path stdout

لكتابة نص الإخراج في ملف:

$ tesseract image_path text_result.txt

لتحديد اسم طراز اللغة ، اكتب اختصار اللغة بعده -l العلم ، بشكل افتراضي يستغرق اللغة الإنجليزية:

$ tesseract image_path text_result.txt -l eng

بشكل افتراضي ، تتوقع Tesseract صفحة من النص عندما تقوم بتقسيم صورة. إذا كنت تسعى فقط إلى التعرف الضوئي على الحروف في منطقة صغيرة ، فجرب وضع تجزئة مختلف ، باستخدام ملف -psm جدال. هناك 14 وضع متاح والتي يمكن العثور عليها هنا. بشكل افتراضي ، يقوم Tesseract بأتمتة تجزئة الصفحة بشكل كامل ولكنه لا يقوم بالكشف عن الاتجاه والبرنامج النصي. لتحديد المعلمة ، اكتب ما يلي:

$ tesseract image_path text_result.txt -l eng --psm 6

هناك أيضًا حجة أكثر أهمية ، وهي وضع محرك التعرف الضوئي على الحروف (OEM). يحتوي Tesseract 4 على محركين OCR - محرك Legacy Tesseract ومحرك LSTM. هناك أربعة أوضاع تشغيل تم اختيارها باستخدام خيار –oem.
0 محرك قديم فقط.
1 محرك الشبكات العصبية LSTM فقط.
2 محركات Legacy + LSTM.
3 افتراضي ، بناءً على ما هو متاح.

نتيجة محرك Tesseract OCR

OCR مع Pytesseract و OpenCV

Pytesseract أو Python-tesseract هي أداة التعرف الضوئي على الحروف للبيثون والتي تعمل أيضًا كغلاف لمحرك Tesseract-OCR. يمكنه قراءة النص في الصور والتعرف عليه ويستخدم بشكل شائع في صورة python ocr إلى حالات استخدام النص.

إنه مفيد أيضًا كبرنامج نصي لاستدعاء مستقل لـ tesseract ، حيث يمكنه قراءة جميع أنواع الصور التي تدعمها مكتبات التصوير وسادة و Leptonica ، بما في ذلك jpeg و png و gif و bmp و tiff وغيرها.

قراءة المزيد من المعلومات حول نهج بايثون هنا. يمكن العثور على رمز هذا البرنامج التعليمي في هذا مستودع.

import cv2 
import pytesseract

img = cv2.imread('image.jpg')

# Adding custom options
custom_config = r'--oem 3 --psm 6'
pytesseract.image_to_string(img, config=custom_config)

معالجة Tesseract

لتجنب جميع الطرق التي يمكن أن تنخفض بها دقة إخراج tesseract ، تحتاج إلى التأكد من أن الصورة مناسبة معالجتها مسبقًا.

وهذا يشمل إعادة الصقل ، والثنائيات ، وإزالة الضوضاء ، والخياطة المكتبية ، وما إلى ذلك.

لمعالجة صورة OCR ، استخدم أي من وظائف الثعبان التالية أو اتبع وثائق OpenCV.

import cv2
import numpy as np

img = cv2.imread('image.jpg')

# get grayscale image
def get_grayscale(image):
    return cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# noise removal
def remove_noise(image):
    return cv2.medianBlur(image,5)
 
#thresholding
def thresholding(image):
    return cv2.threshold(image, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)[1]

#dilation
def dilate(image):
    kernel = np.ones((5,5),np.uint8)
    return cv2.dilate(image, kernel, iterations = 1)
    
#erosion
def erode(image):
    kernel = np.ones((5,5),np.uint8)
    return cv2.erode(image, kernel, iterations = 1)

#opening - erosion followed by dilation
def opening(image):
    kernel = np.ones((5,5),np.uint8)
    return cv2.morphologyEx(image, cv2.MORPH_OPEN, kernel)

#canny edge detection
def canny(image):
    return cv2.Canny(image, 100, 200)

#skew correction
def deskew(image):
    coords = np.column_stack(np.where(image > 0))
    angle = cv2.minAreaRect(coords)[-1]
     if angle < -45:
        angle = -(90 + angle)
    else:
        angle = -angle
    (h, w) = image.shape[:2]
    center = (w // 2, h // 2)
    M = cv2.getRotationMatrix2D(center, angle, 1.0)
    rotated = cv2.warpAffine(image, M, (w, h), flags=cv2.INTER_CUBIC, borderMode=cv2.BORDER_REPLICATE)
    return rotated

#template matching
def match_template(image, template):
    return cv2.matchTemplate(image, template, cv2.TM_CCOEFF_NORMED) 

دعونا نعمل مع مثال لرؤية الأشياء بشكل أفضل. هذا ما تبدو عليه صورتنا الأصلية -

نظام الكتابة Aurebesh

بعد المعالجة المسبقة بالرمز التالي

image = cv2.imread('aurebesh.jpg')

gray = get_grayscale(image)
thresh = thresholding(gray)
opening = opening(gray)
canny = canny(gray)

ورسم الصور الناتجة ، نحصل على النتائج التالية.

الصورة بعد المعالجة المسبقة

يبدو إخراج الصورة الأصلية هكذا -

GALACTIC BASIC
(AUREBESH)

RE HFVMEVEIiZwoyv Ze
ABC DE F GH I JK LM
N—0- PQ RST Uv WX
2 | Ff 8 G& Pf fF § 5 op 7
ee
5, jf FF Ty ee ee
=
334 477 OED

إليك ما يبدو عليه إخراج الصور المختلفة المعالجة مسبقًا -

صورة حافة الحافة (ليست جيدة جدًا) -

CAE Cn Cae AS
(AUREBESE)

EA Na
oe SS
(Ne CI (ENE
a, ee oe ea
2
a a A: rc
|, |
a
Sear eo/e

ecm emclomt Cia cuoomct mi im

صورة عتبة -

GALACTIC BASIC
(AVREBESH)
RS 7FVMeEVEi1iFf o£
A B C D EF GH IJ K LM
AOoder7Nnvroroava
N O P Q@R S$ TU VW XK Y¥ Z
7 ee For 8 Ro Pf F Boao om #
0 12 3 4 5 6 7 8 9 , . !
>» 1kr7 @ by FEN
2? S$ ( Por Foy of ee
ASGSANDIE
CH AE EO KH NG OO SH TH

فتح الصورة -

GALACTIC BASIC
(AUREZEBELSH)
KEE VTMEUOU EB iw oN es
A BC D EF F @ H | J K LT Ww
AOGdrcrT7WTt HYOAVa4
WO P Q R BS T U VW WK y Z
i J
Oo 1 2 3 46 8 7 SC Ps,
VY ir- -rp,ptUuY?
a a a
AGoOAnNnoOID
CH AE BO KH ®@ OO SH TH

الحصول على مربعات حول النص

باستخدام Pytesseract ، يمكنك الحصول على معلومات المربع المحيط لنتائج OCR باستخدام ما يلي الكود.

سيعطيك النص أدناه معلومات المربع المحيط لكل حرف تم اكتشافه بواسطة tesseract أثناء OCR.

import cv2
import pytesseract

img = cv2.imread('image.jpg')

h, w, c = img.shape
boxes = pytesseract.image_to_boxes(img) 
for b in boxes.splitlines():
    b = b.split(' ')
    img = cv2.rectangle(img, (int(b[1]), h - int(b[2])), (int(b[3]), h - int(b[4])), (0, 255, 0), 2)

cv2.imshow('img', img)
cv2.waitKey(0)

الوظيفة إذا أردت مربعات حول الكلمات بدلاً من الأحرف image_to_data سوف تكون في متناول اليدين. يمكنك استخدام ال image_to_data وظيفة مع نوع الإخراج المحدد مع pytesseract Output.


هل لديك مشكلة في التعرف الضوئي على الحروف؟ تريد رقمنة الفواتير ، ملفات PDF أو لوحات الأرقام؟ رئيس لأكثر من النانو والبناء التعرف الضوئي على الحروف على الإنترنت مجانًا نماذج مجانية!


سنستخدم نموذج صورة الفاتورة أعلاه لاختبار مخرجات tesseract.

import cv2
import pytesseract
from pytesseract import Output

img = cv2.imread('invoice-sample.jpg')

d = pytesseract.image_to_data(img, output_type=Output.DICT)
print(d.keys())

يجب أن يمنحك هذا الناتج التالي -
dict_keys(['level', 'page_num', 'block_num', 'par_num', 'line_num', 'word_num', 'left', 'top', 'width', 'height', 'conf', 'text'])

باستخدام هذا القاموس ، يمكننا الحصول على كل كلمة يتم الكشف عنها ، ومعلومات المربع المحيط بها ، والنص الموجود فيها ، ودرجات الثقة لكل منها.

يمكنك رسم المربعات باستخدام الكود أدناه -

n_boxes = len(d['text'])
for i in range(n_boxes):
    if int(d['conf'][i]) > 60:
        (x, y, w, h) = (d['left'][i], d['top'][i], d['width'][i], d['height'][i])
        img = cv2.rectangle(img, (x, y), (x + w, y + h), (0, 255, 0), 2)

cv2.imshow('img', img)
cv2.waitKey(0)

إليك ما سيبدو عليه هذا لصورة نموذج فاتورة.


مطابقة قالب النص

خذ مثالًا لمحاولة العثور على مكان في الصورة. هنا سيكون نموذجنا عبارة عن نمط تعبير عادي سنطابقه مع نتائج OCR الخاصة بنا للعثور على المربعات المحيطة المناسبة. سوف نستخدم regex الوحدة النمطية و image_to_data وظيفة لهذا.

import re
import cv2
import pytesseract
from pytesseract import Output

img = cv2.imread('invoice-sample.jpg')
d = pytesseract.image_to_data(img, output_type=Output.DICT)
keys = list(d.keys())

date_pattern = '^(0[1-9]|[12][0-9]|3[01])/(0[1-9]|1[012])/(19|20)dd$'

n_boxes = len(d['text'])
for i in range(n_boxes):
    if int(d['conf'][i]) > 60:
    	if re.match(date_pattern, d['text'][i]):
	        (x, y, w, h) = (d['left'][i], d['top'][i], d['width'][i], d['height'][i])
	        img = cv2.rectangle(img, (x, y), (x + w, y + h), (0, 255, 0), 2)

cv2.imshow('img', img)
cv2.waitKey(0)

كما هو متوقع ، نحصل على مربع واحد حول تاريخ الفاتورة في الصورة.


أوضاع تجزئة الصفحة

هناك عدة طرق يمكن من خلالها تحليل صفحة من النص. يوفر tesseract api العديد من أوضاع تجزئة الصفحة إذا كنت ترغب في تشغيل OCR على منطقة صغيرة فقط أو في اتجاهات مختلفة ، إلخ.

فيما يلي قائمة بأوضاع تجزئة الصفحات المدعومة بواسطة tesseract -

0 التوجيه والكشف عن البرنامج النصي (OSD) فقط.
1 تقسيم تلقائي للصفحة باستخدام OSD.
2 تجزئة تلقائية للصفحة ، ولكن بدون OSD أو OCR.
3 تجزئة تلقائية بالكامل للصفحة ، لكن بدون OSD (إفتراضي)
4 افترض عمودًا واحدًا للنص ذي الأحجام المتغيرة.
5 افترض كتلة واحدة موحدة من النص المحاذاة رأسياً.
6 افترض وجود كتلة نصية واحدة موحدة.
7 تعامل مع الصورة كسطر نصي واحد.
8 تعامل مع الصورة ككلمة واحدة.
9 تعامل مع الصورة ككلمة واحدة في دائرة.
10 تعامل مع الصورة كحرف واحد.
11 نص متفرق. ابحث عن أكبر قدر ممكن من النص بدون ترتيب معين.
12 نصوص متفرقة مع OSD.
13 خط خام. تعامل مع الصورة كسطر نصي واحد ، متجاوزًا الاختراقات الخاصة بـ Tesseract.

لتغيير وضع تجزئة صفحتك ، قم بتغيير --psm وسيطة في سلسلة التكوين المخصصة الخاصة بك إلى أي من رموز الوضع المذكورة أعلاه.


كشف التوجه والنص

يمكنك اكتشاف اتجاه النص في صورتك وأيضًا النص المكتوب به. الصورة التالية -
صورة
بعد تشغيل الكود التالي -

osd = pytesseract.image_to_osd(img)
angle = re.search('(?<=Rotate: )d+', osd).group(0)
script = re.search('(?<=Script: )d+', osd).group(0)
print("angle: ", angle)
print("script: ", script)

سيتم طباعة الإخراج التالي.

angle: 90
script: Latin

كشف الأرقام فقط

خذ هذه الصورة على سبيل المثال -
صورة
يبدو النص المستخرج من هذه الصورة هكذا.

‘Customer name Hallium Energy services
Project NEHINS-HIB-HSA
lavoice no 43876324
Dated 17%h Nov2018
Pono 76496234

يمكنك التعرف على الأرقام فقط عن طريق تغيير التكوين إلى ما يلي

custom_config = r'--oem 3 --psm 6 outputbase digits'
print(pytesseract.image_to_string(img, config=custom_config))

الناتج سيبدو هكذا.

--

. 43876324
172018
0 76496234

القائمة البيضاء الأحرف

لنفترض أنك تريد فقط اكتشاف أحرف معينة من الصورة المحددة وتجاهل الباقي. يمكنك تحديد القائمة البيضاء للأحرف (هنا ، استخدمنا جميع الأحرف الصغيرة من الألف إلى الياء فقط) باستخدام التكوين التالي.

custom_config = r'-c tessedit_char_whitelist=abcdefghijklmnopqrstuvwxyz --psm 6'
print(pytesseract.image_to_string(img, config=custom_config))

انتاج -

customername
roject
tnvoleeno
ated

alliumenergyservices
e
thovo

شخصيات القائمة السوداء

إذا كنت متأكدًا من أن بعض الأحرف أو التعبيرات لن تظهر بالتأكيد في النص الخاص بك (سيعيد OCR نصًا خاطئًا بدلاً من الأحرف المدرجة في القائمة السوداء خلاف ذلك) ، يمكنك إدراج هذه الأحرف في القائمة السوداء باستخدام التكوين التالي.

custom_config = r'-c tessedit_char_blacklist=0123456789 --psm 6'
pytesseract.image_to_string(img, config=custom_config)

انتاج -

Customer name Hallium Energy services
Project NEHINS-HIB-HSA
lavoice no
Dated %h Nov%
Pono

كشف بلغات متعددة

يمكنك التحقق من اللغات المتاحة عن طريق كتابة هذا في المحطة

$ tesseract --list-langs

لتنزيل tesseract لاستخدام لغة معينة

$ sudo apt-get install tesseract-ocr-LANG

حيث LANG هو الرمز المكون من ثلاثة أحرف للغة التي تحتاجها. يمكنك معرفة قيم LANG هنا.

يمكنك تنزيل .traindata ملف للغة التي تحتاج منها هنا ونضعها فيه $TESSDATA_PREFIX الدليل (يجب أن يكون هذا هو نفس المكان الذي يوجد فيه tessdata الدليل مثبت) ويجب أن يكون جاهزًا للاستخدام.

ملاحظات - فقط اللغات التي تحتوي على ملف .traineddata تنسيق الملف مدعوم بواسطة tesseract.

لتحديد اللغة التي تحتاج إلى إخراج OCR بها ، استخدم -l LANG الوسيطة في التكوين حيث LANG هو رمز مكون من 3 أحرف للغة التي تريد استخدامها.

custom_config = r'-l eng --psm 6'
pytesseract.image_to_string(img, config=custom_config)

خذ هذه الصورة على سبيل المثال -
صورة
يمكنك العمل بلغات متعددة عن طريق تغيير معلمة LANG على هذا النحو -

custom_config = r'-l grc+tha+eng --psm 6'
pytesseract.image_to_string(img, config=custom_config)

وستحصل على الناتج التالي -

Here’s some Greek:

Οδιο διστα ιμπεδιτ φιμ ει, αδ φελ αβχορρεανθ ελωκυενθιαμ, εξ εσε εξερσι γυ-
βεργρεν ηας. Ατ μει σολετ σριπτορεμ. ἴυς αλια λαβωρε θε. Σιθ κυωτ νυσκυαμ
τρασυνδια αν, ὠμνιυμ ελιγενδι τιν πρι. Παρτεμ φερθερεμ συσιπιαντὺυρ εξ ιυς,ναμ
%0790 แ ร เง ๑ ๕ 80 ๕ 6 ๑ อ 06 ส 0 เง น อ ๓ , πρω πρωπριαε σαεφολα ιδ. Ατ πρι δολορ νυ-
σκυαμ.

6 Thai

Here’s some Thai: ν᾿

ค อ ร ั ป ซั น จ ุ ้ ย โป ร ด ิ ว เซ อ ร ์ ส ถา ป ั ต ย ์ จ ๊ า บ แจ ็ ก พ ็ อ ต ม ้ า ห ิ น อ ่ อ น ซา ก ุ ร ะ ค ั น ถ ธ ุ ร ะ ฟิ ด ส ต า ร ์ ท ง ี ้ บ อ ย
ค อ ต อ ื ่ ม แป ร ั ส ั ง โฆ ค ํ า ส า ป แฟ น ซี ศิ ล ป ว ั ฒ น ธร ร ม ไฟ ล ท ์ จ ิ ๊ ก โก ๋ ก ั บ ด ั ก เจ ล พ ล ็ อ ต ม า ม ่ า ซา ก ุ ร ะ ด ี ล เล อ
ร ์ ซี น ด ั ม พ ์ แฮ ป ป ี ้ เอ ๊ ้ า ะ อ ุ ร ั ง ค ธา ต ุ ซิ ม ฟิ น ิ ก ซ์ เท ร ล เล ่ อ ร ์ อ ว อ ร ์ ด แค น ย อ น ส ม า พ ั น ธ์ ค ร ั ว ซอ ง ฮั ม อ า
ข่ า เอ ็ ก ซ์ เพ ร ส

ملاحظات - اللغة المحددة أولاً لملف -l المعلمة هي اللغة الأساسية.

لسوء الحظ لا يحتوي tesseract على ميزة للكشف عن لغة النص في الصورة تلقائيًا. يتم توفير حل بديل بواسطة وحدة بيثون أخرى تسمى langdetect والتي يمكن تثبيتها عبر النقطة.

$ pip install langdetect

هذه الوحدة النمطية مرة أخرى ، لا تكتشف لغة النص باستخدام صورة ولكنها تحتاج إلى إدخال سلسلة لاكتشاف اللغة من. أفضل طريقة للقيام بذلك هي باستخدام tesseract أولاً للحصول على نص التعرف البصري على الحروف (OCR) بأي لغة قد تشعر بها هناك ، باستخدام langdetect للعثور على اللغات المضمنة في نص التعرف البصري على الحروف (OCR) ثم تشغيل OCR مرة أخرى مع اللغات الموجودة.

لنفترض أن لدينا نصًا اعتقدنا أنه باللغة الإنجليزية والبرتغالية.

custom_config = r'-l eng+por --psm 6'
txt = pytesseract.image_to_string(img, config=custom_config)

from langdetect import detect_langs
detect_langs(txt)

هذا يجب أن ينتج قائمة باللغات في النص واحتمالاتها.

[en:0.714282468983554, es:0.2857145605644145]

رموز اللغة المستخدمة من قبل langdetect اتبع رموز ISO 639-1. للمقارنة ، يرجى التحقق و . نجد أن اللغة المستخدمة في النص هي الإنجليزية والإسبانية بدلاً من ذلك.

نحصل على النص مرة أخرى عن طريق تغيير التكوين إلى

custom_config = r'-l eng+spa --psm 6'
txt = pytesseract.image_to_string(img, config=custom_config)

ملاحظات - أداء Tesseract سيئ عندما تكون اللغات المحددة في التكوين خاطئة أو غير مذكورة على الإطلاق في صورة متعددة اللغات. يمكن أن يؤدي ذلك إلى تضليل وحدة langdetect قليلاً أيضًا.


باستخدام tessdata_fast

إذا كانت السرعة مصدر قلق كبير بالنسبة لك ، يمكنك استبدال نماذج لغة tessdata الخاصة بك بنماذج tessdata_fast التي هي إصدارات صحيحة 8 بت من نماذج tessdata.

بحسب tessdata_fast جيثب -

يحتوي هذا المستودع على إصدارات صحيحة سريعة من النماذج المدربة لـ Tesseract مفتوح المصدر محرك OCR.

تعمل هذه الطرازات فقط مع محرك LSTM OCR الخاص بـ Tesseract 4.

  • هذه حل وسط حول السرعة / الدقة فيما يتعلق بما يقدم "أفضل قيمة مقابل المال" من حيث السرعة مقابل الدقة.
  • بالنسبة لبعض اللغات ، لا يزال هذا هو الأفضل ، ولكن بالنسبة للغالبية لا.
  • تم بعد ذلك تكامل تكوين الشبكة "أفضل قيمة مقابل المال" لزيادة السرعة.
  • سيرغب معظم المستخدمين في استخدام ملفات البيانات المدربة هذه لإجراء التعرف الضوئي على الحروف وسيتم شحنها كجزء من توزيعات Linux على سبيل المثال. أوبونتو 18.04.
  • الإيقاع الدقيق / التدريب التدريجي لا ممكن من هؤلاء fast النماذج ، لأنها عدد صحيح 8 بت.
  • عند استخدام النماذج في هذا المستودع ، يتم دعم محرك OCR الجديد المستند إلى LSTM فقط. الإرث tesseract المحرك غير مدعوم بهذه الملفات ، لذا فإن وضعي oem لـ Tesseract '0' و '2' لن يعملوا معهم.

لاستخدام tessdata_fast النماذج بدلا من tessdata، كل ما عليك فعله هو تنزيل tessdata_fast ملف بيانات اللغة من هنا ووضعه داخل الخاص بك $TESSDATA_PREFIX الدليل.


تحتاج إلى رقمنة الوثائق والإيصالات أو الفواتير ولكن كسول جدا لرمز؟ رئيس لأكثر من النانو وبناء نماذج التعرف الضوئي على الحروف مجانا!


التدريب Tesseract على البيانات المخصصة

يتضمن Tesseract 4.00 محرك التعرف على الشبكة العصبية الجديد الذي يوفر دقة أعلى بشكل ملحوظ على صور المستندات. تتطلب الشبكات العصبية بيانات تدريب أكثر بكثير وتتدرب بشكل أبطأ بكثير من Tesseract الأساسي. بالنسبة للغات التي تعتمد على اللغة اللاتينية ، تم تدريب بيانات النموذج الحالية المقدمة على حوالي 400000 سطر نصي تغطي حوالي 4500 خطًا.

من أجل تشغيل البرنامج التعليمي للتدريب Tesseract 4.0 LSTM بنجاح ، تحتاج إلى تثبيت عملي لأدوات التدريب Tesseract 4 و Tesseract 4 ولديك أيضًا نصوص التدريب وملفات البيانات المدربة المطلوبة في أدلة معينة. يزور جيثب ريبو للملفات والأدوات.

Tesseract 4.00 يستغرق بضعة أيام إلى بضعة أسابيع للتدريب من الصفر. حتى مع كل بيانات التدريب الجديدة هذه ، إليك بعض الخيارات للتدريب:

  • ضبط دقيق - بدءاً من لغة مدربة حالية ، تدرب على بياناتك الإضافية المحددة. على سبيل المثال التدريب على مجموعة بيانات مكتوبة بخط اليد وبعض الخطوط الإضافية.
  • اقطع الطبقة العلوية - من الشبكة وأعد تكوين طبقة عليا جديدة باستخدام البيانات الجديدة. إذا لم تنجح عملية الضبط ، فمن المرجح أن يكون هذا هو الخيار التالي الأفضل. القياس لماذا هذا مفيد ، خذ على سبيل المثال نماذج مدربة على مجموعة بيانات ImageNet. الهدف هو بناء مصنف قط أو كلب ، الطبقات السفلية في النموذج جيدة في التجريد المنخفض المستوى مثل الزوايا والخطوط الأفقية والعمودية ، لكن الطبقات العليا في النموذج تجمع بين هذه الميزات وتكتشف آذان القط أو الكلب والعينين والأنف وهلم جرا. من خلال إعادة تدريب الطبقات العليا فقط ، فإنك تستخدم المعرفة من الطبقات السفلية والاندماج مع مجموعة البيانات المختلفة الجديدة.
  • التراجع عن نقطة الصفر - هذا نهج بطيء للغاية ما لم يكن لديك مجموعة تدريب تمثيلية للغاية وكبيرة بما يكفي لمشكلتك. أفضل مورد للتدريب من البداية هو اتباع هذا جيثب ريبو.

دليل حول كيفية التدريب على البيانات المخصصة الخاصة بك وإنشاء .traineddata يمكن العثور على الملفات هنا, هنا و هنا.

لن نقوم بتغطية كود التدريب باستخدام Tesseract في منشور المدونة هذا.

حدود Tesseract

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

تلخيص قيود Tesseract في القائمة.

  • التعرف الضوئي على الحروف ليس دقيقًا مثل بعض الحلول التجارية المتاحة لنا.
  • لا يعمل بشكل جيد مع الصور المتأثرة بالقطع الأثرية بما في ذلك الانسداد الجزئي والمنظور المشوه والخلفية المعقدة.
  • إنه غير قادر على التعرف على الكتابة اليدوية.
  • قد يجد هذا رطانة ويبلغ عن ذلك باعتباره ناتج التعرف الضوئي على الحروف.
  • إذا كان المستند يحتوي على لغات خارج تلك المذكورة في وسيطات -l LANG ، فقد تكون النتائج ضعيفة.
  • ليس من الجيد دائمًا تحليل ترتيب القراءة الطبيعي للوثائق. على سبيل المثال ، قد يفشل في إدراك أن المستند يحتوي على عمودين ، وقد يحاول ضم النص عبر الأعمدة.
  • قد تؤدي عمليات المسح ذات الجودة الرديئة إلى التعرف الضوئي على الحروف بجودة ضعيفة.
  • لا يكشف عن معلومات حول ما ينتمي إليه نص عائلة الخط.

هناك بالطبع طريقة أفضل وأبسط وأكثر بديهية لأداء مهام OCR.


التعرف الضوئي على الحروف مع نانونات

واجهة برمجة تطبيقات التعرف الضوئي على الحروف لشبكات النانو يسمح لك ببناء نماذج التعرف الضوئي على الحروف بسهولة. لا داعي للقلق بشأن المعالجة المسبقة لصورك أو القلق بشأن مطابقة القوالب أو إنشاء محركات قائمة على القواعد لزيادة دقة طراز OCR الخاص بك.

يمكنك تحميل بياناتك أو التعليق عليها أو ضبط النموذج على التدريب وانتظار الحصول على التنبؤات من خلال واجهة مستخدم قائمة على المتصفح دون كتابة سطر واحد من التعليمات البرمجية أو القلق بشأن وحدات معالجة الرسومات أو العثور على الهياكل المناسبة لنماذج التعلم العميق. يمكنك أيضًا الحصول على استجابات JSON لكل توقع لدمجها مع الأنظمة الخاصة بك وإنشاء تطبيقات مدعومة بالتعلم الآلي مبنية على أحدث خوارزميات وبنية تحتية قوية.

باستخدام واجهة المستخدم الرسومية: https://app.nanonets.com/

يمكنك أيضًا استخدام Nanonets-OCR API باتباع الخطوات التالية: ‌

الخطوة 1: استنساخ الريبو ، تثبيت التبعيات

git clone https://github.com/NanoNets/nanonets-ocr-sample-python.git
cd nanonets-ocr-sample-python
sudo pip install requests tqdm

الخطوة 2: احصل على مفتاح API المجاني
احصل على مفتاح API المجاني من https://app.nanonets.com/#/keys

رقم لوحة للكشف-GIF

الخطوة 3: تعيين مفتاح API كمتغير بيئة

export NANONETS_API_KEY=YOUR_API_KEY_GOES_HERE

الخطوة 4: إنشاء نموذج جديد

python ./code/create-model.py

ملحوظة: يؤدي هذا إلى إنشاء MODEL_ID الذي تحتاجه للخطوة التالية

الخطوة 5: إضافة معرف النموذج باسم متغير البيئة

export NANONETS_MODEL_ID=YOUR_MODEL_ID

ملحوظة: ستحصل على YOUR_MODEL_ID من الخطوة السابقة

الخطوة 6: تحميل بيانات التدريب
تم العثور على بيانات التدريب في images (ملفات الصور) و annotations (التعليقات التوضيحية لملفات الصور)

python ./code/upload-training.py

الخطوة 7: نموذج القطار
بمجرد تحميل الصور ، ابدأ في تدريب النموذج

python ./code/train-model.py

الخطوة 8: الحصول على حالة النموذج
النموذج يستغرق ~ 2 ساعة للتدريب. سوف تتلقى رسالة بريد إلكتروني بمجرد تدريب النموذج. في غضون ذلك ، تحقق من حالة النموذج

python ./code/model-state.py

الخطوة 9: جعل التنبؤ
بمجرد تدريب النموذج. يمكنك عمل تنبؤات باستخدام النموذج

python ./code/prediction.py ./images/151.jpg

نانونات والبشر في الحلقة

screenتساعد شاشة "معتدل" عمليات التصحيح والدخول وتقليل عبء عمل المراجع اليدوي بنسبة 90٪ تقريبًا وتقليل التكاليف بنسبة 50٪ للمؤسسة.

وتشمل الميزات

  1. تتبع التوقعات التي هي صحيحة
  2. تتبع تلك التي هي خاطئة
  3. إجراء تصحيحات لتلك غير دقيقة
  4. حذف تلك التي هي خاطئة
  5. ملء التوقعات المفقودة
  6. تصفية الصور مع نطاقات التاريخ
  7. احصل على تهم للصور التي تم الإشراف عليها مقابل الصور التي لم يتم الإشراف عليها

جميع الحقول مبنية على واجهة مستخدم سهلة الاستخدام والتي تتيح للمستخدم الاستفادة من تقنية التعرف الضوئي على الحروف والمساعدة في تحسينها أثناء التنقل دون الحاجة إلى كتابة أي كود أو فهم كيفية عمل التكنولوجيا.


هل لديك مشكلة في التعرف الضوئي على الحروف؟ هل تريد تقليل تكاليف إدخال البيانات في مؤسستك؟ رئيس لأكثر من النانو وبناء نماذج التعرف الضوئي على الحروف استخراج النص من الصور or استخراج البيانات من ملفات PDF!


وفي الختام

تمامًا كما أثر التعلم العميق على كل جوانب رؤية الكمبيوتر تقريبًا ، ينطبق الأمر نفسه على التعرف على الأحرف والتعرف على خط اليد. تمكنت النماذج القائمة على التعلم العميق من الحصول على دقة غير مسبوقة في التعرف على النص ، تتجاوز بكثير التقليدية استخراج المعلومات و معالجة صور التعلم الآلي اقتراب.

يعمل Tesseract بشكل جيد عندما تتبع صور المستندات الإرشادات التالية:

  • تجزئة نظيفة لنص المقدمة من الخلفية
  • محاذاة أفقية وقياسها بشكل مناسب
  • صورة عالية الجودة بدون تشويش وضجيج

يدعم أحدث إصدار من Tesseract 4.0 التعرف الضوئي على الحروف المستند إلى التعلم العميق والذي هو أكثر دقة بشكل ملحوظ. محرك OCR نفسه مبني على شبكة ذاكرة قصيرة المدى (LSTM) ، نوع من الشبكة العصبية المتكررة (RNN).

يعتبر Tesseract مثاليًا لمسح المستندات النظيفة ضوئيًا ويأتي بدقة عالية جدًا وتنوع الخط نظرًا لأن تدريبه كان شاملاً. أود أن أقول إن Tesseract هي أداة انتقال إذا كانت مهمتك هي مسح الكتب والمستندات والنص المطبوع على خلفية بيضاء نظيفة.


لمزيد من القراءة

تحديث:
سألنا الكثير من الأشخاص كيف يمكنهم الحصول على التاريخ في شكل نص أو استخدامه عندما يكتشف التاريخ أو أي بيانات أخرى محددة حتى يتمكنوا من إلحاقها بالقائمة.
ها هي الإجابة:
في الكود لرسم مربع محيط حول مربع التاريخ ، ستلاحظ سطرًا يتطابق مع نمط regex d['text']. إنه يرسم مربعًا فقط إذا كان النمط مطابقًا. يمكنك ببساطة استخراج القيم من d['text'] بمجرد تطابق النمط وإلحاقهم بقائمة.

تحديث 2:
للإجابة على الأسئلة حول التعرف الضوئي على الحروف بغير اللغة الإنجليزية ، قمنا بتحديث المزيد من قوائم القراءة.

بقعة_صورة

أحدث المعلومات الاستخباراتية

بقعة_صورة

الدردشة معنا

أهلاً! كيف يمكنني مساعدك؟