【问题标题】:How do I segment a document using Tesseract then output the resulting bounding boxes and labels如何使用 Tesseract 分割文档然后输出生成的边界框和标签
【发布时间】:2015-04-19 21:31:45
【问题描述】:

我正在尝试让 Tesseract 输出一个带有标签边界框的文件,该边界框是由页面分割(预 OCR)产生的。我知道它必须能够“开箱即用”地做到这一点,因为在 ICDAR 比赛中展示了参赛者必须分割的结果和各种文件 (academic paper here)。这是该论文中的一个示例,说明了我想要创建的内容:

我已经使用 brew,brew install tesseract --HEAD 构建了最新版本的 tesseract,并且一直在尝试编辑位于 /usr/local/Cellar/tesseract/HEAD/share/tessdata/configs/ 中的配置文件以输出带标签的框。使用hocr 作为配置接收到的输出,即

tesseract infile.tiff outfile_stem -l eng -psm 1 hocr

为所有内容提供一个边界框,并在class 标签中添加一些标签,例如

<p class='ocr_par' dir='ltr' id='par_5_82' title="bbox 2194 4490 3842 4589">
    <span class='ocr_line' id='line_5_142' ...

但我无法想象这一点。是否有可视化 hOCR 文件的标准工具,或者是否可以使用 Tesseract 中内置的边界框创建输出文件?

当前头部版本详情:

tesseract 3.04.00
 leptonica-1.71
  libjpeg 8d : libpng 1.6.16 : libtiff 4.0.3 : zlib 1.2.5

编辑

我真的很想使用命令行工具来实现这一点(如上例所示)。 @nguyenq 已将我指向 API reference,不幸的是我没有 C++ 经验。如果唯一的解决方案是使用API​​,请您提供一个快速的python示例吗?

