[[Vorlage(Getestet, bionic)]] {{{#!vorlage Wissen [:Pakete installieren: Installation von Programmen] [:Terminal: Ein Terminal öffnen] [:Packprogramme: Archive entpacken] [:sudo: Root-Rechte] [:Editor:Einen Editor öffnen] }}} [[Inhaltsverzeichnis()]] [[Bild(Wiki/Icons/terminal.png, 48, align=left)]] [github:gkovacs/pdfocr:pdfocr] {en} 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 [:poppler-utils#pdfimages:pdfimages] zum Einsatz. Das Programm ist ein reines Kommandozeilenwerkzeug ohne grafische Oberfläche. Siehe auch [#Alternativen Alternativen]. = Voraussetzungen = Für pdfocr wird eine Installation[1] von {{{#!vorlage Paketinstallation ruby tesseract-ocr, sowie die gewünschten Sprachpakete 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 [github:gkovacs/pdfocr:Git-Hub-Seite] {en} 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 [:man: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`) 1. Extrahieren der Bild-Daten mit `pdfimages` 1. Ausführung der Texterkennung mittels tesseract-ocr 1. Erstellen der PDF-Dateien mit Textebene ebenfalls durch tesseracc-ocr 1. 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: {{{#!vorlage Befehl pdfocr [OPTIONEN] -i INPUT.pdf -o OUTPUT.pdf }}} Folgende Optionen stehen zur Verfügung: {{{#!vorlage Tabelle <-2 rowclass="titel"> 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 }}} {{{#!vorlage 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 `
' 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 [topic:altes-ruby-programm-pfdocr-erzeugt-fehermeldun: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 [:tesseract-ocr#Direktes-Erstellen-von-PDF-Dateien:pdf-Konfigurationsdatei] verwendet (siehe [https://github.com/snowboard975/pdfocr/commit/4d274c918346cb56a7a766cef566e6fb4b11171e Beitrag auf github] {en} 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 [:PDF/#oversized: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 [http://blog.konradvoelkel.de/2010/01/linux-ocr-and-pdf-problem-solved/ Blogeintrag] {en} 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:] {Übersicht} - Übersichtsseite * [:Texterkennung:] {Übersicht} - Übersichtsseite * [github:gkovacs/pdfocr:Projektseite] {en} auf github.com * [uf_thread:1456756:HowTo] {en} auf ubuntuforums.org #tag: Grafik, Büro, Kommunikation, OCR, Texterkennung, PDF, Ruby