ubuntuusers.de

pct-scanner-script

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

Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:

Wiki/Icons/terminal.png pct-scanner-scripts ist eine Sammlung von Skripten, um einfach Vorlagen zu scannen und (einzelne oder mehrseitige) DjVu, PDF- oder (nur einseitige) JPEG-Dateien, z.B. für Archivierungszwecke zu erstellen. Mehrseitige Scans können automatisch produziert und auch manuell erweitert werden, verwendet werden können sowohl einfache Flachbett-Scanner als auch Geräte mit automatischem Dokumenteinzug (ADF). Über Konfigurationsskripte lassen sich individuelle Arbeitsabläufe für verschiedene Aufgaben steuern, um nicht immer alle gewünschten Optionen auf der Kommandozeile eingeben zu müssen. Damit ist das Skript sehr vielseitig einsetzbar. Es wurde von Jelle de Jong {en}, von der niederländischen Firma PowerCraft {nl}, entwickelt. Verwendet werden u.a. scanadf (aus dem Paket sane) und PDF/DjVu-Werkzeuge.

Installation

Das Programm ist in den Ubuntu-Quellen vorhanden, installiert[1] werden muss das Paket

  • pct-scanner-scripts

Wiki/Vorlagen/Installbutton/button.png mit apturl

Paketliste zum Kopieren:

sudo apt-get install pct-scanner-scripts 

sudo aptitude install pct-scanner-scripts 

Bedienung

Die allgemeine Syntax auf der Kommandozeile[2] lautet

pct-scanner-script [Optionen] 

In der "Standardeinstellung" (siehe Beispiele, zweite Zeile) wird ein "lineart"-Scan mit der source-Option ADF in einer Auflösung von 600 dpi erstellt, der dann in ein DjVu-Dokument umgewandelt wird. Soll auch noch eine PDF-Version erzeugt werden, muss ggf. vorher in der Konfigurationsdatei /etc/pct-scanner-script.conf (s. u. Abschnitt "Konfiguration") bei dem jeweiligen Block die Option NOPDF=1 entweder gelöscht oder mit einem # davor auskommentiert werden (NOPDF=0 oder NOPDF=NO funktionieren leider nicht in allen Versionern). Das Dokument wird anschließend zur Kontrolle in Evince geöffnet. Standard für die Speicherung ist ~/scanscripts, in dem dann die Ordner input, output und processing erstellt werden. Die Verarbeitung der Scans erfolgt über das Skript /usr/lib/pct-scanner-scripts/pct-scanner-script-process.

Das Skript erstellt, wenn es nicht durch die Optionen -p | --nopdf oder -j | --nodjvu daran gehindert wird, (mehrseitige) Dateien nach dem Muster document-multi-page-color/grayscale/linart.pdf bzw document-multi-page-color/graysacle/lineart.djvu im Ordner scanscript/output. Ggf. werden in scanscript/processing/jpeg von allen Scans .jpeg-Bilder abgelegt. Es empfiehlt sich, nach Abschluss einer Scanaufgabe die Option -e | --clean zu verwenden (vorher aber das eigentliche Ergebnis sichern, es wird dabei mit gelöscht!), oder das Verzeichnis hin und wieder manuell zu leeren.

Optionen

pct-scanner-script
Option Funktion
-h, --help, -? Hilfe
-l, --lineart Scannen in Schwarz-Weiß ("lineart") [empfohlen]
-c, --color Scannen in Farbe, wenn unterstützt
-g, --grayscale Scannen in Graustufen, wenn unterstützt
-o, --outdir /PFAD/ZUM/SPEICHERVERZEICHNIS Angabe des Speicherverzeichnis [auf genügend Speicherkapazität achten!]
-s, --source QUELLE Einstellung der Scan-Quelle, z.B. ADF oder Flatbed, siehe --search
-r, --resolution N Einstellung der Scan-Auflösung in dpi, mögliche Einstellungen siehe --search
-d, --device GERÄTENAME Einstellung des Gerätes ("device resolution"), siehe --search
-m, --resume N Wiederaufnahme-Zähler für die Seiten-Nummer einstellen
-e, --clean Löscht alle Dateien im Speicherverzeichnis
-p, --nopdf Keine Erstellung von PDF-Dokumenten [empfohlen]
-j, --nodjvu Keine Erstellung von DjVu-Dokumenten
-a, --search Suche nach Scannern und den verwendbaren Parametern
-n, --config KONFIGURATIONSNAME Verwendung eine Vorgabe-Konfiguration, wenn vorhanden
-v, --version Ausgabe der Version und Infos zum Autor
-b, --verbose "gesprächige" Ausgabe, liefert mehr Informationen zu den Prozessen

