Стратегии предварительной обработки OpenCV Python для распознавания символов OCR (pytesseract)Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Стратегии предварительной обработки OpenCV Python для распознавания символов OCR (pytesseract)

Сообщение Anonymous »

Я хотел спросить, какие для моего случая наиболее оптимальны методы предварительной обработки в письмах, которые я хотел бы прочитать. Я использую pytesseract для распознавания символов, но иногда мои символы не распознаются должным образом.
Вот несколько примеров изображений, которые я использую, но я использую больше:
Изображение

Изображение

Наиболее распространенные проблемы:
  • 5 распознается как S (но не наоборот)
  • S распознается как O (но не наоборот)
  • / получает признался, что я
Я пробовал несколько методов, но если один метод устраняет проблему, возникает другая проблема. Распознавание символов работает большую часть времени, но оно нестабильно, я бы сказал, ~80%. Я могу сделать снимок, выполнить обработку и распознавание, затем сделать новый снимок в тех же условиях, и распознавание не работает, кажется, что распознавание находится в пределах допуска шума
Я думаю что большая часть проблемы заключается в том, что шрифт выделен жирным шрифтом. Например, я заметил, что чем шире /, тем больше вероятность, что он будет распознан как I. Я пробовал cv2.resize(fx=2, fy=2) + cv2.erode(), но потом по какой-то причине Я понял, что чем толще цифра 5, тем меньше вероятность, что она будет распознана как S. В то же время, если символы толще или я уменьшаю порог бинаризации, дыра в цифре 4 заполняется и вызывает проблемы.
Не могу изменить шрифт. Я пробовал фотографировать с разной экспозицией, но, похоже, ничто не решает суть проблемы. Это лучший фокус, которого я могу добиться. Я не могу внести в белый список определенные символы, потому что возможны как буквы, так и цифры. Я не хочу делать .replace('SX', '5X'), потому что целью проверки является проверка правильности печати этикетки.
Методы, которые я пробовал :
  • Обычная бинаризация
  • Бинаризация OTSU
  • Адаптивная пороговая обработка
    Изменить размер + erode()
  • Повысить масштаб изображения с помощью cv2.dnn_superres, вроде лучше, но слишком медленно, потому что мне нужно обработать много изображений
  • Выравнивание гистограммы перед любым из вышеперечисленных действий.
ПРИМЕЧАНИЕ. Я могу получить решение для образцов изображений, но не могу получить согласованное решение, если изображения немного различаются, Я не могу заставить его работать на 100% время.
Может ли кто-нибудь предоставить информацию о том, как бы вы очистили эти изображения?
РЕДАКТИРОВАТЬ:
Я добавил несколько примеров предварительной обработки в действии. Для меня слишком много примеров, но я опубликую хотя бы один.
Изображение:
Изображение

Код: Выделить всё

image = cv2.imread('original.png', cv2.IMREAD_GRAYSCALE)

sharpening_kernel = np.array([[0, -1, 0],
[-1,  5, -1],
[0, -1, 0]])

image170 = cv2.filter2D(image, -1, sharpening_kernel)
_, image170 = cv2.threshold(image170, 170, 255, cv2.THRESH_BINARY)

image200 = cv2.filter2D(image, -1, sharpening_kernel)
_, image200 = cv2.threshold(image200, 200, 255, cv2.THRESH_BINARY)

image230 = cv2.filter2D(image, -1, sharpening_kernel)
_, image230 = cv2.threshold(image230, 230, 255, cv2.THRESH_BINARY)

print(pytesseract.image_to_string(image170))
print(pytesseract.image_to_string(image200))
print(pytesseract.image_to_string(image230))
Изображение
 – вывод на печать: PSX (неверно)
Изображение
 – вывод на печать: P5X (верно)
< изображение alt="" src="https://i.sstatic.net/MIQgK1pB.png" /> - Вывод на печать: PSX (неверно)
Мне нужно было достичь очень определенного порога для бинаризация для получения правильного чтения.
То, что я хотел подчеркнуть, очень сложно найти правильные параметры, потому что если у меня будет немного другое освещение, размер или какие-либо другие настройки, я не буду получить правильное чтение каждый раз. Мне нужен более надежный способ справиться с этим. Я немного менял здесь параметры, и иногда у меня получалось хорошее чтение, иногда плохое

Подробнее здесь: https://stackoverflow.com/questions/793 ... -recogniti
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»