Ocrad

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

Dieser Artikel ist mit keiner aktuell unterstützten Ubuntu-Version getestet! Bitte teste diesen Artikel für eine Ubuntu-Version, welche aktuell unterstützt wird. Dazu sind die Hinweise zum Testen von Artikeln zu beachten.

Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:

  1. ⚓︎ Installation von Programmen

  2. ⚓︎ Archive entpacken

  3. ⚓︎ Pakete aus dem Quellcode erstellen

  4. ⚓︎ Ein Terminal öffnen

  5. ⚓︎ Einen Editor öffnen

  6. ⚓︎ Dateien ausführbar machen

Inhaltsverzeichnis
  1. Installation
    1. Manuelle Installation
  2. Funktionsweise
  3. Verwendung
    1. Optionen
  4. xsane2ocrad - Ocrad in XSane verwenden
  5. Alternativen
  6. Links

Ocrad.png Ocrad 🇬🇧 ist ein Kommandozeilenwerkzeug zur Texterkennung, das seit 2004 von Antonio Diaz Diaz entwickelt wird. Dabei handelt es sich um ein reines Zeichenerkennungsprogramm, das sprachenunabhängig arbeitet. Unterstützt werden nativ pnm-Dateien, also pbm (schwarz-weiß), pgm (Graustufen) oder ppm (Farbe). Es verfügt über eine Layout-Erkennung, um Spalten oder Text-Blöcke verarbeiten zu können. Viele OCR-Frontends können Ocrad einsetzen (z.B. ocrodjvu, OCRFeeder, xsane2djvu).

Installation

Ocrad ist in den Paketquellen vorhanden, es müssen die Pakete

Befehl zum Installieren der Pakete:

sudo apt-get install ocrad libjpeg-progs netpbm ghostscript poppler-utils 

Oder mit apturl installieren, Link: apt://ocrad,libjpeg-progs,netpbm,ghostscript,poppler-utils

installiert[1] werden.

Manuelle Installation

Aus den Paketquellen erhält man für Ubuntu 18.04 0.25; daher kann es sinnvoll sein, die neueste Version (0.27, Stand Mai 2021) zu verwenden. Dazu wird der Quellcode von der Downloadseite ⮷ heruntergeladen, entpackt[3] und kompiliert[4].

Funktionsweise

Ocrad verwendet eine Methode, bei der grafische Eigenschaften der Zeichen zur Erkennung herangezogen werden. Dabei wird keine Datenbank o.ä. verwendet. Stattdessen werden Unterschiede in der Form der Zeichen erkannt, die zum Einteilen in bestimmte Zeichen-Kategorien verwendet werden, ähnlich einer Binär-Suche, die sich baumartig verzweigt. Diese Methode ist zwar sehr schnell, hat aber den Nachteil, dass Ocrad nur schlecht mit defekten Zeichen umgehen kann, und - anders als GOCR (Abschnitt „GOCR-trainieren“) - kaum trainierbar ist.

Theoretisch können mit dieser Methode 231 Zeichen (über zweitausendmillionen) unterschieden werden; diese Unsumme schränkt man besser mit der Option -c oder -F ein; Standard ist die Verwendung des Zeichensatzes ISO_8859-15.

Ocrad liest als erstes das Vorgabebild in den Arbeitsspeicher ein. Optional wird eine Bearbeitung (Drehen/Spiegeln, Zuschnitt, Skalierung) durchgeführt, und eine Layout-Analyse angeschlossen. Danach werden Rahmen und Bilder entfernt, die Zeichen gefunden und in Zeilen gruppiert. Danach erfolgt die eigentliche Erkennung (für jedes Zeichen einzeln), anschließend werden ggf. Korrekturen vorgenommen (z.B. l.OOO zu 1.000 etc.). Das Ergebnis wird ausgegeben, und in eine Datei umgelenkt.

Der Entwickler betrachtet Ocrad dabei eher als Forschungsprojekt; die verwendeten Algorithmen können sich daher je nach Entwicklungsstand und Erkenntnissen des Entwicklers in zukünftigen Versionen verändern.

Verwendung

Die allgemeine Syntax auf der Kommandozeile[4] lautet

ocrad [OPTON(EN)] [DATEI(EN)] 

Um andere Dateiformate zu verwenden, können Programme aus den Paketen poppler-utils, libjpeg-progs, ghostscript und netpbm verwendet, und das Ergebnis per Pipe an Ocrad weitergeleitet werden:

