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

时间:2015-02-18 18:27:19

标签: ocr tesseract hocr

我试图让Tesseract输出一个带有标记边界框的文件,该边界框来自页面分割(预OCR)。我知道它必须能够做到这一点并且开箱即用#39;因为ICDAR比赛中的结果显示参赛者必须分段和各种文件(academic paper here)。以下是该论文中的一个示例,说明了我想要创建的内容: Image of segmented and labelled output

我使用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示例吗?

6 个答案:

答案 0 :(得分:23)

成功。非常感谢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信息的原始图像
  4. 代码

    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)
    

答案 1 :(得分:3)

您可以使用其API获取各个级别的边界框(字符/单词/行/段) - 请参阅API Example。你必须亲自绘制标签。

答案 2 :(得分:3)

如果您熟悉python,则可以直接使用 Nova.request().get('API',{responseType: 'blob'}) .then(response => { console.log("sa", response) const url = window.URL.createObjectURL(new Blob([response.data])) const link = document.createElement('a') link.href = url link.setAttribute('download', file_name) document.body.appendChild(link) link.click()库,该库是围绕C ++ API的漂亮python包装器。这是一个使用PIL在块级别绘制多边形的代码段:

tesserocr

答案 3 :(得分:2)

<强>快捷方式

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

答案 4 :(得分:1)

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

此处有更多配置选项:https://github.com/tesseract-ocr/tesseract/tree/master/tessdata/configs

答案 5 :(得分:0)

使用具有单个角色级别的HOCR文件的最简单方法是使用tesseract 3.05的nickjwhite分叉:https://github.com/nickjwhite/tesseract/tree/hocrcharboxes

按照Tesseract的wiki编译和下载tessdata文件。 安装检查后,使用:

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

和tadam!

相关问题