Tesserocr不承认文字

时间:2017-03-29 08:31:58

标签: python tesseract

我想询问有关如何解决tesserocr无法识别图像中某条线的问题的建议。

这是图像。来自Simple Digit Recognition OCR in OpenCV-Python

enter image description here

代码

from PIL import Image
from tesserocr import PyTessBaseAPI, RIL

image = Image.open('test3.png')
with PyTessBaseAPI() as api:
    api.SetImage(image)
    boxes = api.GetComponentImages(RIL.TEXTLINE, True)
    print 'Found {} textline image components.'.format(len(boxes))
    for i, (im, box, _, _) in enumerate(boxes):
        api.SetRectangle(box['x'], box['y'], box['w'], box['h'])
        ocrResult = api.GetUTF8Text()
        conf = api.MeanTextConf()
        result = (u"Box[{0}]: x={x}, y={y}, w={w}, h={h}, "
            "confidence: {1}, text: {2}").format(i, conf, ocrResult, **box)

    print result

结果是这样的

Found 5 textline image components.
Box[0]: x=10, y=5, w=582, h=29, confidence: 81, text: 9821480865132823066470938


Box[1]: x=9, y=55, w=581, h=30, confidence: 91, text: 4460955058223172535940812


Box[2]: x=10, y=106, w=575, h=30, confidence: 90, text: 8481117450284102701938521


Box[3]: x=12, y=157, w=580, h=30, confidence: 0, text:
Box[4]: x=11, y=208, w=581, h=30, confidence: 89, text: 6442881097566593344612847

它无法识别方框3中的数字。我应该添加或修改脚本,以便方框3显示正确的结果?

感谢您的帮助。

2 个答案:

答案 0 :(得分:3)

Tesseract 4.00.00alpha使用默认psm 3oem 3模式正确识别它。以下是结果。

enter image description here

如果您仍在使用tesseract,建议您使用v4.0tesserocr升级为v3.x

  

修改

     

要升级tesserocr以支持v4.00.00.alpha,请查看此"Is any plan to porting tesseract 4.0 (alpha)"问题页面。有   使其有效的准则。

答案 1 :(得分:1)

在下面的代码中出现了正确的OCR结果但没有x,y,w,h和置信度信息。

import tesserocr
from PIL import Image

print tesserocr.tesseract_version()  # print tesseract-ocr version

image = Image.open('SO_5TextLines.png')

lines = tesserocr.image_to_text(image)  # print ocr text from image
for line in lines.split("\r"):
    print line

输出:

tesseract 3.05.00
 leptonica-1.74.1
  libjpeg 8d : libpng 1.6.27 : libtiff 4.0.6 : zlib 1.2.8 : libopenjp2 2.1.2

9821480865132823066470938
4460955058223172535940812
8481117450284102701938521
1055596446229489549303819
6442881097566593344612847

在OSX Sierra中运行您的代码,并且错过第4行得到相同的结果。看起来问题是由api.SetRectangle()引起的,您可以将代码修改为print boxes以进一步检查。示例代码仅基于您提供的示例文本图像,需要测试更多图像以验证它是否适合所有图像。

希望这适合你。