使用 Tesseract 进行页面布局分析?
Posted
技术标签:
【中文标题】使用 Tesseract 进行页面布局分析?【英文标题】:Page layout analysis using Tesseract? 【发布时间】:2011-12-28 05:16:33 【问题描述】:Tesseract 3 能够进行页面布局分析。但是,我找不到任何关于如何将库用于此类目的的示例代码或文档。我希望这里有人可以解释如何对图像执行布局分析以及如何解析结果数据。
【问题讨论】:
【参考方案1】:Tesseract 可以被赋予一个页面模式参数 (-psm
),它可以具有以下值:
0
= 仅限方向和脚本检测 (OSD)。
1
= 使用 OSD 自动分割页面。
2
= 自动页面分割,但没有 OSD 或 OCR
3
= 全自动页面分割,但没有 OSD。 (默认)
4
= 假设有一列大小可变的文本。
5
= 假设一个统一的垂直对齐文本块。
6
= 假设一个统一的文本块。
7
= 将图像视为单个文本行。
8
= 将图像视为一个单词。
9
= 将图像视为圆圈中的单个单词。
10
= 将图像视为单个字符。
例子:
tesseract image.tif image.txt -l eng -psm 0
但是,我不确定是否可以在独立模式下使用布局分析。
【讨论】:
问题是关于“如何使用库”,而不是独立的可执行文件。【参考方案2】:首先,初始化TessBaseAPI
实例。您可以使用Init()
(如果您想执行进一步的文本识别)或InitForAnalysePage()
(如果您只对文本框感兴趣)。
其次,使用SetImage()
设置图片。
最后,致电AnalyseLayout()
获取PageIterator
,它会为您提供文本框。
tesseract::TessBaseAPI tessApi;
tessApi.InitForAnalysePage();
// tessApi.SetImage(...);
tesseract::PageIterator *iter = tessApi.AnalyseLayout();
// Instead of RIL_WORD you can use any other PageSegMode
while (iter->Next(tesseract::RIL_WORD))
int left, top, right, bottom;
iter->BoundingBox(
tesseract::RIL_WORD,
&left, &top, &right, &bottom
);
【讨论】:
【参考方案3】:从 3.04 开始有一个选项:
tesseract -c preserve_interword_spaces=1 test.tif test
Here is a reference 看起来像是相关的开发线程。
【讨论】:
【参考方案4】:不确定这是否能准确回答您的问题,但我来到这里寻找在给定输入图像的情况下获取 bbox 坐标信息(以及可选地在 bbox 内识别的文本)的方法。现在可以使用 tesseract 的解决方案。
$> tesseract test.tiff test.txt -l eng -psm 1 tsv
在上面的 code-sn-p 中需要注意的参数是 'psm' 和 'tsv'。 'psm' 选择页面分割模式,'tsv' 生成一个漂亮的表格输出文件,其中包含您在文本图像上需要的所有信息(页块行号、bbox coods、置信度、预测文本)(如下所示)
level page_num block_num par_num line_num word_num left top width height conf text
1 1 0 0 0 0 0 0 5500 4250 -1
2 1 1 0 0 0 327 285 2218 53 -1
3 1 1 1 0 0 327 285 2218 53 -1
4 1 1 1 1 0 327 285 2218 53 -1
5 1 1 1 1 1 327 285 246 38 87 INFOPAC
5 1 1 1 1 2 620 287 165 38 87 PAGE
5 1 1 1 1 3 952 290 100 37 95 NAME
5 1 1 1 1 4 1173 292 1082 45 39 ENTRYDATE
5 1 1 1 1 5 2333 302 212 36 48 EMAIL
【讨论】:
以上是关于使用 Tesseract 进行页面布局分析?的主要内容,如果未能解决你的问题,请参考以下文章