Pytesseract OCR因为有横线而无法识别小字。

问题描述 投票:1回答:1

我刚刚开始探索pytesseract。我面临的问题是这样的。

我有以下的输入图像

enter image description here

现在,当我试着在上面运行OCR时,我得到了以下输出。

谢谢你的注册 现在你可以选择你喜欢的枕头了。

选项AB

在对多个图像样本进行尝试后,我可以安全地得出以下结论。

  1. 它是 一个非听写的字罚。
  2. 它正在省略短的字。几乎就像它有一个最小宽度,正在生效,并否决任何宽度小于该宽度的线。
  3. 只有当输入图像周围有边界矩形时才会发生这种情况。如果我把它从输入图像中删除,我就会得到正确的输出。

即在下面的图像上,我得到了以下输出。

enter image description here

我得到了以下输出

谢谢你的报名。现在你可以挑选你喜欢的枕头了。

选项

本节

选项AB

我想不通我到底是哪里出了问题。这是我使用的代码。

from PIL import Image
import pytesseract
import argparse
import cv2

image = cv2.imread('testImage.png')
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
gray = cv2.threshold(gray, 240, 255, cv2.THRESH_BINARY)[1]

filename = "intermediate.png"
cv2.imwrite(filename, gray)

im = Image.open(filename)
text = pytesseract.image_to_string(im)
print(text)

我试着修改了一些配置参数 (crunch_del_min_width, 语言模型_最小复合长度。,和其他一些人)也是,但没有任何帮助。

python-2.7 opencv ocr tesseract python-tesseract
1个回答
0
投票

解决方案在这里找到。Pytesseract OCR的多个配置选项

我的代码原本和你的一样(第1行),我也遇到了同样的错误。对我来说,有效的方法是在配置参数中设置psm=10,允许单字符识别。

代码有时会返回None。

line 1 : text = pytesseract.image_to_string(cropped)

在下一行添加了代码。

line 2 : text = text if text else pytesseract.image_to_string(cropped, config='--psm 10')

第一行将尝试提取句子。如果它成功了,第二行会保持相同的值。然而,如果它返回None,它将寻找单个字符(允许输出较小的单词)。

另外,如果你只是想抓小字。

line 1 : text = pytesseract.image_to_string(cropped, config='--psm 10')
© www.soinside.com 2019 - 2024. All rights reserved.