OCR-Workflow

Aus archium
Wechseln zu:Navigation, Suche

Wie kann OCR gelingen (auch bei Fraktur) ?

Vorbemerkung
OCR (Optical Character Recognition) ist immer dirty ocr, d.h. ohne menschliche Korrektur immer fehlerhaft! So werden z.B. die Buchstabenkombinationen rn oft zum m und umgekehrt. Ebenso verhält es sich mit O und 0, mit 1, l und I, s und 5 uvm. Unter Optimierung ist also lediglich die Verminderung der Fehler zu verstehen, leider nicht die Vermeidung. Und leider zeigt die Erfahrung, daß es den Königsweg mit idealen Softwareeinstellungen kaum gibt. Vor jedem mit OCR zu erfassenden Text empfiehlt es sich, versuche mit verschiedenen Einstellungen vorzunehmen. An folgenden "Stellschrauben" können wir justieren:
  • Scan-Auflösung
  • Farbtiefe (Farbe, Graustufen, Indizierte Farben/Graustufen oder Halbton?)
  • Schriftvorgabe der Interpretationssoftware
  • Ausrichtung der Vorlage (Falls Moiré-Effekte die Qualität beeinflussen).
  • Nachfolgende Softwareempfehlungen sind subjektiv unsere Wahl. Sie haben sich im Einsatz bei archium bewährt. Die Existenz noch leistungsfähigerer Tools ist keineswegs auszuschließen!
  • Alle nachfolgenden Schritte werden auf der Kommadozeile und in unserem Fall unter Linux durchgeführt. Es existieren von allen Werkzeugen auch Windows-Portierungen und z.T. auch Klickibunti-GUIs für Maus-Freunde.
  • Alle Angaben erfolgen exemplarisch!

Software

OCR/Texterkennung
Tesseract stammt ursprünglich von Hewlett & Packard, wurde später unter einer OpenSource-Lizenz freigegeben und nun von Google deutlich optimiert. Projekte wie Google-Books werden damit realisiert.
Metadatenbearbeitung im Bild
Exiftool liest und schreibt jedes Dateiformat ohne die Bilddaten zu verändern, auch bei JPEG.
Bildbearbeitung
Es gibt kaum einen Bildbearbeitungsschritt, der nicht mit ImageMagick durchgeführt werden könnte.
PDF-Text-Ebene erstellen
Mit OCRmyPDF spart sehr viel Zeit. Es vereint viele Arbeitsschritte und arbeitet sehr zuverlässig.

Einzelschritte im Batch-Job

Metadaten anpassen

  • Am Beispiel einer Serie von tiff-Dateien
$ find -iname "*.tif" -exec exiftool -EXIF:all= -MakerNotes:all= -IFD0:Make= -Software= -ImageDescription= -UserComment= -IFD0:Model= -GPSVersionID= -IFD0:Copyright="Kunde Gmbh & Co. KG" -IFD0:Artist="Repro: archium UG, Essingen/Aalen, http://www.archium.org" -XResolution=390 -YResolution=390 {} \;

Umwandlungen

  • Es ist das Ziel, den Bildscan eines Textes am Ende in vielen verschiedenen Formaten vorliegen zu haben, darunter auch ein möglichst kompaktes PDF-Dokument, welches mit einem zusätzlichen Text-Layer versehen wird.
  • Immer ist das Farbmanagement und das Rendering-Ziel (perceptuativ = wahrnehmungsgetreu) zu beachten!
Mache aus .tif .gif
$ find -iname "*.tif" -exec convert {} -profile /usr/share/color/icc/OpenICC/sRGB.icc -intent perceptual {}.gif \;
Mache aus .tif .jpg
$ find -iname "*.tif" -exec convert {} -profile /usr/share/color/icc/OpenICC/sRGB.icc -intent perceptual -quality 100 {}.jpg \;
Mache aus .tif .png
$ find -iname "MEINEDATEI.tif" -exec convert {} -profile /usr/share/color/icc/OpenICC/sRGB.icc -intent perceptual {}.png \;
Mache aus .png .gif
$ find -iname "MEINEDATEI.png" -exec convert {} -profile /usr/share/color/icc/OpenICC/sRGB.icc -intent perceptual {}.gif \;
Mache aus .gif .pdf
  • densitiy beachten und an Scan-Auflösung anpassen!!!
$ find -iname "*.gif" -exec convert -density 390x390 {} {}.pdf \;
Mache aus .png .pdf
$ find -iname "MEINEDATEI.png " -exec convert -density 390x390 {} {}.pdf \;

Endungen umbenennen/zusammenkürzen

$ mmv "*.tif.jpg" "#1.jpg"
$ mmv "*.tif.gif" "#1.gif"
$ mmv "*.tif.gif.pdf" "#1.pdf"
$ # oder ggf. auch    mmv "*.gif.pdf" "#1.pdf"

OCR durchführen und Text-Layer erzeugen

  • Auch hier immer auf die density Achten!
deutsch, lateinische Lettern
$ OCRmyPDF -o 390 -vv -l deu MEINEDATEIOhneOCR.pdf MEINEDATEIMitOCR.pdf
deutsch, Fraktur
$ OCRmyPDF -o 390 -vv -l deu-frak MEINEDATEIOhneOCR.pdf MEINEDATEIMitOCR.pdf
deutsch, lateinische Lettern + Fraktur gemischt
$ OCRmyPDF -o 390 -vv -l deu+deu-frak MEINEDATEIOhneOCR.pdf MEINEDATEIMitOCR.pdf

Das ganze geht mit Hilfe von find unter Linux sehr bequem auch mit mehreren Dateien:

$ mkdir ../pdf_ocr
$ find -iname "*.pdf" -exec OCRmyPDF -o 390 -vv -l deu+deu-frak {} ../pdf_ocr/{} \;