[[Vorlage(Getestet, bionic)]] {{{#!vorlage Wissen [:Pakete installieren: Installation von Programmen] [:Terminal: Ein Terminal öffnen] [:Editor: Einen Editor öffnen] [:sudo: Root-Rechte] }}} [[Inhaltsverzeichnis()]] [[Bild(Wiki/Icons/terminal.png, 48, align=left)]] 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 ([wikipedia_en:Automatic_document_feeder: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 [https://www.tuxcrafter.net Jelle de Jong] {en}, von der niederländischen Firma [https://www.powercraft.nl/pages/home.html 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 {{{#!vorlage Paketinstallation pct-scanner-scripts, universe }}} = Bedienung = Die allgemeine Syntax auf der Kommandozeile[2] lautet {{{#!vorlage Befehl 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 Versionen). 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 == {{{#!vorlage Tabelle <-2 tablestyle="width: 97%;" rowclass="titel"> 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 === {{{#!vorlage Befehl 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: {{{#!vorlage Befehl 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 [https://secure.powercraft.nl/svn/packages/trunk/source/pct-scanner-scripts/pct-scanner-scripts-devel/notes 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 {{{#!vorlage Befehl pct-scanner-script --config lineart1 }}} ruft die (hier für einen [:Scanner/gt68xx: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 {{{#!vorlage 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#oversized: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 "$SCAN_RES"x"$SCAN_RES" }}} 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 für den scanadf-Aufruf ggf. Optionen, die für das eingesetzte Backend nicht nutzbar sind (z.B. die Option `--source` für einen Scanner wie Mustek 1200 UB Plus oder Canon LiDE 220, 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) bei den scanadf-Aufrufen die Option `--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. {{{#!vorlage Hinweis Trotzdem muss für einen Flachbett-Scanner ohne Dokumenteneinzug im Aufruf eine Option `--source flatbed` oder den Konfigurationsdateien eine `SOURCE=Flatbed`-Angabe erfolgen, da sonst keine `--end-count`-Wert gesetzt wird - und so der Flachbett-Scanner ununterbrochen weiter scannt! Für ADF-Scanner ist das kein Problem, es werden, wenn nichts anderes angegben ist, so lange Scans durchgeführt, bis sich im Dokumenteineinzug keine Seiten mehr befinden, und damit beendet sich das Programm dann selbstständig. }}} == 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 [:man: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). In '''pct-scanner-script-process''' wird am Anfang (als Zeile 30) mit {{{ SCAN_RES=$RESOLUTION }}} die benötigte `SCAN_RES`-Variable neu gesetzt, und entspricht dann der angegebenen Auflösung. Alternative Lösung: Im process-Skript die Auflösung manuell festlegen, was aber zu einer starren Auflösungsgröße führt. 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 {{{#!vorlage Befehl 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= {{{#!vorlage Hinweis Diese Beschreibungen beziehen sich auf die Version aus dem [https://secure.powercraft.nl/svn/packages/trunk/source/pct-scanner-scripts/pct-scanner-scripts-devel/ 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 - es wurde noch die Möglichkeit aufgenommen , 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. Die Entwicklung des Programms ist wohl (Stand April 2019) endgültig eingestellt worden. Beziehen kann man die letzte Version mit dem Befehl {{{#!vorlage 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. Die Verwendung des '''makefile''' führt auch nur zum Eintrag einer ggf. darin geänderten Versionsangabe in den relevanten Skripten. }}} == 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 [:SANE#Backend: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 $SCAN_RES "$sourcefile" $OUTDIR/scanscript/processing/document-single-page-$filename.djvu $EXEC_VERBOSE }}} durch {{{ didjvu encode -o $OUTDIR/scanscript/processing/document-single-page-noocr.djvu --dpi $SCAN_RES "$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 $SCAN_RES "$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 $SCAN_RES --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 [http://djvu.sourceforge.net/doc/man/cjb2.html 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 $SCAN_RES "$sourcefile" $OUTDIR/scanscript/processing/document-single-page-$filename".djvu $EXEC_VERBOSE }}} durch die Zeilen {{{ cjb2 -verbose -clean -dpi $SCAN_RES "$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 [:man:Manpage]). == ocrodjvu-Einstellungen == Die Einstellungen für ocrodjvu zu dem gewünschten OCR-Engine, Sprache etc. findet man in den [:ocrodjvu#Optionen: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 `