Ubuntu 16.04 Xenial Xerus
Ubuntu 14.04 Trusty Tahr
Ubuntu 12.04 Precise Pangolin
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).
Ocrad ist in den Paketquellen vorhanden, es müssen die Pakete
ocrad (universe)
libjpeg-progs (optional, um .jpeg-Dateien zu verarbeiten)
netpbm (optional, um z.B. .png, .tiff oder .ps-Dateien zu verarbeiten)
ghostscript (optional, um PDF-Dateien zu verarbeiten)
poppler-utils (optional, Alternative für PDF-Dateien)
mit apturl
Paketliste zum Kopieren:
sudo apt-get install ocrad libjpeg-progs netpbm ghostscript poppler-utils
sudo aptitude install ocrad libjpeg-progs netpbm ghostscript poppler-utils
installiert[1] werden.
Aus den Paketquellen erhält man für Ubuntu 12.04 Version 0.21, für Ubuntu 14.04 Version 0.22, für Ubuntu 16.04 0.24; daher kann es sinnvoll sein, die neueste Version (0.25, Stand September 2016) zu verwenden. Dazu wird der Quellcode von der Downloadseite heruntergeladen, entpackt[3] und kompiliert[4]. Dazu muss ggf. das .tar.lz-Archiv zunächst - z.B. mit lzip - zu einem regulären .tar entpackt werden; die Standard-Archivverwaltung hat ansonsten Probleme, das eigentliche Archiv zu entpacken (unter 16.04 nicht nötig).
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 - 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.
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.
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 | "gesprächige" 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 .
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 (-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 xsane2cunei.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...
Diese Revision wurde am 16. September 2016 21:38 von Heinrich_Schwietering erstellt.