Beispiele

pct-scanner-script --search
pct-scanner-script --lineart --outdir /home/[benutzer] --source ADF --resolution 600 --device net:192.168.1.1:hpaio:/usb/Officejet_J5700_series?serial=CN7BOCF3HP04TC
pct-scanner-script --resume 11 --lineart --outdir /home/[benutzer] --source ADF --resolution 600 --device net:192.168.1.1:hpaio:/usb/Officejet_J5700_series?serial=CN7BOCF3HP04TC 

Verwendung eines Konfigurationsskriptes:

pct-scanner-script --lineart
pct-scanner-script --config config0
pct-scanner-script --clean --config config0 --nopdf --verbose 

Konfiguration

Die Konfiguration des Skriptes erfolgt über die Dateien /etc/pct-scanner-script.conf sowie die Steuerungsdateien im Verzeichnis /etc/pct-scanner-script.conf.d/. Darin können die meisten Optionen eingestellt werden, sodass das Programm nicht mit den Parametern gestartet werden muss. Dabei kann man mit der Option --config auch bestimmte Abschnitte der Konfigurationsdatei auswählen; --lineart --config MeineKonfiguration würde die Befehle aus Sektion [lineart-MeineKonfiguration] aus der gewünschten Konfigurationsdatei verwenden. Innerhalb der Optionsdatei kann mit OPEN=COMMAND ein externes Programm zur Weiterverarbeitung aufgerufen werden, also z.B. ein Betrachter, oder auch ein direkter Druckaufruf nach Beendigung des Scans (Beispiele in der Datei notes {en}).

Die Optionen auf der Kommandozeile überschreiben die in den Konfigurationsdateien; Angaben aus Konfigurationsdateien (in /etc/pct-scanner-script.conf.d/) mit höheren Nummern überschreiben diejenigen mit niedrigeren Nummern, nicht aber die auf der Kommandozeile angegebenen.

Dazu ein Beispiel: der Befehl

pct-scanner-script --config lineart1 

ruft die (hier für einen gt68xx-Scanner modifizierte) Konfiguration 50configuration, Sektion [lineart1] in /etc/pct-scanner-script.conf.d auf:

# pct-scanner-script --config lineart1
[lineart1]
LINEART=1
DEVICE=gt68xx
SOURCE=Flatbed
RESOLUTION=300
OUTDIR=${HOME}
NOPDF=1
OPEN=$(which djview)

Das Ergebnis wird gleich in DjView geöffnet.

Wäre die Datei 60configuration vorhanden, in der in Sektion [lineart1] eine Auflösung von 150 dpi stünde, würde dieser Wert verwendet werden. Der Befehl

pct-scanner-script -r 600 --config lineart1 

hätte aber absolute Priorität, und würde statt dessen die Auflösung auf 600 dpi setzen.

In den Konfigurationsdateien werden in einem Editor[3] die gewünschten Parameter als Zahlenwert 1 für "Verwenden" nach der Angabe geschaltet (z.B. NOPDF=1); oder als für das Backend verwendbares Kommando (z.B. DEVICE:gt68xx), nähere Informationen liefert die Verwendung der Option --search sowie ein Blick in die mitgelieferten Konfigurationsdateien.

Problemlösungen

Erstellung von Riesen-PDFs

