由于水平线,Pytesseract OCR无法识别小字

时间:2018-03-29 14:59:00

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

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

我有以下输入图像。

enter image description here

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

  

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

     

选项AB

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

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

    enter image description here

    我得到以下输出

      

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

         

         

    OPON

         

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

1 个答案:

答案 0 :(得分:0)

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

我的代码最初与您的代码一样(第1行),并且遇到了相同的错误。对我有用的是在config参数中将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')