<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) ![](https://i.imgur.com/P9g8uLz.png) ---- ## Geschichte - aktive Community (nur Maintenance) ![](https://i.imgur.com/BmkCMpE.png) - verwendet in vielen Projekten - _>_ 20 GUIs - _>_ 10 Apps - _>_ 6 Webservices - ... ![](https://i.imgur.com/Cvy4ThR.png) --- ## 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) ![](https://i.imgur.com/yUvTLyp.png) --- ## 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) |![](https://user-images.githubusercontent.com/13793075/42154223-780c3058-7de5-11e8-96e2-f8331cedb05d.png =300x)|![](https://user-images.githubusercontent.com/13793075/42154234-80759e14-7de5-11e8-92ea-34027a0d9c4d.png =300x)| --- ## 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) |![](https://i.imgur.com/1SP7tQM.jpg =300x)|![](https://i.imgur.com/1uqvog8.png =600x)| --- ## 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}]"}
    1117 views