Pytesseract阅读收据

时间:2019-03-13 10:49:53

标签: python ocr 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 个答案:

答案 0 :(得分:0)

仅应用简单的阈值不足以使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/