我想询问有关如何解决tesserocr无法识别图像中某条线的问题的建议。
这是图像。来自Simple Digit Recognition OCR in OpenCV-Python
代码
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显示正确的结果?
感谢您的帮助。
答案 0 :(得分:3)
Tesseract 4.00.00alpha
使用默认psm 3
和oem 3
模式正确识别它。以下是结果。
如果您仍在使用tesseract
,建议您使用v4.0
将tesserocr
升级为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
以进一步检查。示例代码仅基于您提供的示例文本图像,需要测试更多图像以验证它是否适合所有图像。
希望这适合你。