ubuntuusers.de

Hinweis: Dies ist ein statischer Snapshot unseres Wikis vom 25. März 2013 und kann daher nicht bearbeitet werden. Der aktuelle Artikel ist unter wiki.ubuntuusers.de zu finden.

xsane2djvu

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

XSane/xsane-logo.png Mit xsane2djvu lassen sich farbige mehrlagige DjVu-Dateien direkt aus XSane heraus über die Texterkennungsfunktion realisieren. Über dieses Verfahren können ein- oder mehrseitige DjVu-Dateien erstellt werden, als Encoder können die Programme didjvu (Standard), cjb2 {en} (sinnvoll für "lineart"-Vorlagen), minidjvu (nur für Schwarz-Weiß-Vorlagen), cpaldjvu {en} (für Vorlagen mit wenigen Farben) oder c44 {en} (für reine Grafik-DjVu-Dateien, keine automatische Texterkennung möglich!) eingesetzt werden. Zusammen mit der Segmentierung und dem Programm ocrodjvu ist es auch für "Privat"-Anwender relativ einfach möglich, die bitonale Ebene einer Bildvorlage zu extrahieren, und eine mehrlagige DjVu-Datei mit Textebene zu erstellen. Über XSane lassen sich dabei die Scanoptionen gezielt setzen, um so eine spätere Nachbearbeitung zu umgehen.

Vorbereitung

Hinweis:

Unter 12.04 Precise Pangolin ist OCRopus nicht mehr in den Quellen, und die aktuelle Version 0.6 ist nicht mit ocrodjvu kompatibel. Leider findet die in den Quellen vorliegende ocrodjvu-Version 0.7.7 auch tesseract-ocr nicht. Abhilfe schafft aber die Kompilierung von ocrodjvu 0.7.9 aus dem Quellcode; dann kann tesseract-ocr wieder verwendet werden.

Voraussetzung ist eine funktionstüchtige Installation von didjvu, außerdem der grundlegenden DjVu-Programme, ocrodjvu zur Texterkennung (mit den dazugehörigen OCR-Programmen OCRopus {en} (Standard) und/oder Cuneiform-Linux, GOCR, Ocrad, tesseract-ocr), sowie natürlich des Scanprogramms XSane:

  • djvulibre-bin (universe)

  • ocrodjvu (universe)

  • ocropus (universe (unter Precise nicht mehr in den Quellen!))

  • xsane (universe)

  • gocr (universe, optional, ab ocrodjvu 0.6.0)

  • ocrad (universe, optional, ab ocrodjvu 0.6.0)

  • tesseract-ocr (sowie die gewünschten Sprachpakete, optional ab ocrodjvu 0.6.0)

  • cuneiform (optional, aus den Quellen ab ocrodjvu 0.6.0 verwendbar)

  • didjvu (ab Oneiric in den Paketquellen)

Wiki/Vorlagen/Installbutton/button.png mit apturl

Paketliste zum Kopieren:

sudo apt-get install djvulibre-bin ocrodjvu ocropus xsane gocr ocrad tesseract-ocr cuneiform didjvu 

sudo aptitude install djvulibre-bin ocrodjvu ocropus xsane gocr ocrad tesseract-ocr cuneiform didjvu 

Wenn Cuneiform-Linux zum Einsatz kommen soll, ist (bis zum Einsatz von ocrodjvu in Version 0.6.0) eine mit libmagick++-dev erstellte Version nötig! Ab Version Cuneiform 0.9.0 kann die Version aus den Quellen verwendet werden.

Skript