pdftoppm DOKUMENT.pdf | ocrad                         ## für .pdf, aus poppler-utils
djpeg -greyscale -pnm FILENAME.jpg | ocrad            ## für .jpeg, aus libjpegs-prog
gs -sPAPERSIZE=a4 -sDEVICE=pnmraw -r300 -dNOPAUSE -dBATCH -sOutputFile=- -q FILENAME.ps | ocrad  ## für .ps, auch pdf, aus ghostcript
tifftopnm FILENAME.tiff | ocrad                       ## für .tiff, aus netpbm
pngtopnm FILENAME.png | ocrad                         ## für .png, aus netpbm
pstopnm -stdout -dpi=300 -pgm FILENAME.ps | ocrad     ## für .ps, für .pdf nicht anwendbar, aus netpbm 

Ältere Versionen von pstopnm können ggf. die -dpi-Option nicht verarbeiten und geben Bilder aus, die für ein Texterkennung zu klein sind. ocrad kann natürlich jeweils um die gewünschten Optionen erweitert werden.

Optionen

Ocrad-Optionen
Option Funktion
-a|--append Hängt den erkannten Text an eine bestehende Ausgabedatei gleichen Namens an
-c|--charset [Name] --charset=help listet die Möglichkeiten auf: ascii, iso-8859-9, iso-8859-15 (Standard ist iso-8859-15 (latin9))
-e|--filter [Name] --filter help listet die Möglichkeiten auf:
none Keine Filterung (Standard)
letters Jedes Zeichen, das einem Buchstaben ähnelt, wird als Buchstabe erkannt; andere Zeichen werden unverändert ausgegeben
letters_only Wie letters, aber alles andere wird entfernt
numbers Jedes Zeichen, das einer Ziffer ähnelt, wird als Ziffer erkannt; andere Zeichen werden unverändert ausgegeben
numbers_only Wie numbers, aber alles andere wird entfernt
-f|--force Bestehende Ausgabedatei wird überschrieben
-F|--format [FORMAT] Ausgabeformat, möglich sind byte und utf8, (Standard ist byte, 8 bit)
-i|--invert Invertiere Bild-Lagen (Weiß auf schwarz)
-l|--layout Führt eine Layout-Analyse durch. Ocrad kann Textblöcke in beliebiger Form erkennen, wenn sie von einer deutlichen weißen Fläche umgeben sind.
-o [Datei] Schreibt Ausgabe in [DATEI]
-q|quiet Keine Ausgabe von Meldungen
-s|scale [-][WERT] Skaliert die Eingabedatei vor der Layout-Analyse und der Erkennung um den angegebenen Wert; negative Werte [-] verkleinern die Datei um diesen Wert.
-t|--transform [NAME] --transform=help listet die Möglichkeiten auf:
none keine Veränderung (Standard)
rotate90, rotate180, rotate270 Drehung um 90°, 180°, 270°, jeweils gegen den Uhrzeigersinn
mirror_lr, mirror_tb, mirror_d1, mirror_d2 Horizontale, vertikale, diagonale (d1:links oben-rechts unten, d2:links unten - rechts oben) Spiegelung
-T|--threshold [n%] Schwellenwert für Binarisation (0-100%)
-u|cut [l,t,w,h] Schneidet Bild entsprechend der Angaben in Pixel zu; l=links, t=oben, w=Breite, h=Höhe; l und t geben die Koordinaten obere linke Ecke wieder, von der aus die Breite und Höhe berechnet werden. Der Zuschnitt wird vor allen anderen Aktionen durchgeführt.
-v|--verbose ausführliche Ausgabe
-x [DATEI] Exportiert OCR-Ergebnisse in spezielle ORF-DATEI 🇬🇧
-h|help Hilfe
-V|version Ausgabe der Versionsnummer
-D|--debug [LEVEL] Level zwischen 0-100, gibt intermediäre Daten zur Fehlersuche aus (debug)

Weitere Informationen in der Manpage des Programms, sowie im Online-Manual 🇬🇧.

xsane2ocrad - Ocrad in XSane verwenden

Ocrad kann die intern von XSane verwendeten Bilddateien direkt verwenden. Allerdings lassen sich die Angaben dazu nicht direkt im OCR-Konfigurationsfenster von XSane angeben. Benötigt wird ein kleines Skript, xsane2ocrad.sh, das die Optionen ausliest und Ocrad dann startet. Das Skript herunterladen ⮷ oder kopieren, in einem Editor[5] laden, unter xsane2ocrad.sh abspeichern und ausführbar[6] machen.

 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
