如何在 tesseract 中保留文档结构

Posted

技术标签:

【中文标题】如何在 tesseract 中保留文档结构【英文标题】:How to preserve document structure in tesseract 【发布时间】:2014-05-01 19:57:56 【问题描述】:

我正在使用 tesseract ocr 从图像中提取文本。保留文档的结构对我来说非常重要。目前 tesseract 不保留结构,实际上它改变了文本的顺序。我的输入是下图。

我得到的输出如下:

Someto the left
Someto the left

Some in the middle
Some in the middle

Some with some tab
Some with some tab

Some with some space between them
Some with some space between them

Sometext here
Sometext here

this much
this much

如何获得与图像中相同结构的所需输出?

即如下:

                                                 Some text here
                                                 Some text here

Some to the left
Some to the left

                    Some in the middle
                    Some in the middle

        Some with some tab
        Some with some tab

Some with some space between them                       this much
Some with some space between them                       this much

【问题讨论】:

【参考方案1】:

较新版本的 tesseract (3.04) 有一个名为 preserve_interword_spaces 的选项,它应该可以满足您的需求。

请注意,tesseract 在单词之间检测到的空格数在相似行之间可能并不总是相同。因此,与前面的一系列空格左对齐的单词(如您的示例中所示)可能不会以这种方式输出 - preserve_interword_spaces 选项不会尝试做任何花哨的事情,它只是保留找到的空格提取。默认情况下,tesseract 会将一系列空格合并为一个。

此选项的详细信息是here。

【讨论】:

谢谢...它的工作原理!在 Windows 上我仍然坚持编译,而在 Ubuntu 14.04 上它工作正常。 在 tess4j 中是否有 API 可以公开这一点? @David 你能在这里分享工作代码吗?它不适合我 @David : 你能解释一下吗请注意,tesseract 检测到的单词之间的空格数在相似的行之间可能并不总是相同。 另外,有没有办法获得也是左对齐的空格。【参考方案2】:

唯一可靠的方法是启用 hOCR 输出并对其进行解析。它将包含页面上每个单词的位置(以像素为单位),与原始图像中一样。

您可以通过在 Tesseract 的配置文件或您使用的任何 API 中指定 tessedit_create_hocr 1 来实现。

hOCR 是 html 的子集,Tesseract 生成的并不总是有效的 XML,因此您可以使用 HTML 解析器或编写自己的解析器,但不能可靠地使用 XML 解析器。

【讨论】:

即使有边界框坐标,我如何在.txt 文件中复制它或在firefox 中以正确的方式查看布局,顺便说一下它在@987654324 中没有打开@。 .txt 文件将具有不同的宽度和高度,所以我不需要为 .txt 文件对其进行规范化。【参考方案3】:

对于想要保留单列连续文本的多列文档(例如,阅读第 1 列,然后是第 2 列)或带有照片的文档(例如,报纸文章),可能值得考虑调整页面分割方法。 tesseract 的默认页面分割方法是只做“自动页面分割”,而不是“方向和脚本检测 (OSD)”。

psm 设置为 1 会告诉 tesseract 使用“使用 OSD 进行自动页面分段”。这允许 tesseract 识别多列文档(而不是将页面视为单个文本块)并帮助 tesseract 避免尝试对照片等非文本块进行 OCR。

有关页面分割方法的更多信息,请参阅:https://github.com/tesseract-ocr/tesseract/wiki/ImproveQuality

这里是调整页面分割方法的命令行语法示例

tesseract imagename outputbase [-l lang] [-psm pagesegmode] [configfile...]

有关语法的更多信息,请参阅:https://github.com/tesseract-ocr/tesseract/wiki

【讨论】:

【参考方案4】:

Tesseract 代码压缩输出中的空格。您将需要更改代码以保留它们。请参阅Tesseract - ambiguity in space and tab 帖子。

【讨论】:

【参考方案5】:

添加--psm 6 选项适用于我的情况(命令行)

【讨论】:

你应该包含一个来源:tesseract-ocr.github.io/tessdoc/…

以上是关于如何在 tesseract 中保留文档结构的主要内容,如果未能解决你的问题,请参考以下文章

Tesseract hOCR:如何检测倒置?

Tesseract:如何导出文本和边界框?

如何使用 python tesseract 设置仅初始化参数?

Tesseract 或任何其他 OCR 库

如何使用 python-tesseract 获取 Hocr 输出

创建可搜索的 PDF 时如何在 PDF 中保留图像和样式?