Das eigentliche Skript wird in einen Editor[7] kopiert, unter einem aussagekräftigen Namen, z.B.xsane2djvu.sh abgespeichert und ausführbar[4] gemacht. Alternativ kann man es auch herunterladen {dl}.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
#!/bin/bash
#    xsane2djvu - djvu directly from xsane
#    Copyright (C) 2010 Heinrich Schwietering
# 
#    This program is free software: you can redistribute it and/or modify
#    it under the terms of the GNU General Public License as published by
#    the Free Software Foundation, either version 3 of the License, or
#    (at your option) any later version.
#
#    This program is distributed in the hope that it will be useful,
#    but WITHOUT ANY WARRANTY; without even the implied warranty of
#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#    GNU General Public License for more details.
#
#    You should have received a copy of the GNU General Public License
#    along with this program.  If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################
#
#                                   xsane2djvu 0.7
#
#           *** djvu made simple (well, kind of ...) ***
#
#
##############################################################################
# 
# xsane2djvu is a wrapper script to produce djvu files with xsane.
# It "mimics" the segmentation process used by commercial djvu products. 
# The scan is converted into a multilayered djvu file using didjvu 
# which depends on the gamera-framework to produce a foreground mask.
# Other encoders like cjb2, c44, cpaldjvu or minidjvu  are possible as well.
# Finally a text layer is added, using ocrdjvu (OCR engines ocropus or
# cuneiform) and addup the pages to a bundled djvu file.
#

TEMP_DIR=/tmp/      # folder for temporary files (all files)
ERRORLOG="xsane2djvu.log"  # file where STDERR goes 

if [[ -z "$1"  ]]
  then
  echo "Usage: $0 [OPTIONS]
  run the script as OCR-application for xsane!
  xsane2djvu uses a ppm files, and produces a 'split' djvu file using
  didjvu as standard application, the result is ocred using ocrodjvu
  
  OPTIONS:
    -i <filename> - temporary XSANE file
    -o <filename> - name for the single page output
    -l <language> - define the language used for recognition
    -e <ocr engine> - ocropus or cuneiform (with libmagick++-support!), noocr
     disables the ocr function
    -a <-ocrodjvu-option> - additional ocrodjvu options, optional
    -f </path/to/final/destination> -complete path to save location for 
       multipage-djvu, optional, without it a single page djvu is created
    -c <encoder> - usable c44 (no ocr possible), cjb2, cpaldjvu, or minidjvu; 
       parameter is optional, without didjvu is used as standard
    -q <-option for encoder> additional options for encoder used, optional
 
  Progress- & error-messages will be stored in this logfile:
     $TEMP_DIR$ERRORLOG

  xsane2djvu depends on
    - XSane http://www.xsane.org/
    - DjVuLibre http://djvu.sourgeforge.net
    - minidjvu http://minidjvu.sourceforge.net/
    - cuneiform-linux https://launchpad.net/cuneiform-linux Cuneiform-Linux
    - indirectly on libmagick-++dev  http://www.imagemagick.org/
    - or ocropus http://code.google.com/p/ocropus
    - didjvu and ocrodjvu http://jwilk.net/software/
    - indirectly on gamera http://gamera.informatik.hsnr.de/
  Some coding was stolen from 'ocube'
  http://www.geocities.com/thierryguy/ocube.html

  This djvu adaption is based on xsane2tess  
  http://doc.ubuntu-fr.org/xsane2tess, 

  Hints always welcome! heinrich (dot) schwietering (at) gmx (dot) de
"
  exit
fi

# get options...
while getopts ":i:o:l:e:a:f:c:q:" OPTION
  do
  case $OPTION in 
    i)  # input filename (with path)
      FILE_PATH="$OPTARG"
    ;;
    o )  # output filename
      FILE_OUT="$OPTARG"
    ;;
    l )  # recognition language
      REGLANG="$OPTARG"
    ;;
    e )  # engine option 
      ENGINE="$OPTARG"
    ;;
    a )  # additional ocrodjvu option  
      OCROPT="$OPTARG"
    ;;
    f )  # final name for bundled djvu file option 
      FINAL="$OPTARG"
    ;;
    c )  # encoder to use (standard is didjvu)
      ENCODER="$OPTARG"
    ;;
    q )  # option for encoder
      ENCOPT="$OPTARG"
    ;;
  esac
done

# redirect STDOUT to FILE_OUT
exec 1>>$FILE_OUT

# redirect STDERR to ERRORLOG
exec 2>>$TEMP_DIR$ERRORLOG

# strip path from FILE_PATH, use filename only
IN_FILE="${FILE_PATH##*/.*}"

echo "~~~+++~~~~+++~~~" 1>&2

