Ich habe einige Fragen zu Tesseract
Kontext
Ich arbeite derzeit an einem alten kryptografischen Algorithmus aus der DDR, der in den 80er Jahren entwickelt wurde. Ich habe den Algorithmus in C# implementiert. Jetzt habe ich etwa 30 Seiten mit Testfällen, die ich überprüfen möchte. Da ich nicht jede Binär-/Hexadezimalzeichenfolge manuell eingeben möchte, würde ich sie gerne mit Tesseract (oder einer anderen geeigneten kostenlosen Software) OCR-lesen.
Problem
Ich habe Probleme, zufriedenstellende Ergebnisse zu erzielen. Im Folgenden wird dies ausführlicher erläutert.
Aktueller Status
(Entschuldigung, ich kann keine Bilder direkt posten) Das Dokument sieht folgendermaßen aus: Teil einer Seite/Briefe im Detail
Naiver Ansatz
Mit den Standardeinstellungen (ich verwende Deutsch, sollte für die relevanten Teile keine Rolle spielen) erhalte ich miserable Ergebnisse.
tesseract -l deu input.tiff output pdf
Das Ergebnis sieht aus wieDas
Vor allem die Nullen machen Probleme. Wörter, Buchstaben und Einsen werden etwas besser erkannt.
Was ich versucht habe (Vorverarbeitung)
- Seite drehen
- Kontrast erhöhen
- Das Bild binärisieren
- Erodieren/Erweitern Sie das Bild, um kleine Lücken zwischen den Buchstaben zu füllen
Das Endergebnis sieht aus wieDas. Soweit ich über OCR weiß, sollte das die Dinge ein wenig verbessern.
Was ich versucht habe (Tesseract-Einstellungen)
Meine Konfigurationsdatei sieht wie folgt aus:
load_system_dawg F
load_freq_dawg F
language_model_penalty_non_dict_word 0
language_model_penalty_non_freq_dict_word 0
tessedit_create_pdf T
tessedit_char_whitelist 0123456789ABCDEF
Im Grunde sage ich Tesseract, dass es nicht versuchen soll, aus den Buchstaben nützliche Wörter zu bilden und nur die für Hex-Strings notwendigen Zeichen zuzulassen.
Wie du sehen kannstHierdas führt zu etwas besseren Ergebnissen, aber nicht in allen Fällen. Einige Nullen in der letzten Zeile werden deutlich besser erkannt. Zwischen dem F passiert nichts Sinnvolles.
Beim Spielen mit den Einstellungen Neural Network vs Classical OCR (--oem 0/1) gibt es einen kleinen Unterschied. Der klassische Algorithmus erkennt viele 0 als 9 (nie als 0), aber viel konsistenter (aber nicht gut)
Frage
Was könnte ich noch tun, um die Ergebnisse zu verbessern? Ich weiß, dass ich das neuronale Netz zusätzlich trainieren könnte, aber nach dem, was ich gelesen habe, ist dafür ein gewisser Aufwand erforderlich, den ich gerne vermeiden würde (Tesseract selbst erstellen, das ML-Zeug zum Laufen bringen, beschriftete Testdaten erstellen usw.).
Irgendetwas anderes?
Vielen Dank für Ihre Hilfe.