Die Größe der erzeugten PDF-Dateien entspricht bei Eingabe von DIN-A4 dem Format RA0 (mehr als ein Quadratmeter!) (siehe Erläuterung in PDF). Um die Größe auf das tatsächliche Eingabeformat zurückzuführen, in eine Editor mit Root-Rechten die Datei /usr/lib/pct-scanner-scripts/scanner-script-process direkt vor den Vorkommen von

        $STRACE convert "$sourcefile" ...

die Zeile

        SIZE=`identify "$sourcefile" | cut -d " " -f 3 `

einfügen, und in den entsprechenden Zeilen den convert-Befehl nach "$sourcefile" um die Optionen

-resize $SIZE -units PixelsPerInch -density 300x300

ergänzen. So bleibt die Größe der PDF-Dateien beim Eingangswert/Scangröße; eine Texterkennung ist damit für die Ausgabedateien problemlos möglich.

Nicht verwendbare Optionen

Das Skript verwendet Optionen, die ggf. für das eingesetzte Backend nicht nutzbar sind (z.B. die Option --source für einen gt68xx-Scanner wie Mustek 1200 UB Plus, die zwar bei der Ausgabe zu --search angezeigt, aber als [inactive] beschrieben wird). Um trotzdem einen derartigen Scanner verwenden zu können, werden in der Datei /usr/bin/pct-scanner-script (in einem Editor mit Root-Rechten) alle Vorkommen von --source $SOURCE gelöscht werden, weil sonst der Scanprozess nicht startet, und das Programm mit der Meldung

scanadf: attempted to set inactive option source

abgebrochen wird. Die nächste Version soll aber eine --nosource-Option enthalten, die das Problem umgeht.

DjVu-Dateien werden nicht erstellt

Ggf. gibt es Probleme, DjVu-Dateien zu erstellen. Die im pct-scanner-script-process eingesetzte scanadf-System-Variable $SCAN_RES (siehe Manpage für scanadf) wird aus nicht geklärten Gründen immer als "0" ausgegeben, was dazu führt, dass eine DjVu-Datei mit dieser Auflösung erstellt werden soll, was schlichtweg nicht möglich ist. Abhilfe schafft hier der (laut Entwickler allerdings nicht ganz saubere) Umweg, die $RESOLUTION-Variable aus dem Hauptskript zu exportieren. Dazu integriert man

    [ ! -z "$RESOLUTION" ] && export RESOLUTION="$RESOLUTION"

in der function setup_environment()-Sektion im pct-scanner-script (ca. Zeile 300). Außerdem müssen in pct-scanner-script-process die $SCAN_RES-Variablen durch $RESOLUTION ersetzt werden, am einfachsten in einem Editor mit einer Suchen-Ersetzen-Funktion zu bewerkstelligen. Alternative Lösung: Im process-Skript die Auflösung manuell festlegen, was aber zu einer starren Auflösungsgröße führt. Das Problem soll aber in der nächsten offiziellen Version gelöst werden.

Bei weiteren Verweisen auf unbrauchbare Optionen können diese in den Skripten (Editor mit Root-Rechten verwenden) auskommentiert/gelöscht werden. Hinweise auf derartige Probleme liefert die Verwendung der --verbose-Option, mit deren Ausgabe man ggf. Inkompatibilitäten erkennen kann, oder der Aufruf mit

bash -x pct-scanner-script [Optionen] 

der eine noch umfangreichere Ausgabe zu den vorgenommenen Schritten aufzeigt.

Die Log-Datei status.log, die im Verzeichnis scanscript/output/ angelegt wird, ist leider in diesen Fällen nicht sonderlich hilfreich, da dort nur ausgegeben wird, was passiert sein sollte, nicht was wirklich passiert ist.

Erweiterte Möglichkeiten

Hinweis:

Diese Beschreibungen beziehen sich auf die Version aus dem aktuellen Entwicklungszweig {dl}, sie sollten z.T. mit der nächsten offiziellen Veröffentlichung in das Programm integriert werden. Die Entwicklung stagniert aber, bis auf kleinere bug-Fixes hat sich seit Erstellung des Artikels (Sommer 2010) nicht viel getan, allerdings wurde die Möglichkeit aufgenommen worden, eine benutzerspezifische Konfigurationsdatei ~./.pct-scanner-script.conf zu verwenden, die Vorrang vor den anderen Konfigurationseinstellungen hat. Außerdem wird auf die Erstellung einzelner .jpg-Dateien verzichtet (neue Pakete ggf. irgendwann auf debian.org {en}, allerdings ist auch im Juli 2014 noch nichts passiert, die Entwicklung ist wohl eingestellt).

