如何在tesseract中保留文档结构

时间:2014-03-24 12:44:39

标签: ocr tesseract

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

input

我得到的输出如下:

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

5 个答案:

答案 0 :(得分:19)

较新版本的tesseract(3.04)有一个名为preserve_interword_spaces的选项,它可以做你想要的。

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

此选项的详细信息为here

答案 1 :(得分:4)

唯一可靠的方法是启用hOCR输出并解析它。它将包含页面上每个单词的位置(以像素为单位)。

您可以在Tesseract的配置文件或您使用的任何API中指定tessedit_create_hocr 1来完成此操作。

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

答案 2 :(得分:3)

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

答案 3 :(得分:0)

对于要保留一列连续文本的多列文档(例如,先阅读第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 :(得分:0)

在我的情况下(命令行)添加--psm 6选项是可行的