pytesseract: не верно распознается текст изображения

Друзья, мне нужно распознать числа на изображении, но при помощи pytesseract.Image_to_string() не получается - плохо считывает. Опытным путем, мне показалось, что проблема в фоне,но видимо не только. Менял фон, но изображение все равно плохо считывается. Прикладываю пример изображения. Это полное изображение, я конечно обрезал, обесцвечивал. фото возможно плохого качества, воспринимается не верно(третье фото результата)

Изначальное изображение. Результат обработки с фильтрами

Добавляю код:

from PIL import Image
import pytesseract
img = Image.open('/home/zevs525/Рабочий стол/resA3.jpg')
r, g, b = img.split()
g.save('/home/zevs525/Рабочий стол/resB.jpg')
#r.show()
g.show()
#b.show()

text = pytesseract.image_to_string(g)

print(text)


Но проблема еще в чем: похожее фото воспринимается правильно: введите сюда описание изображения


Ответы (1 шт):

Автор решения: strawdog

Вам нужно делать предварительную обработку изображения. Изображение на сером фоне у вас и изображение с желтыми цифрами с точки зрения тессеракта совсем не похожи. Попробуйте сделать так:

Исходный файл:

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

from PIL import Image, ImageEnhance, ImageFilter
import pytesseract


img = Image.open('tess_img.png')
# Увеличиваем контрастность:
enhancer = ImageEnhance.Contrast(img)
img = enhancer.enhance(2)

# Преобразуем в черно-белый рисунок:
thresh = 200
fn = lambda x : 255 if x > thresh else 0
res = img.convert('L').point(fn, mode='1')

res.save("res.png") #сохранил предварительно обработанный файл для наглядности

Теперь картинка выглядит так:

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

text = pytesseract.image_to_string(res, lang="eng", config='--psm 6')
#обратите внимание на значение параметра pcm
print(text)

Результат:

342/436

text = pytesseract.image_to_string(res, lang="eng", config='--psm 13')
#играемся со значением параметра pcm
print(text)

342/430

→ Ссылка