Beziehen kann man die Version mit dem Befehl

svn checkout https://secure.powercraft.nl/svn/packages/trunk/source/pct-scanner-scripts/pct-scanner-scripts-devel/ pct-scanner-script-x.x.x 

Ein Paket lässt sich daraus allerdings nicht ohne Weiteres erstellen, die entsprechenden Dateien können aber mit Root-Rechten[4] in die jeweiligen Verzeichnisse kopiert werden.

Größe, Schwellwert, Gamma-Wert

Für die Entwicklerversion ist die Möglichkeit vorgesehen, auch andere Optionen, die das verwendete Backend bietet, einsetzen zu können. Sowohl in /etc/pct-scanner-script.conf als auch in den Dateien im Unterverzeichnis /etc/pct-scanner-script.conf.d/ kann eine Zeile in der Art

OPTIONS="-l 5.000mm -t 5.000mm -x 200.000mm -y 275.000mm --threshold 163 --gamma-value 1.75"

verwendet werden, die auch weitere für das jeweilige Backend verwendbare Optionen beinhalten kann (Option --search listet die Möglichkeiten auf). Dabei können die als [inactive] gekennzeichneten Optionen meist nicht verwendet werden; das ist z.T. auch vom verwendeten Scan-Modus abhängig. Das Beispiel dient zur Anpassung eines Schwarz-Weiß-Scans, für den die Optionen --treshold 163 und --gamma-value 1.75 verwendet werden, außerdem beginnt der Scanbereich erst jeweils 5 mm von oben und links versetzt, die Breite ist auf 200, die Länge auf 275 mm begrenzt (-l 5.000mm -t 5.000mm -x 200.000mm -y 275.000mm).

Encodierung mit didjvu, Texterkennung mit ocrodjvu

Das Skript lässt auch den Einsatz des sehr leistungsfähigen DjVu-Encoders didjvu zu, außerdem kann mit ocrodjvu auch gleich eine Texterkennung für die DjVu-Dateien erfolgen. Ggf. liefern die aktuellen Versionen dieser Programme bessere Ergebnisse als die in den Quellen vorliegenden Versionen, die oft veraltet sind. Hinweise dazu in den entsprechenden Wiki-Artikeln.

Farbscans

Für den Aufruf des Encoder und der Texterkennung aus pct-scanner-script-process wird in der Sektion function process_color() zur Encodierung eines Farbscans in eine DjVu-Datei die Zeile

        c44 -dpi $RESOLUTION "$sourcefile" $OUTDIR/scanscript/processing/document-single-page-$filename.djvu $EXEC_VERBOSE

durch

       didjvu encode -o $OUTDIR/scanscript/processing/document-single-page-noocr.djvu --dpi $RESOLUTION "$sourcefile" $EXEC_VERBOSE
       ocrodjvu --engine tesseract --language deu -o $OUTDIR/scanscript/processing/document-single-page-$filename.djvu $OUTDIR/scanscript/processing/document-single-page-noocr.djvu $EXEC_VERBOSE

ersetzt. Da ocrodjvu keine Ausgabedatei mit dem Namen der Eingabedatei erstellen kann, wird zunächst mit didjvu eine temporäre "noocr"-Datei erstellt, die dann mit der Texterkennung wieder in die weiterzuverarbeitende Datei document-single-page-$filename.djvu umgewandelt wird.

Graycsale-Scans

Grayscale-Scans lassen sich ebenfalls mit didjvu unter der Verwendung der Option --fg-crcb none und --bg-crcb none erstellen, der Aufruf erfolgt entsprechend durch Ersetzung der Zeile

        c44 -crcbnone -dpi $RESOLUTION "$sourcefile" $OUTDIR/scanscript/processing/document-single-page-$filename.djvu $EXEC_VERBOSE