# check if an encoder is requested
if [[ $ENCODER != '' ]]
  then
   { 
# check if minidjvu is requested
     if [[ $ENCODER == "minidjvu" ]]
     then
# prepare file for minidjvu
     convert "$IN_FILE" "minidjvu.pbm"
     echo "file converted" 1>&2
# use minidjvu and rename file
     minidjvu $ENCOPT "minidjvu.pbm" "minidjvu.djvu"
     echo "$ENCODER $ENCOPT used" 1>&2
     cp "minidjvu.djvu" "$FILE_OUT"
     else
# use other requested encoder and options
    $ENCODER $ENCOPT "$IN_FILE" "$FILE_OUT"
    echo "$ENCODER $ENCOPT used" 1>&2
    fi 
    }

  else
# produce segmented djvu file with didjvu
    didjvu encode $ENCOPT -o "$FILE_OUT" "$IN_FILE"
    echo "didjvu $ENCOPT used" 1>&2
fi

# check if ocr is requested
if [[ $ENGINE == 'noocr' ]]
    then
       cp "$FILE_OUT" "$FILE_OUT.djvu"
       echo "no ocr used" 1>&2
    else
# check if language is set, if not use english; language is set according to used system language setting
       if [[ $REGLANG == "" ]]
          then
          ocrodjvu --engine=$ENGINE -o "$FILE_OUT.djvu" --language eng $OCROPT "$FILE_OUT" 1>&2
          echo "$ENGINE used with language eng $OCROPT" 1>&2
# use requested engine and language for ocr
       else
           ocrodjvu --engine=$ENGINE -o "$FILE_OUT.djvu" --language "$REGLANG" $OCROPT "$FILE_OUT" 1>&2
          echo "$ENGINE used with language $REGLANG $OCROPT" 1>&2
       fi
fi

# check if multipage document is requested
if [[ $FINAL != '' ]]
  then
  { 
# check if final file is already existing
    if [[ ! -a "$FINAL".djvu ]]
      then
# start final djvu file
        cp "$FILE_OUT.djvu" "$FINAL".djvu 1>&2
        echo "$FINAL started" 1>&2

# insert new djvu file at the end of final file
      else
       djvm -insert "$FINAL".djvu "$FILE_OUT.djvu" 1>&2 
       echo "$FILE_OUT added to $FINAL" 1>&2
    fi 
# remove temporary single page djvu
    rm "$FILE_OUT".djvu

  }

fi

# Remove djvu without text
rm "$FILE_OUT"
echo "~~~+++~~~~+++~~~" 1>&2

Das Skript ist eine Weiterentwicklung des xsane2tess-Skriptes, das auf ubuntu-fr.org veröffentlicht worden ist.

Das Temporärverzeichnis (Zeile 36) kann entsprechend der eigenen Wünsche abgepasst werden, dort wird auch die xsane2djvu.log-Datei abgelegt. Das Log wird in der Standardeinstellung nach Abschalten des Rechners gelöscht; wer es später verwenden möchte, sollte ein anderes Verzeichnis wählen.

Benutzung

In "XSane -> Einstellung -> Konfiguration -> Texterkennung" wird als OCR-Befehl "/PFAD/ZU/xsane2djvu.sh" sowie weitere Optionen zur Steuerung angegeben. Verwendbare Optionen sind:

Optionen für xsane2djvu
Argument Funktion
-e [OCR-Programm] ocropus, cuneiform (bis ocrodjvu-Version 0.5 mit libmagick++-Unterstützung!), ab ocrodjvu-Version 0.6 auch gocr, ocrad oder tesseract, noocr schaltet die Texterkennung ab
-l [Sprachkürzel] Legt die verwendete Sprache für den OCR-Engine fest; optional, ohne Angabe wird englisch verwendet
-a ["ocrodjvu-Option(en)"] ocrodjvu-Option(en), müssen in Anführungszeichen stehen; optional
-f [/Pfad/zur/Multipage-Datei/Sammelname] Option zur Erstellung eines mehrseitigen Dokumentes, Angabe des kompletten Pfade ist nötig (~ oder $HOME funktionieren nicht!); ohne Pfadangabe wird das Dokument im Homeverzeichnis des Benutzers abgelegt. Optional, ohne diese Option wird ein einseitiges DjVu-Dokument erstellt
-c [Encoder] Verwendeter Encoder, nutzbar sind c44 (keine Texterkennung über ocrodjvu möglich!), cjb2, cpaldjvu oder minidjvu. Die Verwendung ist optional, ohne sie wird didjvu eingesetzt
-q ["-Encoder-Option(en)"] Encoder-Option(en) verwenden, müssen in Anführungszeichen stehen; optional

