Анализ макета страницы с использованием Tesseract? - PullRequest
12 голосов
/ 14 ноября 2011

Tesseract 3 может выполнять анализ макета страницы. Однако я не смог найти пример кода или документацию о том, как использовать библиотеку для таких целей. Я надеюсь, что кто-то здесь может объяснить, как выполнить анализ макета изображения и как проанализировать полученные данные.

Ответы [ 4 ]

8 голосов
/ 16 ноября 2011

Тессеракту может быть задан параметр режима страницы (-psm), который может принимать следующие значения:

  • 0 = Только ориентация и определение сценария (OSD).
  • 1 = Автоматическая сегментация страницы с помощью экранного меню.
  • 2 = Автоматическая сегментация страницы, но без OSD или OCR
  • 3 = Полностью автоматическая сегментация страницы, но без OSD. (По умолчанию)
  • 4 = Предполагается, что один столбец текста переменного размера.
  • 5 = Предполагается, что один равномерный блок текста выровнен по вертикали.
  • 6 = Предположить, что один единообразный блок текста.
  • 7 = Обрабатывать изображение как одну текстовую строку.
  • 8 = Обрабатывать изображение как одно слово.
  • 9 = Обрабатывать изображение как одно слово в кругу.
  • 10 = Обрабатывать изображение как один символ.

Пример:

tesseract image.tif image.txt -l eng -psm 0

Однако я не уверен, что можно использовать анализ макета в автономном режиме.

5 голосов
/ 15 сентября 2015

Сначала инициализируйте TessBaseAPI экземпляр. Вы можете использовать Init() (если хотите выполнить дальнейшее распознавание текста) или InitForAnalysePage() (если вас интересуют только текстовые поля).

Во-вторых, установите изображение с помощью SetImage().

И, наконец, позвоните AnalyseLayout(), чтобы получить PageIterator, который предоставляет вам текстовые поля.

tesseract::TessBaseAPI tessApi;
tessApi.InitForAnalysePage();

// tessApi.SetImage(...);

tesseract::PageIterator *iter = tessApi.AnalyseLayout();

// Instead of RIL_WORD you can use any other PageSegMode
while (iter->Next(tesseract::RIL_WORD)) {
    int left, top, right, bottom;

    iter->BoundingBox(
            tesseract::RIL_WORD,
            &left, &top, &right, &bottom
    );
}
1 голос
/ 30 мая 2018

С 3.04 существует опция:

tesseract -c preserve_interword_spaces=1 test.tif test

Вот ссылка на то, что похоже на связанный поток разработки.

1 голос
/ 20 марта 2018

Не уверен, что это точно отвечает на ваш вопрос, но я приземлился здесь в поисках способов получить информацию о bbox-координатах (и текст, опционально распознанный внутри bbox), учитывая входное изображение.Решение, которое теперь возможно с использованием tesseract.

$> tesseract test.tiff test.txt -l eng -psm 1 tsv

В приведенном выше фрагменте кода следует отметить следующие параметры: «psm» и «tsv».«psm» выбирает режим сегментации страницы, а «tsv» генерирует хороший табличный выходной файл со всей информацией (номер строки блока страницы, bbox coods, достоверность, прогнозируемый текст), необходимой для вашего текстового изображения (показано ниже)

level   page_num    block_num   par_num line_num    word_num    left    top width   height  conf    text
1   1   0   0   0   0   0   0   5500    4250    -1
2   1   1   0   0   0   327 285 2218    53  -1
3   1   1   1   0   0   327 285 2218    53  -1
4   1   1   1   1   0   327 285 2218    53  -1
5   1   1   1   1   1   327 285 246 38  87  INFOPAC
5   1   1   1   1   2   620 287 165 38  87  PAGE
5   1   1   1   1   3   952 290 100 37  95  NAME
5   1   1   1   1   4   1173    292 1082    45  39  ENTRYDATE
5   1   1   1   1   5   2333    302 212 36  48  EMAIL
...