gpt4 book ai didi

ocr - 如何使用 Tesseract 分割文档然后输出生成的边界框和标签

转载 作者:行者123 更新时间:2023-12-03 08:57:28 26 4
gpt4 key购买 nike

我试图让 Tesseract 输出一个带有标记边界框的文件,这些边界框是由页面分割(OCR 前)产生的。我知道它必须能够“开箱即用”,因为在 ICDAR 比赛中显示的结果,参赛者必须分割和各种文件 (academic paper here)。这是该论文中的一个示例,说明了我想要创建的内容:
Image of segmented and labelled output

我已经使用 brew 构建了最新版本的 tesseract,brew install tesseract --HEAD ,并且一直在尝试编辑位于 /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 示例吗?

最佳答案

成功。非常感谢 Pattern Recognition and Image Analysis Research Lab (PRImA) 的人们用于生产处理此问题的工具。您可以在他们的 website 上免费获得它们。或 github .

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

概述

  • 下载工具:Tesseract OCR to Page (TPT) 和 Page Viewer (PVT)
  • 使用 TPT 在您的文档上运行 tesseract 并将 HOCR xml 转换为 PAGE xml
  • 使用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"

    结果

    带有叠加层的文档(鼠标悬停以查看文本和类型)
    Doc with overlays
    单独叠加(使用 GUI 按钮切换)
    Overlays alone

    附录

    您可以自己运行 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)

    关于ocr - 如何使用 Tesseract 分割文档然后输出生成的边界框和标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28591117/

    26 4 0