ubuntuusers.de

Du betrachtest eine alte Revision dieser Wikiseite.

pdfocr

Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:


Du möchtest den Artikel für eine weitere Ubuntu-Version testen? Mitarbeit im Wiki ist immer willkommen! Dazu sind die Hinweise zum Testen von Artikeln zu beachten.

Wiki/Icons/terminal.png pdfocr 🇬🇧 ist ein Programm, das es ermöglicht, aus gescannten PDF-Vorlagen durchsuchbare Dokumente zu machen. Das in Ruby verfasste Skript greift dabei zur Texterkennung standardmäßig auf das OCR-Programm tesseract-ocr, optional Cuneiform-Linux, oder auch OCRopus 🇬🇧, zurück und verwendet zur Zusammenführung des Originals mit der Texterkennung hocr2pdf aus ExactImage. Außerdem kommen pdftk und pdfimages zum Einsatz.

Das Programm ist ein reines Kommandozeilenwerkzeug ohne grafische Oberfläche. Siehe auch Alternativen.

Voraussetzungen

Für pdfocr wird eine Installation[1] von

  • ruby

Befehl zum Installieren der Pakete:

sudo apt-get install ruby 

Oder mit apturl installieren, Link: apt://ruby

benötigt.

Installation

Das Programm selbst ist bisher nicht in den Ubuntu-Paketquellen vorhanden. Die einfachste Installationsart besteht über das Projekt-PPA.

Adresszeile zum Hinzufügen des PPAs:

  • ppa:gezakovacs/pdfocr

Hinweis!

Zusätzliche Fremdquellen können das System gefährden.


Ein PPA unterstützt nicht zwangsläufig alle Ubuntu-Versionen. Weitere Informationen sind der Wiki/Vorlagen/PPA/ppa.png PPA-Beschreibung des Eigentümers/Teams gezakovacs zu entnehmen.

Nach der Einrichtung des PPAs wird das folgende Paket installiert:

  • pdfocr (ppa)

Befehl zum Installieren der Pakete:

sudo apt-get install pdfocr 

Oder mit apturl installieren, Link: apt://pdfocr

Verwendung unter 16.04

Momentan (29.04.2017) befindet sich für Ubuntu 16.04 noch kein Paket im PPA. Es ist aber kein großer Aufwand, sich das Programm direkt von der Git-Hub-Seite 🇬🇧 herunterzuladen. Dann das Archiv entpacken[3], und die eigentliche Programmdatei pdfocr.rb mit Rootrechten[4] z.B. nach /usr/local/bin verschieben, noch die Endung löschen, dann kann pdfocr systemweit verwendet werden. Um die Manpage nutzen zu können, pdfocr.1 nach usr/local/share/man/man1 kopieren.

Bedienung

pdfocr ist ein Skript, das folgende Schritte automatisiert:

  1. Aufteilung einer mehrseitigen PDF-Datei in Einzelseiten (bei Bedarf, via pdftk)

  2. Extrahieren der Bild-Daten mit pdfimages

  3. Ausführung der Texterkennung mittels tesseract-ocr, ggf. Cuneiform-Linux oder OCRopus (Ausgabe im hOCR-Format)

  4. Einfügen des Textes in die PDF-Datei mit hocr2pdf

  5. Wiederzusammenführung der Dateien (bei Bedarf, via pdftk)

Es können die Schritte daher auch einzeln angepasst ausgeführt werden, wenn andere Einstellungen als im Standard vorgegeben erwünscht sind. Die "Passung" der Lagen ist abhängig vom Ausgangsmaterial, dabei sind die Ergebnisse für reine Textvorlagen erfahrungsgemäß besser als für PDF-Dateien mit vielen Bildern.

pdfocr wird auf der Kommandozeile[2] ausgeführt, die allgemeine Syntax lautet:

pdfocr [OPTIONEN] -i INPUT.pdf -o OUTPUT.pdf 

Folgende Optionen stehen zur Verfügung:

pdfocr-Optionen
Aufruf Funktion
-t tesseract-ocr als Texterkennungsprogamm nutzen (ohne Angabe ab 0.1.4. Standard)
-c statt tesseract-ocr Cuneiform als OCR-Programm verwenden
-o statt tesseract-ocr ocropus als OCR-Programm verwenden
-l, --lang LANG zu verwendende Sprache (Sprachkürzel) festlegen (siehe aber unten)!
-w, --workingdir DIR Ordner für die Temporärdateien festlegen
-k, --keep die Temporärdateien nicht löschen
-h Hilfe
-v Versionsnummer ausgeben

Hinweis:

Nutzung von Cuneiform
Leider funktioniert die hOCR-Funktion in der Cuneiform-Version 0.9.0 und höher im Zusammenspiel mit hocr2pdf nicht richtig. Nach der Zusammenführung der Bildebene mit der erstellten .hocr-OCR-Datei kann die Schrift teilweise in überdimensionierter Größe dargestellt werden, sodass die Passung nicht stimmt und im schlimmsten Fall sogar Teile des OCR-Ergebnis in der erstellten PDF-Datei gar nicht mehr vorhanden sind.

