Pytesseract неверное распознавание текста, когда слова близки друг к другу

Вопрос или проблема

Когда я использую PyTesseract для распознавания текста на этом изображении, он возвращает ‘FORREST C. BLopGetTrT’ вместо FORREST C. BLODGETT Результат кода, который я получаю

изображение, которое я использую и которое содержит много имен.

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

мой код

from pytesseract import image_to_string
import pytesseract
from PIL import Image
import cv2

pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract.exe'

img = cv2.imread("textimg.png")
(h, w) = img.shape[:2]
img = cv2.resize(img, (w*20, h*20))
gry = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
thr = cv2.threshold(gry, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)[1]
txt = image_to_string(thr, lang="eng")
print(txt)

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

Ответ или решение

Проблема с распознаванием текста в PyTesseract: решение проблемы близости символов

При использовании PyTesseract для распознавания текста изображение может возникнуть множество ошибок, особенно когда буквы слишком близко расположены друг к другу. Рассмотрим проблему, с которой вы столкнулись, а именно неправильное распознавание имени «FORREST C. BLODGETT», где инструмент выдал название «FORREST C. BLopGetTrT».

1. Причины ошибок распознавания

Ошибки в распознавании текста могут быть вызваны несколькими факторами:

  • Плотность текста: Если буквы и слова расположены слишком близко, это может привести к смешиванию символов.
  • Качество изображения: Низкое разрешение и плохая контрастность могут затруднить процесс распознавания.
  • Шрифт и стиль: Некоторые шрифты и стили (например, курсив или жирный шрифт) могут быть сложнее для распознавания.

2. Решения для улучшения распознавания

a) Оптимизация обработки изображения
  • Увеличение контраста: Применение методов повышения контраста изображений может помочь выделить текст. Рассмотрите возможность применения функции CLAHE (Contrast Limited Adaptive Histogram Equalization).
from skimage import exposure

# Применяем CLAHE к изображению
clahe = cv2.createCLAHE(clipLimit=2.0, tileGridSize=(8, 8))
clahe_img = clahe.apply(gry)
b) Улучшение бинаризации
  • Изменение порогов: Экспериментируйте с различными методами бинаризации (например, Otsu, адаптивная бинаризация), которые позволяют улучшить качество распознавания текста.
# Адаптивная бинаризация
thr = cv2.adaptiveThreshold(gry, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 11, 2)
c) Изменение размеров изображения

Хотя вы уже пробовали увеличить размер изображения, вместо этого попробуйте уменьшить его, что может помочь в разделении символов:

# Уменьшение изображения для более четкого распознавания
img = cv2.resize(img, (w // 2, h // 2))

3. Использование дополнительных параметров PyTesseract

Вы можете изменить параметры настройки Tesseract, чтобы улучшить качество распознавания текста. Например, использование config параметра для установки уровня DPI:

custom_config = r'--oem 3 --psm 6'
txt = image_to_string(thr, lang='eng', config=custom_config)
  • OEM (OCR Engine Mode): 3 использует как LSTM, так и старый движок.
  • PSM (Page Segmentation Mode): 6 предполагает, что изображение содержит один блок текста.

4. Применение предобученных моделей

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

Заключение

Ошибки распознавания текста в PyTesseract — распространенная проблема, особенно при нахождении близко расположенных букв. Используя стратегии оптимизации обработки изображений, изменения параметров Tesseract и применения творческого подхода к методам бинаризации, можно значительно повысить точность распознавания. Следует помнить, что качество базового изображения всегда является решающим фактором, и уделение внимания его предварительной обработке может обеспечить наилучшие результаты.

Оцените материал
Добавить комментарий

Капча загружается...