Achtung!

Die Angaben müssen sehr exakt erfolgen, es dürfen zwischen den Optionen nur einfache Leerzeichen verwendet werden, sonst kommt es zu Fehlern!

Als Option für die Eingabedatei in "XSane -> Einstellungen -> Konfiguration -> Texterkennung" werden "-i", für die Ausgabedatei "-o" angeben, die weiteren Felder bleiben leer. Die möglichen Sprachkürzel für ocrodjvu lassen sich über den Befehl[5]

ocrodjvu --engine OCR-PROGRAMM --list-languages 

ausgeben (und sind für OCRopus und tesseract abhängig von den installierten Tesseract-Sprachpaketen), für Cuneiform lassen sich alle unterstützten Sprachen angeben, ohne Angabe ist die Standardeinstellung Englisch (eng). Als ocrodjvu-Optionen lassen sich natürlich nur für Einzelbilder sinnvolle Parameter eintragen, also z.B. -a "-t words|lines|chars" oder "--word-segmentation simple|uax29" (siehe ocrodjvu-Optionen), die Verwendung ist optional. Ähnliches gilt für die Optionen des verwendeten Encoders, Einzelheiten in den jeweiligen Manpages. Die Optionen müssen wie in der Tabelle angegeben in Anführungszeichen gesetzt werden.

Die Vorlage wird in XSane im Betrachter-Modus erstellt. Als Auflösung werden 300 dpi empfohlen, die Farbeinstellung je nach Vorlage gewählt. Im Betrachter die Texterkennung (xsane/xsane-ocr.jpg-Taste) wählen, der Ausgabename wird ohne Endung im OCR-Speicher-Dialog festgelegt, (für die Erstellung mehrseitige Dateien ist das unerheblich). Alternativ kann auch, wenn keine Kontrolle/zusätzliche Speicherung des Bildes erforderlich sind, im Speichermodus mit der Erweiterung "TEXT" direkt die Erstellung der Datei erfolgen, ohne im Betrachter-Modus die OCR-Funktion aufrufen zu müssen. Die DjVu-Datei wird dann in angegebenen Verzeichnis (Schreibrechte nötig!) als <Ausgabename>.djvu abgelegt, und enthält eine durchsuchbare Textebene. Die Qualität der Texterkennung ist natürlich vom Aufbau des Vorlage abhängig; je "verschachtelter" Text und Grafikelemente sind, desto schwieriger wird die exakte Zerlegung, und damit die Texterkennung. OCRopus liefert bei Tabellen die besten Ergebnisse, bei Vorlagen mit Bildern schneidet meist Cuneiform besser ab.

Beispiele

Die Eingabe in "XSane -> Einstellungen -> Konfiguration -> Texterkennung -> OCR Befehl"

/PFAD/ZU/xsane2djvu.sh -l ger -e cuneiform

führt zur Erstellung eines einseitgen DjVu-Dokument mit dem im OCR-Speicher-Dialog angegebenen Dateinamen und Verzeichnis; verwendet wird didjvu zur Encodierung und Cuneiform für die Texterkennung, Sprache ist Deutsch.

/PFAD/ZU/xsane2djvu.sh -l deu -e tesseract -a "-t lines" -c cjb2 -q "-lossy" -f /home/BENUTZER/Archiv/Zeitschrift/2010