Die in den offiziellen Paketquellen bis Ubuntu 11.04 vorhandene Cuneiform-Version 0.7.0 lieferte in diesem Zusammenhang wesentlich bessere Ergebnisse. Aktuell ist in den Paketquellen allerdings Cuneiform-Version 1.1.0 enthalten, das ebenfalls von dem beschriebenen Problem betroffen ist.

Verwendung von OCRopus
Die Verwendung von OCRopus ist nicht getestet; das Programm erwartet eine Version, in der ocroscript zum Einsatz kommt (die aktuelle Version 0.7 ist nicht kompatibel). pdfocr verwendet Tesseract als Ersatz, wenn keine passende OCRopus-Installation gefunden wird.

Probleme und Lösungen

Leider erkennt diese Version mit Tesseract 3.02 die installierten Tesseract-Sprachen nicht. Ohne Angabe der Option -l wird Englisch zugrunde gelegt. Eine provisorische Lösung besteht darin, in in einem Editor [5] mit Root-Rechten in der Datei pdfocr.rb die Standardsprache auf deu (oder die gewünschte tesseract-Sprache, Zeile 73) zu setzen, und die Option usetesseract auf true zu stellen (Zeile 77), dann kann ohne die Angabe der -l-Optionen direkt Tesseract mit der angegebenen Sprache verwendet werden, wenn diese installiert ist.

Alternativ können die Zeilen 252 bis 265 mit vorangestelltem # auskommentiert werden, dann funktioniert die Sprachauswahl wieder. Hintergrund scheint zu sein, dass die Funktion --list-langs unter Tesseract 3.02 nicht mehr existiert, aber vom Skript verwendet wird.

Für Tesseract 3.03 sind diese Änderungen nicht nötig; die Option --list-langs funktioniert dort wieder.

Verwendung von Tesseract 3.03 unter Trusty

Die von Tesseract 3.03 (seit Ubuntu 14.04 in den Quellen) erstellten hOCR-Dateien haben statt .html jetzt .hocr als Endung. Daher muss in pdfocr.rb die Zeile 336

    sh "tesseract", "-l", language, basefn+'.ppm', basefn+'.hocr', "hocr"

in

    sh "tesseract", "-l", language, basefn+'.ppm', basefn, "hocr"

umgeändert werden, die nachfolgende Zeile

    sh "mv", basefn+'.hocr.hocr', basefn+'.hocr'

muss zudem gelöscht oder durch Vorstellen eines #-Zeichen auskommentiert werden.

Leider scheint aber das Zusammenspiel zwischen hocr2pdf und den von Tesseract erstellten hOCR-Datein nicht mehr gut zu funktionieren; es treten unter Trusty ähnliche Probleme auf (schlechte Passung durch überdimensionierte Bounding Boxes, z.T. fehlen Textelemente, weil sie zu groß dargestellt werden) wie bei der Nutzung von Cuneiform. Eine Lösung, bei der statt der hocr-Konfigurationsdatei für Tesseract die pdf-Konfigurationsdatei verwendet wird, findet sich in dieser Beitrag auf github 🇬🇧.

Alternativen

  • OCRmyPDF ist ein ähnlicher Programm, das momentan mit tesseract-ocr die besten Ergebnisse für die Textebenenerkennung und Passung für grafische PDF-Dateien liefert.

  • gscan2pdf liefert mit dem OCR-Programm tesseract-ocr sehr gute Ergebnisse für "Sandwich-PDFs", da damit auch eine akzeptable Layout-Erkennung für die Passung der Lagen möglich ist.

  • xsane2sandwich ist ein Wrapper-Skript, mit dem aus XSane heraus Sandwich-PDFs mit Textlage direkt erstellt und auch erweitert werden können; zur Texterkennung wird tesseract direkt oder OCRmyPDF verwendet.

  • pdfsandwich beschreitet einen ganz ähnlichen Weg wie pdfocr, seit Version 0.0.5 auch mit tesseract als OCR-Programm. Die Ergebnisse sind damit momentan wesentlich besser als mit pdfocr.

  • In diesem Blogeintrag 🇬🇧 von Konrad Voelkel wird eine ähnliche Vorgehensweise beschrieben.

  • ocrodjvu ist Programm, um Texterkennung für DjVu-Dateien durchzuführen. Eine Konvertierung von PDF-Dateien kann mittels pdf2djvu erfolgen, mit xsane2djvu auch eine direkte Erstellung. Die Texterkennung arbeitet generell zuverlässiger und die Dateien sind bei gleicher Qualität wesentlich kleiner.

Diese Revision wurde am 1. Februar 2018 11:49 von Heinrich_Schwietering erstellt.
Die folgenden Schlagworte wurden dem Artikel zugewiesen: OCR, Büro, Texterkennung, Grafik, Kommunikation, PDF, Ruby