#python #ocr #python-tesseract
#python #распознавание текста #python-tesseract
Вопрос:
Я попытался прочитать текст с изображения квитанции, используя pytesseract. Но в результирующем тексте много странных символов, и это действительно выглядит ужасно. Вот мой код, который я использовал для манипулирования изображением:
import sys
from PIL import Image
import cv2 as cv
import numpy as np
import pytesseract
def manipulate_image(img):
img = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
kernel = np.ones((1,1), dtype = "uint8")
img = cv.erode(img, kernel, iterations = 1)
img = cv.threshold(img, 0, 255,
cv.THRESH_BINARY | cv.THRESH_OTSU)[1]
img = cv.medianBlur(img, 3)
return img
if len(sys.argv) > 2:
print("Please provide only name of image.")
elif len(sys.argv) == 2:
img = cv.imread(sys.argv[1])
img = manipulate_image(img)
cv.imwrite("test.png", img)
text = pytesseract.image_to_string(img)
print text.encode('utf8')
else:
print("Please provide name of image.")
вот изображение моей тестовой квитанции:
https://imgur.com/a/RjeQ9dL
и после обработки появляется выходное изображение:
https://imgur.com/a/1tFZRdq
и есть текстовый результат:
""'9vco4v‘l7
0 .Vt3t00N 00t300N BUNUUS
SKLEP PUU POPUGOH|
UL. JHGIELLUNSKA 25, 70-364 SZCZ[C|N
TEL. 91 4841-20-58
N|P: 955—150-21-B2
dn.19r03.05 Uydr.8534
PARAGON FISKALNY
CIHSTKH 17 0,3 ¥ 16,30 = 4.89 B
Sp.0p.B 4,89 PTU B= 8,00% 0,35
Razem PTU 0,35
ZOP{HCUNU GUTUNKQ PLN
RESZTA PLN
0025/1373 H0103 0N|0 H.
15F H9HF[B9416} 13fl02D6k0[20D4334C
7?? BW 140
Есть идеи, как выполнить это лучше, чтобы получить более приятные результаты?
Комментарии:
1. Вы можете протестировать и попробовать некоторую обработку изображений с помощью opencv, такую как размывание, расширение или запуск
textcleaner
на изображениях из библиотеки ImageMagick, а затем попробовать tesseract.2. Я пробовал enroding, но это, хм, не всегда работает. Я посмотрю на textcleaner. Спасибо!
Ответ №1:
Применения простого порогового значения будет недостаточно, чтобы pyTesseract правильно распознал символы. Для существенного улучшения ваших результатов можно выполнить гораздо больше предварительной обработки, например:
- с использованием Tesseract V4, где реализовано глубокое обучение
- сегментация символов
- используя только ту часть квитанции, где текст находится через обнаружение границ
- преобразование перспективы для выравнивания текста
Это несколько длинные темы, чтобы написать все в одном ответе, но вы можете ознакомиться с некоторыми статьями на pyImageSearch, где об этом говорится гораздо более подробно:
https://www.pyimagesearch.com/2014/09/01/build-kick-ass-mobile-document-scanner-just-5-minutes/
https://www.pyimagesearch.com/2018/09/17/opencv-ocr-and-text-recognition-with-tesseract/
Комментарии:
1. Спасибо за эти ссылки. Я не знал, какие преобразования выполнять, и эти ссылки могли бы быть действительно полезны.