<style>
/* reduce from default 48px: */
.reveal {
font-size: 24px;
text-align: left;
}
.reveal .slides {
text-align: left;
}
</style>
# Nutzung von Tesseract für die Layout-Analyse und Tabellen-OCR <!-- .element: style="text-align: center;" -->
Robert Sachunsky <!-- .element: style="text-align: center;" -->
Leipzig, 18. Dezember 2020 <!-- .element: style="text-align: center;" -->
---
## Übersicht
- [Geschichte](#/2)
- [Leistungsmerkmale](#/3)
- [Layout-Analyse (allgemein)](#/4)
- [Layout-Analyse (Tabellen)](#/5)
- [Zeilen-Erkennung (Engine)](#/6)
- [Zeilen-Erkennung (Training)](#/7)
- [Referenzen](#/8)
---
## Geschichte
- 1984-2005: HP
- 2005: Open Source
- 2006-2016: Google
- 2017-?: Community
- 2018: Hauptentwickler Ray Smith verläßt Projekt
- aktive Community (eher OCR / weniger OLR)

----
## Geschichte
- aktive Community (nur Maintenance)

- verwendet in vielen Projekten
- _>_ 20 GUIs
- _>_ 10 Apps
- _>_ 6 Webservices
- ...

---
## Leistungsmerkmale allgemein
- Open Source, einschließlich Modellen
- gute regelbasierte OLR (aber ungepflegt)
- gute neuronale OCR (aber nur CPU)
- regelbasierte OCR (noch Spezialaufgaben)
- universelle Schrift/Sprachen-Unterstützung
- Standard-Modelle für _>_ 100 Muttersprachen
- Renderer: TXT, PDF, hOCR, ALTO-XML, ...
- sehr flexible CLI und API
---
## Layout-Analyse (allgemein)
- regelbasiert, hybrid (top-down / bottom-up)
- erprobt, sprach-universell (LTR, vertikale Schrift, Mischung aller auf einer Seite)
- robust, generell (Linien und Abbildungen, schräger / gedrehter / inverser Text, polygonal, DPI-Schätzung)
- _>_ 12 j nicht _inhaltlich_ gewartet … "Macken"
- _kein_ Dewarping, _kein_ Cropping, _schlechte_ interne Binarisierung
(siehe Vortrag OCR-D)
----
## Layout-Analyse (allgemein)

---
## Layout-Analyse (Tabellen)
- Tabellen-Detektion (Segmentierung):
- älterer Algorithmus mit Heuristiken (v. Leptonica)
- sehr ungenau
- Tabellen-Erkennung (Struktur):
- [Faisal Shafait \& Ray Smith (2010): Table Detection in Heterogeneous Documents](https://tesseract-ocr.github.io/docs/Table_detection_in_heterogeneous_documents.pdf)
- aber: per Voreinstellung _nicht_ aktiviert!
```Python
tessapi.SetVariable("textord_tablefind_recognize_tables", "1")
```
```sh
tesseract -c textord_tablefind_recognize_tables=1 ...
```
- aber: Strukturergebnis _nicht_ integriert!
```C++
// TODO(nbeato): MERGE!! There is awesome info now available for merging.
```
(würde außerdem API-Änderung bedingen)
- stattdessen: Übernahme aus normaler Block/Absatz-Segmentierung
----
## Layout-Analyse (Tabellen)
|||
---
## Zeilen-Erkennung (Engine)
- CNN-LSTM-Ansatz – noch immer _state of the art_
- aber: eigene C++ Implementierung (von OCRopus 1 entlehnt)
- ~~OpenMP~~, ~~OpenCL~~, SSE4, AVX(2), FMA
- Bemühungen um Tensorflow-Backend:
- (teilweise?) integriert, aber v.a. _kein_ Training und _keine_ Modelle
- nicht (mehr) auf Agenda
- CTC-Decoder mit Beamsearch:
- _komplex_ (Grammatik/Wörterbücher/Sprachmodelle, parallele Sprachen/Modelle, Unicharset-Kodierung, Zustandsautomat)
- Code fest auf 1. oder 2.-bestes Ergebnis optimiert (Strahl zu schmal)
- bisher _keine_ (saubere) Extraktion von alternativen Hypothesen
(Keyword-search, externe Nachkorrektur)
- [Lattice-Output](https://github.com/tesseract-ocr/tesseract/issues/2339)...
- abhängig von guter Zeilensegmentierung (v.a. Normalisierung u. Dewarping)
- überschreibt Wort/Zeichen-Segmentierung (aber Problem Tabs/langer Leerraum)
----
## Zeilen-Erkennung (Engine)
|||
---
## Zeilen-Erkennung (Training)
- _>_ 100 Standardmodelle: von Google trainiert
- synthetisch: Font-Rendering (viele Fonts, viel Text, Augmentierung)
- Daten _nicht_ öffentlich
- eigenes Training: `tesstrain` (ursprüngl. `ocrd-train`)
- auf echten Scans (Zeilen-GT)
- Finetuning von Standardmodellen oder _from scratch_
- zunehmend frei verfügbar
- CPU-Training (langsam)
- Makefile-gesteuert
---
## Referenzen
- Publikationen: https://tesseract-ocr.github.io/docs/
- Manual/Wiki: https://tesseract-ocr.github.io/tessdoc/
- Code: https://github.com/tesseract-ocr/tesseract
- Training: https://github.com/tesseract-ocr/tesstrain
- Modelle: https://github.com/tesseract-ocr/tessdata_best
- Python-Bindings: https://github.com/sirfz/tesserocr
- OCR-D-Wrapper: https://github.com/OCR-D/ocrd_tesserocr
{"metaMigratedAt":"2023-06-15T17:21:09.295Z","metaMigratedFrom":"YAML","title":"Nutzung von Tesseract für die Layout-Analyse und Tabellen-OCR","breaks":true,"slideOptions":"{\"theme\":\"white\",\"slideNumber\":true}","contributors":"[{\"id\":\"c62f1b15-791a-47e1-8e4c-ab2ed00c04bc\",\"add\":6284,\"del\":1233}]"}