使用Tesseract进行页面布局分析?

时间:2011-11-13 21:01:01

标签: c++ image-processing ocr tesseract

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

4 个答案:

答案 0 :(得分:7)

可以为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

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

答案 1 :(得分:5)

首先,初始化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
    );
}

答案 2 :(得分:1)

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

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

上面代码片段中注意到的参数是'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

答案 3 :(得分:0)

自3.04以来有一个选项:

tesseract -c preserve_interword_spaces=1 test.tif test

Here is a reference看起来像相关的开发线程。