我试图让Tesseract输出一个带有标记边界框的文件,该边界框来自页面分割(预OCR)。我知道它必须能够做到这一点并且开箱即用#39;因为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示例吗?
答案 0 :(得分:23)
成功。非常感谢Pattern Recognition and Image Analysis Research Lab (PRImA)的人们制作工具来处理这个问题。您可以在website或github上自由获取。
下面我为运行10.10并使用homebrew包管理器的Mac提供完整的解决方案。我使用wine来运行Windows可执行文件。
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)
答案 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!