使用Tesseract进行页面布局分析

Page layout analysis using Tesseract?

本文关键字:布局 Tesseract 使用      更新时间:2023-10-16

Tesseract 3能够执行页面布局分析。但是,我找不到任何示例代码或文档来说明如何将库用于此类目的。我希望这里有人可以解释如何对图像进行布局分析以及如何解析结果数据。

Tesseract可以被赋予一个页面模式参数(-psm),该参数可以有以下值:

  • 0 =方向和脚本检测(OSD)。
  • 1 = auto page segmentation with OSD.
  • 2 =自动页面分割,但没有OSD,或OCR
  • 3 =全自动页面分割,但没有OSD。(默认)
  • 4 =假设单列文本大小可变。
  • 5 =假设一个统一的垂直对齐文本块
  • 6 =假设一个统一的文本块
  • 7 =将图像视为单个文本行。
  • 8 =将图像视为单个单词。
  • 9 =将图像视为圆圈中的单个单词。
  • 10 =将图像视为单个字符。

的例子:

tesseract image.tif image.txt -l eng -psm 0

但是,我不确定是否可以在独立模式下使用布局分析

首先,初始化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.04开始有一个选项:

tesseract -c preserve_interword_spaces=1 test.tif test

不确定这是否完全回答了您的问题,但我在这里找到了获得输入图像的bbox坐标信息(以及bbox内可选识别的文本)的方法。现在可以使用tesseract来解决这个问题。

$> tesseract test.tiff test.txt -l eng -psm 1 tsv

上面代码片段中需要注意的参数是'psm'和'tsv'。'psm'选择页面分割模式,'tsv'生成一个漂亮的表格输出文件,其中包含您的文本图像(如下所示)所需的所有信息(页块行号,bbox商品,置信度,预测文本)

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