erstellt den Beginn eines mehrseitiges Dokument 2010.djvu im Ordner ~/Archiv/Zeitschrift (das Verzeichnis muss bereits existieren!). Verwendet wird der Encoder cjb2 (für schwarz-weiße Vorlagen sinnvoll) mit der Option -lossy (bessere Komprimierung). Zur Texterkennung wird tesseract-ocr, Sprache Deutsch, verwendet, der Text wird in Zeilen, nicht in einzelnen Wörtern gespeichert (weitere Größenersparnis). Weitere Scans mit dieser Einstellung werden dann jeweils an die Datei 2010.djvu angehängt, die temporären einseitigen Dateien werden gelöscht (sie können mit Auskommentieren der Zeile 179 rm "$FILE_OUT".djvu im Skript auch erhalten werden). Das mehrseitige Dokument ḱann jederzeit wieder weiter ergänzt werden, wenn der komplette Pfad zur Datei korrekt angeben ist. Es lassen sich auch zwischenzeitlich (z.B. für Seiten ohne Text, oder schwarz-weiße Seiten in ansonsten farbigen Vorlagen) andere Optionen im selben "Sammeldokument" verwenden.

DjVu-Dateien ohne Textebene

Das Skript kann auch zur Erstellung von DjVu-Dateien ohne Texterkennung verwendet werden, dazu muss als engine-Option noocr gesetzt werden. Das ist ggf. sinnvoll, wenn eine Texterstellung erst für ein gebündeltes mehrseitiges Dokument erstellt werden soll; so lassen sich z.B. die ocrodjvu-Optionen effektiver nutzen.

Zusammenführen einzelner DjVu-Dateien

Einzelne durchnummerierte DjVu-Dateien lassen sich auf der Kommandozeile mit dem Befehl

djvm -c SAMMELNAME.djvu NAME*.djvu  

zu einem gemeinsamen Dokument unter SAMMELNAME.djvu verbinden, die Reihenfolge der Seiten ist von der kleinsten (alphanumerisch sortiert) aufsteigend.

Probleme

Falls Probleme auftauchen, liefert das angelegte Protokoll xsane2djvu.log ggf. Hinweise zur Lösung.

Cuneiform

Wenn Cuneiform-Linux beim Konvertieren mit einer Meldung

*** buffer overflow detected ***: cuneiform terminated

und nachfolgendem Backtrace abstürzen sollte (siehe 609482), ist ggf. die Auflösung für den Scanvorgang zu hoch gewählt. Teilweise tritt das bei Farbscans auch bei einer Auflösung von 300 dpi auf. Abhilfe kann das Scannen mit niedrigerer Auflösung und nachfolgendem Skalieren der Vorlage im Betrachter von Xsane schaffen; allerdings kann die Erkennungsqualität etwas leiden. Ggf. hilt es, als letzte ocrodjvu-Option </dev/null zu verwenden. Mit OCRopus/tesseract als OCR-Anwendung treten diese Probleme nicht auf.

Wenn Cuneiform aus dem Quellcode erstellt wurde, und das Programm unter /usr/local/bin abgelegt ist, findet ocrodjvu es nicht, auch wenn der Pfad (was Standard ist) in der PATH-Variable eingetragen ist. Die Binärdatei cuneiform muss entweder nach /usr/bin verschoben, oder dort eine symbolische Verknüpfung erstellt werde. Das Problem ist ab Version 0.4.7 behoben.

Alternativen

  • Mit gscan2pdf können auch mehrseitige DjVu-Dateien angelegt werden, allerdings ist die Segmentierung nicht möglich. Die Texterkennung (für DjVu-Daten sinnvoll einzusetzen erst ab Version 0.9.31, in der die Verwendung von OCRopus und Cuneiform implementiert ist) erfolgt dementsprechend auch nicht im Djvu-Dokument selbst, sondern wird vorher von der gescannten Vorlage erstellt, was gerade bei farbigen Vorlagen zu Problemen führen kann. Verglichen mit von didjvu erstellten farbigen DjVu-Dateien können bis zu 10fach große Dateien aus derselben Vorlage entstehen.

  • pct-scanner-scripts aus dem gleichnamigen Paket ist ein vielfältig konfigurierbares Kommandozeilen-Werkzeug zum Scannen und anschließender Erstellung von DjVu, PDF oder JPEG-Dokumenten zur Archivierung. Das Programm bedarf etwas "Einarbeitungszeit", kann dann aber auch "vollautomatisiert" z.B. mit ADF-Scannern eingesetzt werden, um mehrseitige DjVu-Dateien, auch mit Textebene, erstellen zu können. Einzelheiten im Artikel pct-scanner-script

  • 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.

ubuntuusers.local › Wikixsane2djvu