Использование Tesseract для чтения дат из небольших изображений

#image-processing #ocr #tesseract #python-tesseract

#обработка изображений #распознавание текста #tesseract #python-tesseract

Вопрос:

У меня есть довольно небольшой набор изображений, который содержит даты. Размер может быть проблемой, но я бы сказал, что качество в порядке. Я следовал рекомендациям, чтобы предоставить движку максимально четкое изображение, какое только могу. После изменения размера примените фильтры, много проб и ошибок и т. Д. Я придумал изображение, которое почти правильно читается. Я привел пример ниже:

тест тессеракта

Теперь это читается как “9 MAR 2021nx0c . Неплохо, но первое 2 читается как " . На данный момент я думаю, что злоупотребляю частью возможностей Tesseract. В конце концов, я знаю, чего следует ожидать, то есть что-то вроде "%d %b %Y" .

Есть ли способ сообщить Tesseract, что он должен попытаться найти наилучшее соответствие, учитывая это сильное ограничение? Предоставление этих метаданных движку должно значительно облегчить задачу. Я читал документацию, но не могу найти способ сделать это.

Я использую pytesseract Tesseract 4.1. с Pytyon 3.9.

Комментарии:

1. в рекомендациях, которые вы связали, указано «для версии 4.x используйте темный текст на светлом фоне», вы инвертируете изображение, которое опубликовали перед обработкой?

Ответ №1:

Вам необходимо знать следующее:

Теперь, если мы центрируем изображение (добавляя границы):

  • введите описание изображения здесь
  • Мы увеличиваем выборку изображения, не теряя ни одного пикселя.

Во-вторых, нам нужно выделить символы на изображении жирным шрифтом, чтобы сделать результат распознавания точным.

  • введите описание изображения здесь

Теперь OCR:

 29 MAR 2021
 

Код:

 import cv2
import pytesseract

# Load the image
img = cv2.imread("xsGBK.jpg")

# Center the image
img = cv2.copyMakeBorder(img, 50, 50, 50, 50, cv2.BORDER_CONSTANT, value=[0, 0, 0])

# Convert to the gray-scale
gry = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# Dilate
gry = cv2.dilate(gry, None, iterations=1)

# OCR
print(pytesseract.image_to_string(gry))

# Display
cv2.imshow("", gry)
cv2.waitKey(0)