Analiza układu strony za pomocą Tesseract?

Tesseract 3 jest w stanie wykonać analizę układu strony. Jednak nie mogłem znaleźć żadnego przykładowego kodu ani dokumentacji, jak korzystać z biblioteki do takich celów. Mam nadzieję, że ktoś tutaj może wyjaśnić, jak przeprowadzić analizę układu na obrazie i jak parsować dane wynikowe.

Author: zoul, 2011-11-13

4 answers

Tesseract może otrzymać parametr page mode (-psm), który może mieć następujące wartości:

  • 0 = tylko Orientacja i wykrywanie skryptów (OSD).
  • 1 = Automatyczna segmentacja stron za pomocą OSD.
  • 2 = Automatyczna segmentacja stron, ale bez OSD, lub OCR
  • 3 = W Pełni Automatyczna segmentacja stron, ale bez OSD. (Domyślnie)
  • 4 = zakładaj pojedynczą kolumnę tekstu o zmiennych rozmiarach.
  • 5 = zakładać pojedynczy Mundur blok tekstu wyrównanego pionowo.
  • 6 = zakładaj pojedynczy jednolity blok tekstu.
  • 7 = traktuj obraz jako pojedynczą linię tekstu.
  • 8 = traktuj obraz jako pojedyncze słowo.
  • 9 = traktuj obraz jako pojedyncze słowo w okręgu.
  • 10 = traktuj obraz jako pojedynczy znak.

Przykład:

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

Nie jestem jednak pewien, czy możliwe jest wykorzystanie analizy układu w trybie samodzielnym.

 10
Author: poiuytrez,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-11-16 08:59:38

Najpierw zainicjalizuj instancję TessBaseAPI. Możesz użyć Init() (jeśli chcesz wykonać dalsze rozpoznawanie tekstu) lub InitForAnalysePage() (jeśli interesują Cię tylko pola tekstowe).

Po Drugie, Ustaw obraz za pomocą SetImage().

I na koniec zadzwoń AnalyseLayout(), aby uzyskać PageIterator, który zapewnia pola tekstowe.

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
    );
}
 5
Author: Dmitry Zaytsev,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-09-15 12:08:46

Istnieje opcja od 3.04:

tesseract -c preserve_interword_spaces=1 test.tif test

Oto odniesienie do tego, co wygląda jak powiązany wątek programistyczny.

 2
Author: Laurent,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-30 02:22:58

Nie jestem pewien, czy to dokładnie odpowiada na twoje pytanie, ale wylądowałem tutaj, szukając sposobów, aby uzyskać informacje o współrzędnych Bbox(i tekst rozpoznany wewnątrz Bbox opcjonalnie) biorąc pod uwagę obraz wejściowy. Rozwiązanie, które jest teraz możliwe przy użyciu tesseract.

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

Param, które należy zauważyć w powyższym fragmencie kodu, to ' psm ' I 'tsv'. "psm" wybiera tryb segmentacji stron, a " tsv " generuje ładny tabelaryczny plik wyjściowy ze wszystkimi informacjami (numer bloku strony, kody Bbox, pewność siebie, przewidywany tekst), którego potrzebujesz na swoim obrazku tekstowym (pokazanym poniżej)

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
 1
Author: NightFury13,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-20 07:36:02