J'essaie d'obtenir Tesseract pour sortir un fichier avec des boîtes de délimitation étiquetées qui résultent de la segmentation de la page (pré OCR). Je sais qu'il doit être capable de le faire `` hors de la boîte '' en raison des résultats présentés lors des concours ICDAR où les candidats ont dû segmenter et divers documents ( article académique ici ). Voici un exemple de ce document illustrant ce que je veux créer:
J'ai créé la dernière version de tesseract en utilisant brew, brew install tesseract --HEAD
, et ont essayé de modifier les fichiers de configuration situés dans /usr/local/Cellar/tesseract/HEAD/share/tessdata/configs/
pour afficher les zones étiquetées. La sortie reçue en utilisant hocr
comme configuration, c'est-à-dire.
tesseract infile.tiff outfile_stem -l eng -psm 1 hocr
donne une boîte englobante pour tout et a un certain étiquetage dans les balises class
par exemple.
<p class='ocr_par' dir='ltr' id='par_5_82' title="bbox 2194 4490 3842 4589">
<span class='ocr_line' id='line_5_142' ...
mais je ne peux pas visualiser cela. Existe-t-il un outil standard pour visualiser les fichiers hOCR ou la possibilité de créer un fichier de sortie avec des boîtes englobantes intégrées à Tesseract?
Détails de la version actuelle de la tête:
tesseract 3.04.00
leptonica-1.71
libjpeg 8d : libpng 1.6.16 : libtiff 4.0.3 : zlib 1.2.5
Je cherche vraiment à y parvenir en utilisant l'outil de ligne de commande (comme dans les exemples ci-dessus). @nguyenq m'a indiqué le référence API , malheureusement je n'ai aucune expérience c ++. Si la seule solution consiste à utiliser l'API, pouvez-vous s'il vous plaît fournir un exemple rapide python?
Succès. Un grand merci aux gens du Laboratoire de recherche sur la reconnaissance des formes et l'analyse d'images (PRImA) pour la production d'outils pour gérer cela. Vous pouvez les obtenir gratuitement sur leur site Web ou github .
Ci-dessous, je donne la solution complète pour un Mac exécutant 10.10 et utilisant le gestionnaire de paquets homebrew . J'utilise wine pour exécuter les exécutables 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"
Document avec superpositions (survolez pour voir le texte et le type) Superpositions seules (utilisez les boutons de l'interface graphique pour basculer)
Vous pouvez exécuter tesseract vous-même et utiliser un autre outil pour convertir sa sortie au format PAGE. Je n'ai pas réussi à faire fonctionner cela, mais je suis sûr que tout ira bien!
# 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"
À ce stade, vous devez utiliser le PAGE Converter Java Tool pour convertir le xml HOCR en un xml PAGE. Il devrait aller quelque chose comme ceci:
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
Malheureusement, j'ai continué à recevoir des pointeurs nuls.
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)
Vous pouvez utiliser son API pour obtenir les boîtes englobantes à différents niveaux (caractère/mot/ligne/para) - voir Exemple d'API . Vous devez dessiner les étiquettes vous-même.
Raccourci
Il est également possible d'ouvrir des fichiers HOCR directement avec l'outil PageViewer. L'extension du fichier doit cependant être .xml.
Avec Tesseract 4.0.0, une commande comme tesseract source/dir/myimage.tiff target/directory/basefilename hocr
créera un basefilename.hocr
fichier avec des zones de délimitation de niveau bloc, paragraphe, ligne et Word pour le texte OCR. Même la commande sans la configuration hocr
crée un fichier texte avec des sauts de ligne entre le texte au niveau du bloc, mais le format hocr est plus explicite.
Plus d'options de configuration ici: https://github.com/tesseract-ocr/tesseract/tree/master/tessdata/configs
La façon la plus simple d'avoir un fichier HOCR avec le niveau de caractère individuel est d'utiliser la fourchette de nickjwhite de Tesseract 3.05: https://github.com/nickjwhite/tesseract/tree/hocrcharboxes
Compilez et téléchargez les fichiers tessdata en suivant le wiki de Tesseract. Une fois la vérification de l'installation effectuée, utilisez:
tesseract {image file} -c tessedit_create_hocr=1 -c hocr_char_boxes=1 {output name}
et tadam!