具有表格或行的文档的 Tesseract OCR 文本顺序
Posted
技术标签:
【中文标题】具有表格或行的文档的 Tesseract OCR 文本顺序【英文标题】:Tesseract OCR text order for documents with tables or rows 【发布时间】:2015-05-19 05:04:37 【问题描述】:我正在使用Tesseract OCR 将扫描的 PDF 转换为纯文本。总的来说,它非常有效,但我对文本的扫描顺序有疑问。当看起来更自然的方式是逐行扫描时,带有表格数据的文档似乎逐列向下扫描。一个非常小规模的例子是:
This is column A, row 1 This is column B, row 1 This is column C, row 1
This is column A, row 2 This is column B, row 2 This is column C, row 2
正在生成以下文本:
This is column A, row 1
This is column A, row 2
This is column B, row 1
This is column B, row 2
This is column C, row 1
This is column C, row 2
我开始阅读文档并使用parameters documented here 进行猜测和测试,但如果有人已经解决了类似的问题,我将不胜感激有关修复的见解。它也可能是一些训练数据,但我不知道它是如何工作的。
【问题讨论】:
【参考方案1】:尝试在Page Segmentation Modes 的单列之一中运行 tesseract:
tesseract input.tif output-filename --psm 6
默认情况下,Tesseract 在分割图像时需要一页文本。如果您只是想对一个小区域进行 OCR,请尝试使用不同的分段模式,使用
-psm
参数。请注意,为剪裁过紧的文本添加白色边框也可能会有所帮助,请参阅问题 398。要查看支持的页面分段模式的完整列表,请使用
tesseract -h
。这是截至 3.21 的 [ed: excerpt only] 列表:全自动页面分割,但没有 OSD。 (默认) 假设有一列大小可变的文本。 假设一个统一的垂直对齐文本块。 假设一个统一的文本块。
在此处查看示例:#using-different-page-segmentation-modes
【讨论】:
命令不应该是:“tesseract input.tif output-filename -psm 6”吗?注意 psm 参数前的单个 hifen【参考方案2】:我知道这是一个老问题,但我一直在努力解决类似的问题,并发现hOCR 输出是解决方案。跑步
tesseract input.tif output-filename hocr
将创建output-file.hocr
(基本上是html),为每个短语的边界框提供坐标。由您决定如何根据这些数据重建表格(可能使用输入图像的尺寸)。
与其他答案一样,指定一些特定的 page segmentation mode 可能有助于将表格中的短语适当分组,但坐标将提供所需的精确结果。
【讨论】:
【参考方案3】:您需要使用以下配置
#Read Image
r = Image.open('8.png')
r.load()
#Converting inmage to text with preserving interline spaces
text = pytesseract.image_to_string(r,config='-c preserve_interword_spaces=1x1 --psm
1 --oem 3' )
或
另一种解决方案是在文本周围绘制轮廓,将所有轮廓保存在单独的文件中,并根据它们的 x,y 坐标对它们进行排序。之后,您只需要从每个图像中提取文本并根据需要显示即可。
【讨论】:
以上是关于具有表格或行的文档的 Tesseract OCR 文本顺序的主要内容,如果未能解决你的问题,请参考以下文章
使用 OCR 引擎 tesseract 无法理解提取文档中的坐标