我正在使用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
答案 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
选项是可行的