Meine OwnCloud erfreut mich immer noch, nicht nur weil sie mir alle wichtigen Services bietet, sondern auch weil sie einfach funktioniert und mir viel Arbeit abnimmt. Das Einscannen von Rechnungen und Belegen sowie wichtigen Dokumenten vor dem Abheften hat sich nun als fester Workflow etabliert. Gegenüber meinem letzten Beitrag habe ich die Scan-Auflösung auf 200DPI angehoben, weil das Kleingedruckte auf Rechnungen zum Teil nicht so gut lesbar war und die erhöhte Auflösung natürlich der Erkennungsrate der OCR-Software erheblich entgegenkommt.
Nach intensiver Recherche ist meine Wahl für die OCR-Software auf Tesseract gefallen.
Die Gründe dafür sind vielfältig, ausschlaggebend waren jedoch die folgenden Punkte:
- Gute Erkennungsleistung auch bei relativ geringen Auflösungen,
- Wenig Abhängigkeiten von anderen Paketen um auf einem Server-System nicht einen ganzen Zoo an Desktop-Paketen nachinstallieren zu müssen,
- Einfache Einbindung in meinen bestehenden Workflow.
- Keine x86-Bindung bzw. Übersetzbarkeit und Lauffähigkeit auf einem ARM-Embedded-Board wie dem aktuell von mir eingesetzten Cubietruck.
Tesseract hat mich bezüglich Punkt 1 sehr überrascht. Die Erkennungsleistung entspricht schon in etwa dem, was man vor einigen Jahren für teures Geld kaufen musste. Obendrein wird dem Nutzer hier eine komplette Layout-Erkennung geboten, die sogar soweit geht, dass man HTML-Seiten mit quasi identischem Layout generieren kann.
An Abhängigkeiten fordert Tesseract nur die Leptonica-Bibliothek zur Bildmanipulation. Es werden keine X11 oder andere eher auf dem Desktop-PC anzutrefenden Pakete nachinstalliert und sowohl Tesseract als auch Leptonica sind in den Repositories aller wichtigen Distributionen vorhanden.
Mein Workflow basiert auf PDF-Dateien, die letztendlich in einem freigegebenen Verzeichnis in der OwnCloud abgelegt werden. Tesseract bietet seit Version 3.x die Möglichkeit die in die PDF-Dateien eingebetteten Scan-Bilder mit via OCR erkannten Texten zu hinterlegen. Der Vorteil liegt auf der Hand. Das Dokument ist im Originalzustand weiterhin ausdruckbar und kann nun durchsucht, indiziert und via Cut & Paste zitiert werden.
Dazu habe ich mein Scan-Skript wie folgt erweitert:
filename=/home/owncloud/data/admin/files/Dokumentenarchiv/`date +"%Y%m%d_%H%M%S"` scanimage -p --mode Gray --resolution 200 -x 215 -y 296 > /tmp/scanimage.pnm convert -trim -fuzz 10 /tmp/scanimage.pnm /tmp/scanimage.png tesseract -l eng+deu /tmp/scanimage.png $filename pdf chown -R nginx:nginx $filename.pdf chown -R nginx:nginx $filename.txt sudo -u nginx php -f /var/www/localhost/htdocs/owncloud/console.php files:scan admin
Kommen wir zu den einzelnen Zeilen des Skripts. Scanimage kann ausschließlich TIFF und PNM-Dateien erzeugen. Tesseract kann jedoch keine PNM-Dateien verarbeiten, daher muss das eingescannte Bild zunächst in das PNG-Format konvertiert werden. Dabei wird via „-trim“ automatisch der Rand beschnitten. Die Angabe „-fuzz 10“ stellt sicher, dass dabei unvermeidbare leichte Flecken auf der Scannerabdeckung nicht dazu führen, dass permanent zu wenig Rand abgeschnitten wird.
Tesseract wird via „-l eng+deu“ angewiesen, die eingescannte Seite als deutschen oder englischen Text anzusehen und entsprechende Wörterbücher zu nutzen. Die Angabe „pdf“ am Ende der Zeile wählt das PDF-Profil, das automatisch den gescannten Text hinter das eingebettete Bild legt.
Neben dem fertigen PDF landet auch eine Textdatei mit gleichem Namen im Verzeichnis, die eine einfache Kontrolle des Scan-Ergebnisses ermöglicht und später bei Bedarf einfach gelöscht werden kann. Die nun durchsuchbare PDF-Datei kann nun via OwnCloud-APP „Search Lucene“ anhand ihres Inhaltes gefunden werden. Wie praktisch dies letztendlich ist, wird sich in den nächsten Wochen zeigen.
Update: Mittlerweile gibt es auch ein grafisches OCR-Frontend als App für Nextcloud Version 10 oder neuer. Man kann es hier herunterladen:
Welchen Scanner hast du im Einsatz?
Ich habe ein Brother DCP-7055 und sieht es sehr schlecht mit dem Scannertreiber aus.
Drucken funktioniert soweit top mit diesem Treiber:
https://github.com/pdewacht/brlaser
Ich habe zwei Canon-Scanner im Einsatz. Den LiDE 210 und den N650U. Um den Brother mit Sane zu Laufen zu bringen, könnte man sich an diese Anleitung halten:
http://wiki.ubuntuusers.de/brother/scanner
Hier steht, dass der DCP-7055 via „brscan4“-Treiber in Sane einbindbar ist. Allerdings gibt es hierfür leider keine Sourcen und nur x86/x64-Binärpakete, was den Einsatz auf dem Cubietruck sehr behindert. Natürlich könnte man den Treiber via QEMU einbinden, das empfinde ich aber als ziemlichen Overkill.
Ich habe Gentoo Hardened auf dem Cubietruck und da will Qemu noch bisschen gestreichelt werden. Meine Scanvorgaenge halten sich grad in Grenzen, sodass ich mit einem Laptop das erledigen kann. Aber es ist nicht die Lösung welche mir gefällt.
„Tesseract kann jedoch keine PNG-Dateien verarbeiten, daher muss das eingescannte Bild zunächst in das PNG-Format konvertiert werden.“
Irgendwas stimmt doch hier nicht. Sollte das erste PNG nicht eigentlich PNM heißen? 😉
Danke für den Hinweis, ich habe das im Text korrigiert.