I'm trying to get Tesseract to output a file with labelled bounding boxes that result from page segmentation (pre OCR). I know it must be capable of doing this 'out of the box' because of the results shown at the ICDAR competitions where contestants had to segment and various documents (academic paper here). Here's an example from that paper illustrating what I want to create:
I have built the latest version of tesseract using brew, brew install tesseract --HEAD
, and have been trying to edit config files located in /usr/local/Cellar/tesseract/HEAD/share/tessdata/configs/
to output labelled boxes. The output received using hocr
as the config, i.e.
tesseract infile.tiff outfile_stem -l eng -psm 1 hocr
gives a bounding box for everything and has some labelling in class
tags e.g.
<p class='ocr_par' dir='ltr' id='par_5_82' title="bbox 2194 4490 3842 4589"> <span class='ocr_line' id='line_5_142' ...
but I can't visualise this. Is there a standard tool to visualize hOCR files, or is the facility to create an output file with bounding boxes built into Tesseract?
The current head version details:
tesseract 3.04.00 leptonica-1.71 libjpeg 8d : libpng 1.6.16 : libtiff 4.0.3 : zlib 1.2.5
I'm really looking to achieve this using the command line tool (as in examples above). @nguyenq has pointed me to the API reference, unfortunately I have no c++ experience. If the only solution is to use the API, please can you provide a quick python example?
to tesseract-ocr. Hi, Page segmentation mode defines how your text should be treated by Tesseract. For example, if your image contains a single character or a block of text, you want to specify the corresponding psm so that you can improve accuracy.
Create a Python tesseract script Create a project folder and add a new main.py file inside that folder. Once the application gives access to PDF files, its content will be extracted in the form of images. These images will then be processed to extract the text.
The --oem argument, or OCR Engine Mode, controls the type of algorithm used by Tesseract. The --psm controls the automatic Page Segmentation Mode used by Tesseract.
A bounding box is an imaginary rectangle that are used to outline the object in a box as per as machine learning project requirement. They are the main outcomes of object detection model. The imaginary rectangle frame that surrounds an object in an image.
Success. Many thanks to the people at the Pattern Recognition and Image Analysis Research Lab (PRImA) for producing tools to handle this. You can obtain them freely on their website or github.
Below I give the full solution for a Mac running 10.10 and using the homebrew package manager. I use wine to run windows executables.
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"
Document with overlays (rollover to see text and type) Overlays alone (use GUI buttons to toggle)
You can run tesseract yourself and use another tool to convert its output to PAGE format. I was unable to get this to work but I'm sure you'll be fine!
# 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"
At this point you need to use the PAGE Converter Java Tool to convert the HOCR xml into a PAGE xml. It should go a little something like this:
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
Unfortunately, I kept getting null pointers.
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)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With