【问题标题】:Pytesseract OCR is not recognizing small words because of horizontal line由于水平线,Pytesseract OCR 无法识别小词
【发布时间】:2018-03-29 14:58:59
【问题描述】:

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

我有以下输入图像。

现在,当我尝试对此运行 OCR 时,我得到以下输出:

感谢您的注册。现在你也是 可以挑选你喜欢的枕头

选项 AB

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

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

即如下图:

我得到以下输出

感谢您的注册。现在你也是 可以挑选你喜欢的枕头

选项

打开

选项 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_widthlanguage_model_min_compound_length 和其他一些参数),但没有任何帮助。

【问题讨论】:

    标签: python-2.7 opencv ocr tesseract python-tesseract


    【解决方案1】:

    在这里找到解决方案:Pytesseract OCR multiple config options

    我的代码最初和你的一样(第 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')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多