pdfocr
Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:
Dieser Artikel ist mit keiner aktuell unterstützten Ubuntu-Version getestet! Bitte teste diesen Artikel für eine Ubuntu-Version, welche aktuell unterstützt wird. Dazu sind die Hinweise zum Testen von Artikeln zu beachten.
Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:
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 zurück. 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
tesseract-ocr (sowie die gewünschten Sprachpakete)
poppler-utils
pdftk
Befehl zum Installieren der Pakete:
sudo apt-get install ruby tesseract-ocr poppler-utils pdftk
Oder mit apturl installieren, Link: apt://ruby,tesseract-ocr,poppler-utils,pdftk
benötigt. Unter 18.04 bereitet die Verwendung einer via snap installierten pdftk-Version allerdings Probleme, da diese nicht auf das standardmäßig vorgesehene Verzeichnis für die Speicherungen der Temporärdateien /tmp zugreifen kann. Mit der Verwendung des Pakets pdftk-java (unter 18.04 aus einem PPA beziehbar) umgeht man diese Probleme.
Installation¶
Das Programm ist nicht in den Quellen vorhanden. Es ist aber kein großer Aufwand, es sich 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:
Aufteilung einer mehrseitigen PDF-Datei in Einzelseiten (bei Bedarf, via
pdftk
)Extrahieren der Bild-Daten mit
pdfimages
Ausführung der Texterkennung mittels tesseract-ocr
Erstellen der PDF-Dateien mit Textebene ebenfalls durch tesseracc-ocr
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 |
-l, --lang LANG | zu verwendende Sprache (Sprachkürzel) festlegen |
-w, --workingdir DIR | Ordner für die Temporärdateien festlegen |
-k, --keep | die Temporärdateien nicht löschen |
-h | Hilfe |
-v | Versionsnummer ausgeben |
Hinweis:
Die Nutzung von Cuneiform und Verwendung von OCRopus sind, anders als in der manpage angegeben, mit der aktuellen Version von pdfocr nicht mehr möglich!
Probleme und Lösungen¶
Bei der Verwendung unter 18.04 kommt es nach dem Erstellen der Dateien zu folgendem Fehler:
Traceback (most recent call last): 3: from /usr/local/bin/pdfocr:401:in `<main>' 2: from /usr/local/bin/pdfocr:56:in `rmdir' 1: from /usr/local/bin/pdfocr:56:in `foreach' /usr/local/bin/pdfocr:57:in `block in rmdir': undefined method `in?' for "..":String (NoMethodError) Did you mean? nil?
Abhilfe schafft es, in ocrpdf.rb in einem Editor[5] die Zeile 57
next if filename.in?(['.', '..'])
in
next if ['.', '..'].include? filename
umzuwandeln. Hintergrund ist eine neuere Ruby-Version, die standardmäßig in 18.04 eingesetzt wird (siehe diesen Thread im Forum).
Da das Zusammenspiel zwischen hocr2pdf und den von Tesseract erstellten hOCR-Datein nicht mehr gut funktioniert (es treten wie bei der Nutzung von Cuneiform massive Probleme auf, z.B. schlechte Passung durch überdimensionierte Bounding Boxes, z.T. fehlen Textelemente, weil sie zu groß dargestellt werden). Eine Lösung, bei der statt der hocr-Konfigurationsdatei für Tesseract die pdf-Konfigurationsdatei verwendet (siehe Beitrag auf github 🇬🇧 ist inzwischen Teil der aktuellen Version, die Verwendung von hocr2pdf ist nicht mehr Teil des Sourcecodes. Leider entstehen dabei aber sehr große PDF-Dateien (siehe Riesen-PDFs).
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.
xsane2OCRmyPDF 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 via 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.
Links¶
PDF - Übersichtsseite
Texterkennung - Übersichtsseite
Projektseite 🇬🇧 auf github.com
HowTo 🇬🇧 auf ubuntuforums.org