OCRmyPDF
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.
Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:
OCRmyPDF 🇬🇧 ist ein Kommandozeilenprogramm, um für eingescannte PDF-Dateien eine durchsuchbare Textebene zu erstellen. Das Resultat wird im PDF/A2-b-Format gespeichert. Für die Texterkennung kommt Tesseract zum Einsatz.
Des Weiteren werden verschiedene PDF-Programme (Ghostscript, poppler-utils, pdftk, QPDF) und Grafik-Anwendungen (ImageMagick, unpaper) verwendet, außerdem Python und einige Python-PDF-Module. Das Programm überprüft bei Erstaufruf, ob die benötigten Programme installiert sind, und gibt bei fehlenden Teilen entsprechende Hinweise aus. Die Passung der Textlage ist sehr gut, die Verarbeitung sehr zuverlässig, die Dateigrößen akzeptable, und die Verwendung des PDF/A-2b-Standards für das Ergebnis kann unter Ubuntu momentan wohl sonst kein anderes Programm bieten.
Hinweis:
PDF-Dateien, die direkt aus LibreOffice oder anderen Textbearbeitungsprogrammen erstellt wurden, sind in der Regel keine "grafischen" PDF-Dateien und lassen sich auch so durchsuchen. Eine zusätzliche Textlage ist daher nicht nötig. OCRmyPDF erstellt zumindest eine PDF/A-Version solcher PDF-Dateien.
Installation¶
OCRmyPDF ist ab Ubuntu 16.10 in den offiziellen Paketquellen enthalten. Folgendes Paket muss installiert werden[1]:
ocrmypdf (universe)
Befehl zum Installieren der Pakete:
sudo apt-get install ocrmypdf
Oder mit apturl installieren, Link: apt://ocrmypdf
Python-Paketmanager¶
Dieser Abschnitt erklärt die Installation mittels pip. Folgendes Paket wird zuerst benötigt:
python3-pip
Befehl zum Installieren der Pakete:
sudo apt-get install python3-pip
Oder mit apturl installieren, Link: apt://python3-pip
OCRmyPDF wird dann mittels
pip3 install --user ocrmypdf
installiert. Dabei werden alle Abhängigkeiten direkt installiert. Allerdings muss zur systemweiten Nutzung die PATH
-Variable um den Pfad zu ocrmypdf, /home/BENUTZER/.local/bin erweitert werden.
Installiert wird damit (Stand Mai 2019) die ocrmypdf-Version 8.3.0. Eine ältere ocrmypdf-Version muss ggf. erst entfernt werden (z.B. durch Entfernen/Umbenennen des Ordners /usr/lib/python3/dist-packages/ocrmypdf-X.X.X.dist-info mit Root-Rechten[5]).
Manuell¶
Zur Nutzung werden folgende Pakete benötigt:
imagemagick
parallel
ghostscript
qpdf
unpaper
tesseract-ocr (sowie gewünschte Sprachpakete)
Befehl zum Installieren der Pakete:
sudo apt-get install imagemagick parallel ghostscript qpdf unpaper tesseract-ocr
Oder mit apturl installieren, Link: apt://imagemagick,parallel,ghostscript,qpdf,unpaper,tesseract-ocr
Zum Erstellen aus dem aktuellen Code (19. Mai 2019) werden folgende Pakete benötigt
python3-reportlab (
>= 3.3.0
)python3-cffi (
>=1.9.1
)python3-chardet (
>=3.0.4
)python3-img2pdf (
>=1.3.0
, in 18.04 enthaltene Version nicht ausreichend!)python3-ruffus (
>=2.7.0
, in 18.04 enthaltene Version nicht ausreichend!)
Befehl zum Installieren der Pakete:
sudo apt-get install python3-reportlab python3-cffi python3-chardet python3-img2pdf python3-ruffus
Oder mit apturl installieren, Link: apt://python3-reportlab,python3-cffi,python3-chardet,python3-img2pdf,python3-ruffus
Das ebenfalls benötigte pikepdf (>= 1.3.0
) ist nicht in den Ubuntuquellen vorhaben. Das setup.py-Skript zieht aber die nötigten Programme, wenn sie nicht, oder nicht in entsprechender Version vorhanden sind, selbstständig auf den Rechner.
Das Programm selbst wird von der Projektseite ⮷ als .zip- oder tar.gz-Archiv bezogen und entpackt[2]. Eine Installation erfolgt über das setup.py-Skript. Ein einfaches Paket kann über den Befehl
sudo checkinstall python3 setup.py install
erstellt und installiert werden.
Experten-Info:
OCRmyPDF kann zur Erstellung von stark komprimierten SW-PDFs den jbig2-Encoder verwenden, ähnlich dem für DjVu-Dateien eingesetzten CJB2-Algorithmus. Allerdings ist das Programm derzeit nicht in den Quellen vorhanden, und muss manuell erstellt werden. Damit ist auch die Nutzung der Option --jbig2-lossy
möglich, die noch weitere Größenreduzierungen möglich macht (siehe auch Hinweise 🇬🇧 in der OCRmyPDF-Dokumentation).
Benutzung¶
Die allgemeine Syntax auf der Kommandozeile lautet dann bei systemweiter Installation:
ocrmypdf [OPTION(EN)] EINGABE.pdf AUSGABE.pdf
Funktionsweise¶
Mit -g -Option erstelltes PDF in Evince |
Die Eingabedatei ist eine rein "grafische", auch mehrseitige, PDF-Datei. Diese wird seitenweise ausgemessen (mit identify
aus ImageMagick), und die Seiten in ppm/pgm-Dateien umgewandelt (das Programm erkennt, ob es sich um farbige oder schwarzweiße Vorlagen handelt). Optional werden diese Dateien geradegezogen (convert
mit -deskew
-Option) und gesäubert (unpaper). Aus diesen Vorlagen werden mit tesseract hOCR-Dateien mit dem Text und den Lageinformationen erstellt, diese Dateien überführt das hocrTransform.py-Skript jeweils in eine PDF-Datei mit Textlage. Die einzelnen PDF-Dateien werden wieder zusammengefasst, diese Ausgabedatei wird mittels Ghostscript in eine PDF/A-Datei umgeformt.
Optionen¶
OCRmyPDF-Optionen | |
Option | Funktion |
-h | Hilfefunktion |
-v | Ausführlichkeit der Meldungen erhöhen (diese Option kann mehrfach verwendet werden) |
-k | Temporärdateien nicht löschen (Speicherort ist standardmäßig OCRmyPDF-x.x/tmp/DATUM_UHRZEIT.filename.EINGABE ohne Endung) |
-g | Debug-Modus: - erstellt eine PDF-Datei, in der jede Seite zweimal vorhanden ist (einmal nur mit der Textlage und den "bounding boxes", einmal mit dem Bild; siehe Abbildung) - Ausführlichkeit wird auf das höchstmögliche Level gestellt - die Temporärdateien werden nicht gelöscht, es wird ein Log zur PDF-Überprüfung angelegt |
-d | Jede Seite vor der Texterkennung geradeziehen (mit convert aus ImageMagick) |
-c | Jede Seite vor Texterkennung säubern (mit unpaper) |
-i | Das gesäuberte Bild in der Ausgabe-PDF-Datei verwenden (Standard ist es, das Original zu verwenden, oder die geradegezogene Version, wenn die -d -Option gesetzt ist) |
-o | Falls die Auflösung eines Vorlagebildes niedriger sein sollte als die per Argument angegebene Auflösung in dpi, wird für die Texterkennung ein "oversampled" Bild mit letzterer Auflösung erstellt. Dadurch kann die Texterkennung verbessert werden, führt aber ggf. zu größeren PDF-Ausgabedateien (Standard: keine Verwendung von oversampled Vorlagen) |
-f | Erzwinge eine Texterkennung für das gesamte Dokument, selbst wenn einige Seiten bereits Font-Daten enthalten (was bei PDF-Dateien aus Scans eigentlich nicht vorkommen sollte). Nutzung allerdings mit Bedacht, da bei überdimensionierten PDFs einen sehr hohe CPU/Arbeitsspeicher-Last entstehen kann!. |
-l | Angabe der Sprache in der PDF-Datei, die Texterkennung wird dadurch verbessert (Standard ohne Angabe ist Englisch), jede von Tesseract unterstützte Sprache ist möglich |
-C | Angabe einer zusätzlichen tesseract-Konfigurationsdatei (diese Option kann mehrfach verwendet werden). Die Konfigurationsdatei muss sich im tessdata/configs-Verzeichnis der tesseract-Installation befinden, normalerweise /usr/share/tesseract/ zu finden. Die mitgelieferte Datei tess-cfg/no_ligature, die die Verwendung der f-Ligaturen fi und fl verhindert, muss zur Nutzung entsprechend verschoben werden. |
-s | Überspringt bei der Texterstellung alle Seiten, in denen schon Text enthalten ist, die Seiten werden aber in das Dokument aufgenommen. Sinnvoll für Seiten, die eine Mixtur aus Bildern, Textseiten und /oder bereits mit OCR versehenen Lagen beinhalten. |
--output-type {pdfa,pdf,pdfa-1,pdfa-2,pdfa-3} | Legt das Ausgabeformat fest - pdfa erzeugt eine dem PDF/A-2b-Standard entsprechend Datei zur Langzeit-Archivierung (empfohlen, Standardeinstellung). Mit pdf wird versucht, die Eingabedateiinhalte so wenig als möglich zu verändern. Mit pdf-a1 wird eine PDF/A1-b Datei erstellt, pdf-a2 entspricht pdfa , pdf-a3 erzeugt eine PDF/A3-b-Datei. |
Die Hilfefunktion liefert Informationen zu einer Vielzahl weiterer Optionen.
Probleme und Lösungen¶
OCRmyPDF bearbeitet standardmäßig keine Dateien, die bereits mit einer Textlage versehen sind und gibt Fehlermeldungen dazu aus. Falls das gewünscht ist (z.b. weil später weitere Seiten angehängt worden sind oder versehentlich eine falsche Spracheinstellung gewählt wurde), kann die Option -f
(force) verwendet werden, damit wird die Texterkennung für das gesamte Dokument wiederholt. Mit der -s | --skip-text
-Option kann mindestens ab Version 6.1.2 auch angegeen werden, dass Seiten mit Textlage für die Texterkennung übersprungen werden.
Anwendungsmöglichkeiten¶
OCRmyPDF lässt sich mit xsane2OCRmyPDF verwenden, um direkt aus XSane heraus hochwertige PDFs mit Textebene im PDF/A-2b-Standard zu erstellen. Für Scanner mit Tasten lässt via OCRmyPDF mit einigen Programmen die direkte Erstellung von PDFs mit Textlage per Tastendruck verwirklichen.
Alternativen¶
Es gibt einige Programme, die eine Textlage für PDF-Dateien erstellen können. gscan2pdf und xsane2sandwich ermöglichen es, direkt Scans zu erstellen und zu verarbeiten, pdfocr und pdfsandwich arbeiten ähnlich wie OCRmyPDF auf der Kommandozeile mit vorhandene "grafischen" PDF-Dateien. Allgemein scheinen Programme, die für die Zusammenführung der Textlagen mit dem Bild auf hocr2pdf zurückgreifen, mehr Probleme mit der Textlagenpassung im "Sandwich"-PDF zu haben. Die Passung ist bei Verwendung von Perl- (gscan2pdf) oder Python-Modulen (wie hier in OCRmyPDF, oder indirekt, z.B. in Paperwork und ocrodjvu), wesentlich genauer. Problem mit der Passung gibt es häufig auch bei der Verwendung von mit Cuneiform-Linux erzeugten hOCR-Dateien, leider inzwischen auch mit von Tesseract 3.03 erstellten hOCR-Dateien.
Links¶
Projektseite 🇬🇧
Toolbox: Texterkennung mit OCRmyPDF 🇩🇪 - heise Open Source, 09/2014
Linux, OCR and PDF: Scan to PDF/A 🇬🇧 - Blogbeitrag zum Scannen und Umwandeln in PDF/A-Dateien, 03/2013
PDF Übersichtsartikel zu PDF-Programmen
Texterkennung Übersichtsartikel zum Thema OCR