Вопрос или проблема
Когда я использую 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 и применения творческого подхода к методам бинаризации, можно значительно повысить точность распознавания. Следует помнить, что качество базового изображения всегда является решающим фактором, и уделение внимания его предварительной обработке может обеспечить наилучшие результаты.