in der Sektion function process_grayscale() durch

       didjvu encode -o $OUTDIR/scanscript/processing/document-single-page-noocr.djvu --dpi $RESOLUTION --fg-crcb none --bg-crcb none "$sourcefile" $EXEC_VERBOSE
       ocrodjvu --engine tesseract --language deu -o $OUTDIR/scanscript/processing/document-single-page-$filename.djvu $OUTDIR/scanscript/processing/document-single-page-noocr.djvu $EXEC_VERBOSE

Schwarz-Weiß-Scans

Für "lineart" liefert der standardmäßig verwendete Encoder cjb2 {en} ggf. bessere Ergebnisse als didjvu (geringere Dateigrößen, da keine Hintergrundebene erstellt wird), entsprechend wird in function process_lineart() die Zeile

        cjb2 -verbose -clean -dpi $RESOLUTION "$sourcefile" $OUTDIR/scanscript/processing/document-single-page-$filename".djvu $EXEC_VERBOSE

durch die Zeilen

        cjb2 -verbose -clean -dpi $RESOLUTION "$sourcefile" $OUTDIR/scanscript/processing/document-single-page-noocr.djvu $EXEC_VERBOSE
        ocrodjvu --engine tesseract --language deu -o $OUTDIR/scanscript/processing/document-single-page-$filename.djvu $OUTDIR/scanscript/processing/document-single-page-noocr.djvu $EXEC_VERBOSE

ersetzt. Der Aufruf kann natürlich jeweils um weitere Optionen für die Programme ergänzt werden (siehe die jeweilige Manpage).

ocrodjvu-Einstellungen

Die Einstellungen für ocrodjvu zu dem gewünschten OCR-Engine, Sprache etc. findet man in den ocrodjvu-Optionen, in den Beispielen wird tesseract-ocr für deutschsprachige Texte verwendet. Allerdings kann es hier allgemein zu Problemen kommen, wenn die Auflösung zu hoch gewählt wurde, empfohlen werden daher höchstens 300 dpi, die als Werte in pct-scanner-sript.conf oder eigenen Konfigurationedateien verwendet werden sollten. Ggf. hilft es, hinter die Optionen für ocrodjvu ein </dev/null zu verwenden. Wenn höhere Auflösungen verwendet werden (im Skript wird standardmäßig 600 dpi eingesetzt) kann die Verarbeitung der einzelnen Seiten sehr lange dauern! Unter Cuneiform kommt es dabei recht häufig zu Abstürzen, tesseract liefert momentan verlässlicher gute Ergebnisse.

Falls eine Texterkennung nicht gewünscht ist, kann die ocrodjvu-Zeile natürlich weggelassen werden, dann muss aber in den Encoderzeilen jeweils noocr wieder durch $filename ersetzt werden, damit die Weiterverarbeitung gewährleistet ist.

Auch die Verwendung von ocrodjvu ist als Funktion für die nächste Version geplant.

Alternativen

  • Mit gscan2pdf können auch mehrseitige DjVu-Dateien angelegt werden, allerdings ist eine Segmentierung nicht möglich.

  • xsane2djvu ist ein Wrapper, um direkt aus XSane heraus DjVu-Dateien mit einer integrierten Texterkennung zu erstellen. Es können direkt ein- oder mehrseitigen Dokumente erstellt werden, zur Encodierung können verschiedene Programme genutzt werden.

  • djvubind ist ein Kommandozeilenprogramm, mit dem aus .tiff-Vorlagen DjVu-Dokumente (z.B. als E-Books) erstellt werden können. Das Programm kann allerdings momentan nur schwarz-weiße .tiff-Dateien verarbeiten (z.B. Scan Tailor-Ausgaben); die Texterkennung erfolgt standardmäßig mit tesseract-ocr.

Diese Revision wurde am 18. August 2014 19:27 von Heinrich Schwietering erstellt.
Die folgenden Schlagworte wurden dem Artikel zugewiesen: djvu, Büro, Scanner, Grafik, Kommunikation, PDF