【问题讨论】:

    标签: ocr tesseract hocr


    【解决方案1】:

    成功。非常感谢Pattern Recognition and Image Analysis Research Lab (PRImA) 的人们提供了解决此问题的工具。您可以在他们的websitegithub 上免费获取它们。

    下面我给出了运行 10.10 并使用 homebrew 包管理器的 Mac 的完整解决方案。我使用wine 来运行windows 可执行文件。

    概述

    1. 下载工具:Tesseract OCR to Page (TPT) 和 Page Viewer (PVT)
    2. 使用 TPT 在您的文档上运行 tesseract 并将 HOCR xml 转换为 PAGE xml
    3. 使用 PVT 查看叠加了 PAGE xml 信息的原始图像

    代码

    brew install wine  # takes a little while >10m
    brew install gs    # only for generating a tif example. Not required, you can use Preview
    brew install wget  # only for downloading example paper. Not required, you can do so manually!
    cd ~/Downloads
    wget -O paper.pdf "http://www.prima.cse.salford.ac.uk/www/assets/papers/ICDAR2013_Antonacopoulos_HNLA2013.pdf"
    # This command can be ommitted and you can do the conversion to tiff with Preview
    gs                          \
      -o paper-%d.tif           \
      -sDEVICE=tiff24nc         \
      -r300x300                 \
       paper.pdf 
    
    cd ~/Downloads
    # ttptool is the location you downloaded the Tesseract to PAGE tool to
    ttptool="/Users/Me/Project/tools/TesseractToPAGE 1.3"
    # sudo chmod 777 "$ttptool/bin/PRImA_Tesseract-1-3-78.exe"
    touch "$ttptool/log.txt"
    wine "$ttptool/bin/PRImA_Tesseract-1-3-78.exe"   \
      -inp-img "$dl/Downloads/paper-3.tif"           \
      -out-xml "$dl/Downloads/paper-3-tool.xml"      \
      -rec-mode layout>>log.txt
    
    # pvtool is the location you downloaded the PAGE Viewer tool to
    pvtool="/Users/Me/Project/tools/PAGEViewerMacOS_1.1/JPageViewer 1.1 (Mac OS, 64 bit)"
    cd "$pvtool"
    dl=~
    java -XstartOnFirstThread -jar JPageViewer.jar "$dl/Downloads/paper-3-tool.xml" "$dl/Downloads/paper-3.tif"
    

    结果

    带有叠加层的文档(滚动查看文本和类型) 单独叠加(使用 GUI 按钮切换)

    附录

    您可以自己运行 tesseract 并使用其他工具将其输出转换为 PAGE 格式。我无法让它工作,但我相信你会没事的!

    # Note that the pvtool does take as input HOCR xml but it ignores the region type
    brew install tesseract --devel  # installs v 3.03 at time of writing
    tesseract ~/Downloads/paper-3.tif ~/Downloads/paper-3 hocr
    mv paper-3.hocr paper-3.xml  # The page viewer will only open XML files
    java -XstartOnFirstThread -jar JPageViewer.jar "$dl/Downloads/paper-3.xml"
    

    此时您需要使用PAGE Converter Java Tool 将HOCR xml 转换为PAGE xml。它应该是这样的:

    pctool="/Users/Me/Project/tools/JPageConverter 1.0"
    java -jar "$pctool/PageConverter.jar" -source-xml paper-3.xml -target-xml paper-3-hocrconvert.xml -convert-to LATEST
    

    不幸的是,我不断收到空指针。

    Could not convert to target XML schema format.
    java.lang.NullPointerException
        at org.primaresearch.dla.page.converter.PageConverter.run(PageConverter.java:126)
        at org.primaresearch.dla.page.converter.PageConverter.main(PageConverter.java:65)
    Could not save target PAGE XML file: paper-3-hocrconvert.xml
    java.lang.NullPointerException
        at org.primaresearch.dla.page.io.xml.XmlInputOutput.writePage(XmlInputOutput.java:144)
        at org.primaresearch.dla.page.converter.PageConverter.run(PageConverter.java:135)
        at org.primaresearch.dla.page.converter.PageConverter.main(PageConverter.java:65)
    

    【讨论】:

      【解决方案2】:

      您可以使用它的 API 来获取不同级别(字符/单词/行/段落)的边界框 - 请参阅 API Example。您必须自己绘制标签。

      【讨论】:

      • 感谢您的快速回答。有没有办法使用命令行工具来做到这一点?
      • 命令行生成的 hocr 为您提供单词级别的分辨率。除此之外,您将不得不违反 API。
      【解决方案3】:

      如果你熟悉python,你可以直接使用tesserocr 库,它是一个很好的围绕C++ API 的python 包装器。这是使用 PIL 在块级别绘制多边形的代码 sn-p:

      from PIL import Image, ImageDraw
      from tesserocr import PyTessBaseAPI, RIL, iterate_level, PSM
      
      img = Image.open(filename)
      
      results = []
      with PyTessBaseAPI() as api:
          api.SetImage(img)
          api.SetPageSegMode(PSM.AUTO_ONLY)
          iterator = api.AnalyseLayout()
          for w in iterate_level(iterator, RIL.BLOCK):
              if w is not None:
                  results.append((w.BlockType(), w.BlockPolygon()))
      print('Found {} block elements.'.format(len(results)))
      
      draw = ImageDraw.Draw(img)
      for block_type, poly in results:
          # you can define a color per block type (see tesserocr.PT for block types list)
          draw.line(poly + [poly[0]], fill=(0, 255, 0), width=2)
      

      【讨论】:

        【解决方案4】:

        在 Tesseract 4.0.0 中,tesseract source/dir/myimage.tiff target/directory/basefilename hocr 之类的命令将创建一个 basefilename.hocr 文件,其中包含用于 OCR 文本的块级、段落级、行级和单词级边界框。即使没有hocr 配置的命令也会在块级文本之间创建一个带有换行符的文本文件,但 hocr 格式更明确。

        更多配置选项在这里:https://github.com/tesseract-ocr/tesseract/tree/master/tessdata/configs

        【讨论】:

          【解决方案5】:

          快捷方式

          也可以直接使用 PageViewer 工具打开 HOCR 文件。但是,文件扩展名必须是 .xml。

          【讨论】:

          • 它被隐藏了,但我在答案的“附录”中提到了这一点。直接从 tesseract 打开 HOCR 会显示一个只有“段落”区域的文件,即忽略区域类型。这是预期的吗?
          • 我无法让它发挥作用。无论我打开out.hocr 还是out.xml,我都会从PageViewer 收到这条消息:An XML loading error occured. Please ensure XML validity and try again.(我通过重命名out.xml 生成了out.xml——我应该做些不同的事情吗?)
          【解决方案6】:

          从 4.1 开始,Tesseract 中现在可以使用 HOCR 单个字符步骤。 一旦安装检查,使用:

          tesseract {image file} {output name} -c tessedit_create_hocr=1 -c hocr_char_boxes=1

          【讨论】:

            猜你喜欢
            • 2012-07-07
            • 1970-01-01
            • 1970-01-01
            • 2019-04-20
            • 2019-01-23
            • 1970-01-01
            • 1970-01-01
            • 2021-02-09
            • 2019-05-14
            相关资源
            最近更新 更多