#!/bin/bash
#    xsane2ocrad - ocr with ocrad directly from xsane
#    Copyright (C) 2012 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/>.
#
################################################################################
#                                                                              #
#                                  xsane2ocrad 0.1                             #
#                                                                              #
#                         ***   ocrad made simple   ***                        # 
#                                                                              # 
################################################################################
# 
# xane2ocrad is a wrapper to use Ocrad with XSane
# 
# 
#
TEMP_DIR=/tmp/      # folder for temporary files
ERRORLOG="xsane2ocrad.log"  # file where STDERR goes 

if [[ -z "$1"  ]]
  then
  echo "Usage: $0 [OPTIONS]

  xsane2ocrad scans image files with XSane, 
  recognizes the text using ocrad
  and outputs the text in a file.
  
  OPTIONS:
    -i <file1>  define input file (any image-format supported)
    -o <file2>  define output file (txt, html, hocr, rtf)
    -e <options> optional, all ocrad-Options, use quotes
 
  Progress- & error-messages will be stored in this logfile:
     $TEMP_DIR$ERRORLOG

  xsane2ocrad depends on
    - XSane, http://www.xsane.org/
    - ocrad, http://www.gnu.org/software/ocrad/
  
  Some coding was stolen from 'ocube'
  http://www.geocities.com/thierryguy/ocube.html

  This ocrad 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:e:" OPTION
  do
  case $OPTION in 
    i )  # input filename (with path)
      FILE_PATH="$OPTARG"
    ;;
    o )  # output filename
      FILE_OUT="$OPTARG"
    ;;
    e )  # extra options
      EXTRA="$OPTARG"
    ;;
  esac
done

# redirect STDERR to ERRORLOG
exec 2>>$TEMP_DIR$ERRORLOG
echo "~~~+++~~~~+++~~~" 1>&2

ocrad "$FILE_PATH" -o "$FILE_OUT" $EXTRA 1>&2
echo "ocrad "$FILE_PATH" -o "$FILE_OUT" $EXTRA ausgeführt" 1>&2

echo "~~~+++~~~~+++~~~"$(date +%c) 1>&2

Das Skript ist eine Anpassung des xsane2tess-Skriptes, das auf ubuntu-fr.org 🇫🇷, der französischen Ubuntu-Seite, veröffentlicht worden ist.

Das Temporärverzeichnis (Zeile 30) kann entsprechend der eigenen Wünsche abgepasst werden, dort wird auch die xsane2ocrad.log-Datei abgelegt, die bei Fehlern ggf. hilfreich ist.

In "XSane → Einstellung → Konfiguration → Texterkennung" wird als OCR-Befehl "/PFAD/ZU/xsane2ocrad.sh" sowie weitere Optionen eingesetzt, als Option für die Eingabedatei "-i", für die Ausgabedatei "-o", alles andere bleibt frei.

Als weitere Optionen können mit -e alle Ocrad-Optionen verwendet werden, die dann allerdings in Anführungsstriche gestellt werden müssen. So liefert -e "-l -a -F utf8" eine Layouterkennung, an die erstellte Datei können weitere Teile angehängt werden, die Ausgabe erfolgt in UTF-8, der Standardkodierung unter Ubuntu.

Die Vorlage wird in XSane im Betrachter-Modus als "Strichzeichnung" mit einer Auflösung von 300 dpi erstellt. Im Betrachter die Texterkennung (xsane/xsane-ocr.jpg-Taste) wählen, der Ausgabename mit entsprechender Endung wird im OCR-Speicher-Dialog festgelegt. Es lassen sich auch mehrerer Scans zu einer Datei aneinander hängen, wenn zum Abspeichern der selbe Name verwendet wird. Alternativ kann auch als Speicherformat "TEXT" angegeben werden, damit lässt sich der "Umweg" über den Betrachter-Modus umgehen und direkt eine Textdatei anlegen.

Falls Probleme auftauchen, liefert das angelegte Protokoll xsane2ocrad.log ggf. Hinweise zur Lösung. Die Erkennung erfolgt sehr schnell; allerdings hat Ocrad insbesondere mit dem Buchstaben "w" große Probleme - vielleicht weil er im Spanischen nicht vorkommt...

Alternativen