Как сегментировать документ с помощью Tesseract, а затем вывести получившиеся ограничивающие рамки и метки
Я пытаюсь заставить Tesseract вывести файл с помеченными ограничивающими рамками, которые являются результатом сегментации страницы (до распознавания текста). Я знаю, что он должен быть в состоянии сделать это "из коробки" из-за результатов, показанных на соревнованиях ICDAR, где участники должны были сегментировать и различные документы ( академическая статья здесь). Вот пример из этой статьи, иллюстрирующий то, что я хочу создать:
Я собрал последнюю версию тессеракта с использованием brew, 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, к сожалению, у меня нет опыта работы с C++. Если единственным решением является использование API, не могли бы вы привести пример с Python?
5 ответов
Успех. Большое спасибо сотрудникам Лаборатории по распознаванию образов и анализу изображений (PRImA) за создание инструментов для этого. Вы можете получить их бесплатно на их сайте или GitHub.
Ниже я приведу полное решение для Mac, работающего на 10.10 и использующего менеджер пакетов homebrew. Я использую вино для запуска исполняемых файлов 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"
Результаты
Документ с оверлеями (ролловер для просмотра текста и текста) Только оверлеи (используйте кнопки 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"
На этом этапе вам нужно использовать Java-инструмент PAGE Converter для преобразования XML-кода HOCR в XML-файл PAGE. Это должно пойти немного примерно так:
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)
Вы можете использовать его API для получения ограничивающих рамок на разных уровнях (символ / слово / строка / пара) - см. Пример API. Вы должны нарисовать этикетки сами.
Если вы знакомы с Python, вы можете напрямую использовать tesserocr
библиотека, которая представляет собой хорошую оболочку Python для C++ API. Вот фрагмент кода для рисования многоугольников на уровне блока с использованием PIL:
from PIL import Image, ImageDraw
from tesserocr import PyTessBaseAPI, RIL, iterate_level, PSM
img = Image.open(filename)
results = []
with PyTessBaseAPI() as api:
api.SetImage(img)
api.SetPageSegMode(PSM.AUTO_ONLY)
iterator = api.AnalyseLayout()
for w in iterate_level(iterator, RIL.BLOCK):
if w is not None:
results.append((w.BlockType(), w.BlockPolygon()))
print('Found {} block elements.'.format(len(results)))
draw = ImageDraw.Draw(img)
for block_type, poly in results:
# you can define a color per block type (see tesserocr.PT for block types list)
draw.line(poly + [poly[0]], fill=(0, 255, 0), width=2)
С Tesseract 4.0.0 такая команда tesseract source/dir/myimage.tiff target/directory/basefilename hocr
создаст basefilename.hocr
файл с ограничивающими прямоугольниками на уровне блоков, абзацев, строк и слов для текста OCR. Даже команда без hocr
config создает текстовый файл с символами новой строки между текстом уровня блока, но формат hocr является более явным.
Дополнительные параметры конфигурации здесь: https://github.com/tesseract-ocr/tesseract/tree/master/tessdata/configs
кратчайший путь
Также можно открыть файлы HOCR напрямую с помощью инструмента PageViewer. Однако расширение файла должно быть.xml.
Самый простой способ получить HOCR-файл с индивидуальным уровнем персонажа - использовать вилку Tesseract 3.05 для nickjwhite: https://github.com/nickjwhite/tesseract/tree/hocrcharboxes
Скомпилируйте и загрузите файлы tessdata, следуя вики из Tesseract. После проверки установки используйте:
tesseract {image file} -c tessedit_create_hocr=1 -c hocr_char_boxes=1 {output name}
и тадам!