Raspberry Pi: Dokumentenverwaltung mit OCR einrichten
Im Dezember schrieb mich Sascha, der hier auch mitließt, mit einem Themenvorschlag an. Er bastelte an einer Dokumentenverwaltung mit OCR (gescanntes Dokument wird in Text verwandelt, damit es durchsuchbar wir) auf dem Raspberry Pi. Damit kann man von überall aus auf wichtige Dokumente zugreifen und sie sind indexiert wie auch durchsuchbar. Insbesondere letztere Funktion ist zum schnellen Auffinden vorteilhaft. Auf dem Raspberry Pi sind die Dokumente nicht bei einem dritten Anbieter gelagert, sodass auch der Punkt Datenschutz Beachtung findet. Im folgenden Artikel werde ich unter Einbezug der Erfahrungen von Sascha erklären, wie man eine Dokumentenverwaltung mit OCR auf dem Raspberry Pi einrichtet und verwendet. Dabei sei vorab noch erwähnt, dass mit einer Wartezeit von zwei bis drei Minuten pro gescannter Seite zu rechnen ist, bis es final abgelegt ist, da der Raspberry Pi eben kein Powerpaket ist. Des Weiteren kann diese Lösung „nur“ mit Dokumenten im PDF und TIF umgehen und die Erkennung von Umlauten (ä, ö, ü und ß) in Dokumenten funktioniert nicht. Wenn diese kleinen Einschränkungen nicht stören, sollte man mit der folgenden Lösung seinen Spaß haben.
Zunächst sollten wir den Raspberry Pi übertakten, damit wir etwas mehr Leistung aus diesem rausholen. Wie dies funktioniert, erklärte ich bereits in dem Artikel Overclocking/Übertakten ohne Garantieverlust.
Nun müssen wir eine Verzeichnisstruktur anlegen, in der die Dokumente später abgelegt werden. Diese sollte man an einem Ort anlegen, an dem genug Speicherplatz für die später eingescannten Dokumente vorhanden ist. In raw/ werden die zu bearbeitenden, eingescannten Dokumente später zu finden sein. Diese werden vor der Verarbeitung in dem Ordner backup/ gesichert. In handled/ werden sich die, durch die Dokumentenverwaltung verarbeiteten, Dokumente wiederfinden und in tmp/ werden Dateien bei der Verarbeitung durch die Dokumentenverwaltung zwischengelagert. In diesem Tutorial gehen wir davon aus, dass wir diese Ordner in /home/pi anlegen. Falls dem bei dir nicht so ist, musst du dies in diesem und den folgenden Schritten jeweils ändern.
cd /home/pi
mkdir document-vault
mkdir document-vault/raw
mkdir document-vault/backup
mkdir document-vault/handled
mkdir document-vault/tmp
Wir müssen nun noch einige Softwarepakete für die Dokumentenverwaltung installieren. Dies können wir ganz einfach über den Paketmanager APT mittels des folgenden Kommandos erledigen.
sudo apt-get update
sudo apt-get install ghostscript libtiff-tools imageMagick pdftk tesseract-ocr bc python-reportlab python-lxml oracle-java7-jdk screen aspell-de
Des Weiteren müssen wir OCRmyPDF, ein in Java geschriebenes Programm, welches die Texte in den gescannten Dokumenten erkennt, installieren. Wir benötigen die Version 1.1, da neuere Versionen nicht mehr so einfach funktionieren. Bei Interesse findet man jedoch die aktuelle Version der Software in dessen Git Repository auf GitHub.
cd /home/pi/document-vault
wget https://github.com/fritz-hh/OCRmyPDF/archive/v1.1-stable.tar.gz
tar xfvz v1.1-stable.tar.gz
mv OCRmyPDF-* OCRmyPDF
rm v1.1-stable.tar.gz
chmod 755 OCRmyPDF/OCRmyPDF.sh
Jetzt müssen wir ein Script zur Dokumentenverwaltung anlegen. Dieses wird später Dateien konvertieren und durch das ORC System jagen.
nano run.sh
#!/bin/sh # Check lockfile if [ -f run.lock ] then echo "----- Script is already running -----" exit fi date +%s > run.lock # Create a backup from input files and move files for ocr to tmp/ find /home/pi/document-vault/raw -name "* *" -type f | rename 's/ /_/g' cp /home/pi/document-vault/raw/* /home/pi/document-vault/backup mv /home/pi/document-vault/raw/* /home/pi/document-vault/tmp # Convert .tif to .pdf echo "----- Get the .tif and convert -----" for i in `ls /home/pi/document-vault/tmp/*.tif | cut -d. -f1`; do tiff2pdf -o $i.pdf $i.tif; echo " converting $i.tif" rm $i.tif; done # Start ocr the documents echo "----- Starting OCR -----" echo "----- Note: 2-5 Minutes per page! Not file -----" for i in `ls /home/pi/document-vault/tmp/*.pdf | tr '\n' '\0' | xargs -0 -n 1 basename`; do sh /home/pi/document-vault/OCRmyPDF/OCRmyPDF.sh /home/pi/document-vault/tmp/$i /home/pi/document-vault/handled/$i && echo " OCR finish from $i" done # Remove raw files from ocr layered files rm /home/pi/document-vault/tmp/* rm run.lock echo "----- Finish -----"
Des Weiteren brauchen wir ein Script, das den Index der Suche aktualisiert, wenn sich der Datenbestand verändert hat. Dieses legen wir in diesem Schritt an.
nano index.sh
#!/bin/sh # Check lockfile if [ -f index.lock ] then echo "----- Script is already running -----" exit fi date +%s > index.lock # Update index recollindex rm index.lock echo "----- Finish -----"
Ein drittes Script wird auch noch benötigt, welches die Lockfiles bei einem Reboot bereinigt.
nano clean.sh
#!/bin/sh # Clean up lockfile rm index.lock rm run.lock echo "----- Finish -----"
Die Scripts aus den vorherigen Schritten müssen wir nun noch ausführbar machen.
chmod +x run.sh
chmod +x index.sh
chmod +x clean.sh
Jetzt müssen wir Recoll mit der dazugehörigen Weboberfläche installieren. Recoll ist eine schlanke Dokumentensuchmaschine, die den kompletten, durch OCR aus dem gescannten Dokument geholten Text durchsuchbar macht. Im Folgenden installieren wir Recoll über den Paketmanager APT.
sudo apt-get install recoll python-recoll
Nun müssen wir noch das Recoll Webinterface herunterladen. Dabei brauchen wir die Version 1.18.1, da es ansonsten zu Kompatibilitätsproblemen mit der installierten Recoll Version kommt.
wget https://github.com/koniu/recoll-webui/archive/v1.18.1.zip
unzip v1.18.1.zip
rm v1.18.1.zip
mv recoll-webui-1.18.1 recoll-webui
Da diese Version nicht ganz lauffähig ist, müssen wir nun den kompletten Inhalt der Datei recoll-webui/webui-standalone.py durch folgenden Code ersetzen. Speichern kann man in dem Editor nano mittels STRG + X, Y und Enter.
nano recoll-webui/webui-standalone.py
#!/usr/bin/env python import argparse import bottle import webui # handle command-line arguments parser = argparse.ArgumentParser() parser.add_argument('-a', '--addr', default='127.0.0.1',help='address to bind to [127.0.0.1]') parser.add_argument('-p', '--port', default='8080', type=int, help='port to listen on [8080]') args = parser.parse_args() webui.bottle.debug(True) webui.bottle.run(host=args.addr, port=args.port, reloader=False)
Nachdem nun endlich alles Nötige installiert ist, geht es an das Einrichten. Leider habe ich keine Möglichkeit gefunden, ohne XServer (grafischer Oberfläche) Recoll zum erstmaligen Start anzusprechen. Daher müssen wir über die grafische Oberfläche auf den Raspberry Pi zugreifen. Entweder hängen wir diesen hierzu an einen Bildschirm oder wir greifen über Remote Desktop bzw. VNC Server auf diesen zu. Für letztere beiden Varianten habe ich die entsprechenden Anleitungen verlinkt. Der Zugriff über die grafische Oberfläche ist nur in diesem Schritt notwendig.
Wenn wir nun in der grafischen Oberfläche des Raspberry Pis sind, öffnen wir den Terminal (in Raspbian LXTerminal genannt). Dort geben wir folgendes Kommando ein, woraufhin sich einige Sekunden später Recoll öffnen sollte.
recoll
In dem Recoll Fenster sollte das First indexing setup Fenster offen sein, in dem wir über einen Klick auf Indexing configuration die Konfigurationen des Programmes aufrufen können. Dort löschen wir zunächst im Top directories den Eintrag ~ (Tilde). Anschließend fügen wir den Pfad zum Ordner handled/ (/home/pi/document-vault/handled) hinzu. Anschließend fügen wir bei dem Punkt Stemming languages die Auswahl german hinzu. Wir bestätigen die Änderungen mit einem Klick auf OK. Anschließend starten wir die Erstellung des bislang leeren Indexes mittels eines Klicks auf Start indexing now. Sobald in der unteren Zeile des Hauptfensters von Recoll kein Text mehr steht, können wir es schließen und haben diesen Schritt geschafft.
Nun müssen wir einen Cronjob einrichten, der einmal in der Minute das oben angelegte Script zum Verarbeiten der Dokumente ausführt, sofern das Script vom letzten Aufruf nicht noch läuft. Des Weiteren soll alle fünf Minuten geprüft werden, ob sich der Datenbestand geändert hat und ggf. der Index aktualisiert werden. Dazu fügen wir am Ende der Crontab Datei folgende Zeile ein.
crontab -e
* * * * * sudo /home/pi/document-vault/run.sh > /dev/null 2>&1 */5 * * * * /home/pi/document-vault/index.sh > /dev/null 2>&1
Jetzt können wir das Webinterface erstmals starten. Dabei ist darauf zu achten, dass man sowohl den Port als auch die IP-Adresse/DynDNS Domain auf dem das Webinterface laufen gelassen werden soll, definiert werden müssen.
cd /home/pi/document-vault/recoll-webui
./webui-standalone.py -a [IP] -p [Port]
Beispiel
./webui-standalone.py -a 192.168.178.22 -p 8080
Hat alles geklappt, so können wir nun im Browser unter http://IP:Port/ (im Beispiel http://192.168.178.22:8080/) das Webinterface aufrufen. Wir können im Terminal mittels STRG + X die aktuelle Instanz des Webinterfaces wieder schließen
Damit das Webinterface bei jedem Start des Raspberry Pis automatisch gestartet wird, müssen wir eine screen Instanz hiervon in eine Crontab legen. Dies geht, indem wir am Ende der Crontab Datei folgende Zeile einfügen (IP und Port wie oben anpassen). Des Weiteren tragen wir auch das Clean Script in die Crontab, damit es nach einem Neustart des Raspberry Pis nicht zu Fehlern kommt.
crontab -e
@reboot screen -dmS RecollWebGui bash -c "cd /home/pi/document-vault/recoll-webui && ./webui-standalone.py -a [IP] -p [Port]" @reboot /home/pi/document-vault/clean.sh > /dev/null 2>&1
Soweit ist nun alles eingerichtet, was zum Verwalten der Dokumente gebraucht wird. Nun stellt sich noch die Frage, wie die eingescannten Dokumente auf den Raspberry Pi gelangen. Im Endeffekt müssen die Dokumente irgendwie in den Ordner /home/pi/document-vault/raw (ggf. abweichend) wandern. Ich kann hierzu empfehlen, Samba zu verwenden, womit man eine Netzwerkfreigabe einrichten kann. Wie dies geht, beschrieb ich bereits in dem Tutorial Samba Server installieren.
Dabei sollte man in Step 6 des Tutorials folgenden Eintrag hinzufügen:
[Neue Dokumente] path = /home/pi/document-vault/raw writeable = yes guest ok = no [Abgelegte Dokumente] path = /home/pi/document-vault/handled writeable = yes guest ok = no
Abschließend sollten wir den Raspberry Pi noch einmal neustarten.
sudo reboot
Endlich geschafft! Wenn du nun alles richtig gemacht hast, solltest du das Webinterface aufrufen und in diesem nach einem Dokument suchen können (Herunterladen via Samba). Neue Dokumente solltest du über die Netzwerkfreigabe auf den Raspberry Pi laden können. An dieser Stelle sei noch einmal erwähnt, dass diese Lösung nur mit PDF und TIF Dokumenten umgehen kann und es ein paar Minuten dauern wird, bis ein neues Dokument durch das OCR System gejagt wurde und folglich in Recoll zu finden sein wird. Des Weiteren sei noch erwähnt, dass das Setzen eines Passwortes für das Webinterface nur möglich wäre, wenn man diesen durch einen Webserver als Proxy jagen würde, was ich mir in diesem Tutorial erspart habe, da man sowohl IP-Adresse des Raspberry Pis und Recoll Webinterface Port kennen muss, um auf dieses zuzugreifen. Wer das dennoch haben möchte, sollte es mal auf eigene Faust versuchen 😉
57 Kommentare. Hinterlasse eine Antwort
Dank Jan habe ich nun seit vielen Monaten diese Dokumentenverwaltung am start.
Fazit: Sehr schnelle und leichte Veraltung für den privat gebrauch. Besser als große installationen.
Vielen Dank Jan!
Freut mich zu lesen, dass diese Zusammenarbeit wohl auch auf längere Sicht nützlich war bzw. ist 🙂
Ich war von der Möglichkeit auch super begestert. Installiert ist alles, aber ich bekomme einen Fehler von OCRmyPDF.sh. „Resolutions difference (290.42016/277.05463) higher than expected (.81716). Exiting…“ Hat jemand eine Idee?!
An dem Format des gescannten Dokumentes scheint so zu sein, dass es nicht verarbeitet werden kann (irgendwas stört an der Auflösung). Konkretes bekomme ich aus er Fehlermeldung aber auch nicht raus.
Wenn ich Morgen da dran denke schaue ich mal welche Auflösung etc. Meine Dokumente habe.
Hast Du pdf oder jpg Dateien gescannt ?
Ich habe nur PDFs in das Verzeichnis gelegt. Aber kein PDF ist von der Auflösung korrekt! Daher glaube ich, das irgendetwas nicht mehr korrekt die Auflösung bestimmt. Alle Versionen >1.1 kann man auch vergessen, da die abhängigen Pakete für Wheezy nicht verfügbar sind… Danke aber schon mal…
Hallo Jan! ich bin seit einigen Wochen an einem änlichen Projekt dran und gerade zufällig auf die Seite hier gekommen.
Ich habe eine Frage. Weißt du vielleicht ob es ein änliches Programm wie ocrmypdf gibt was einem erlaubt in jpg. datein zu suchen? oder ist dies sogar mit ocrmypdf möglich?
Außerdem würde mich interressieren wie die qualität des finales textes ist nach dem umwandeln mit dem ocr tool.
tesseract-ocr oder andere tools haben bei mir meist sehr seltsame resultate hervorgebracht^^
gruß max
Hallo Max, ich bin der besagte Sascha. Ein ähnliches Projekt wie OCRmyPdF ist mir nicht hat bekannt.
Ich bin auch gerade dabei dieses Projekt hier mal via installiert zu verwirklichen. Vielleicht kann man ja was zusammen machen?
Ich bin mit den Ergebnissen absolut zu frieden. Bis auf die Umlaute.
Ansonsten würde ich das Script erweitern. Jpg zu tiff.
Hi sascha
Als zusatzinfo, das ganze soll dazu dienen bilder die uber den pi gemacht werden in text umzuwandeln. Bin naemlich zu faul runter in den keller zu laufen um den wasser zähler abzulesen 🙂
sollen eben nur zahlen uebersetzt werden.
Koennen uns da gerne mal zusammen dran setzen, jedoch gibt es noch weitere probleme die ich vorher beheben muss 🙂
Gute Idee, ich habe eigentlich alles schon da. Ein Raspberry mit Ps3 Kamera und Motion. Stromzähler und Dokumenten Verwaltung. Sehr interessant was du da anreist.
Moin moin,
irgendwie klappt das bei mir nur teilweise. Wenn ich OCRmyPDF manuell ausführe bekomme ich immer einen Haufen fehlermeldungen.
wenn ich das script im terminal ausführe mekert er : Basename fehlender operant
Kann es daran liegen das ich die „alten“ packete über wget gezogen habe, aber die aktuellen über den packetmanager bezogen habe?
Das seltsame ist aber das es ab und zu funktioniert ein paar pdf mit text ebene habe ich erhalten aber das ist nur ca 1/4 von dem was ich in raw geschogen habe.
Was ich zudem festgestllt habe ist das wenn 2 Dateien gleich heißen, zB scann_001.pfd werden in Backup und in Handled die bereits existirenden Dateien überschrieben. Das Könnte man vll einfach mit einem Zeitstempel beheben.
Hallo,
habe alles nach Ihrer Anleitung installiert. Habe während der Installation auch keinerlei Fehlermeldungen erhalten. Nun habe ich eine PDF Datei per WinSCP auf meinen Pi in den Ordner „raw“ geladen. Die datei wird auch kurze zeit später automatisch in den Ordner „backup“ geschoben. Doch mehr passiert nicht. Auch nach einer stunde kann ich über recoll noch nichts finden.
Wenn ich in den Ordner „ocrmypdf/tmp“ gehe, lässt sich auch erkennen, dass schon etwas an der pdf datei gearbeitet wurde. Dort sind Grafiken aus dem PDF und einige textdokumente mit Zahlenfolgen zu finden.
Wo kann ich denn einen detaillierten log bzw. fehlermeldungen finden ?? Habe den Ordner „var/log“ schon durchsucht aber kann keine Fehlermeldung finden.
Könnten Sie mir hier weiterhelfen ?
Vielen Dank!
Gruß
Florian
Ein detailliertes Log kenne ich nicht. Sind alle drei Scripte Chmod – x ( Run clean und Index? ).
Ansonsten würde ich mir eine PDF Datei nehmen und von Hand mal durch OCRmyPdF schicken . /OCRmyPdF testen.pdf oder so. Siehst du mit dem. Befehl top etwas?
Hi,
habe den Fehler gefunden. Ich habe zum testen eine x-beliebige PDF genommen bzw. keine eingescannte PDF. Damit kann OCRmyPDF wohl nicht umgehen.
Nun habe ich mal ein Dokument eingescannt und auf den Pi kopiert, und hat gleich auf anhieb funktioniert.
Nur habe ich noch eine Frage:
Wenn ich in Recoll nun nach Dateien suche, kann ich die gefundenen PDF dateien nicht aus dem Browser heraus herunterladen. Ist dies irgendwie möglich ?
Gruß Florian
Jan hatte dazu oben etwas geschrieben. Ich persöhnlich habe es etwas anders gelöst.
ich habe einen apachen installiert und das verzeichniss handeld in var/www/handeld gemountet. Im Recoll Webinterface kannst du unter settings den Link angeben und alles ist fluffig.
Das ganze Projekt lebt nun auf https://github.com/JuXReal/SimpleDocumentManagement
Am Ende soll ein Installscript alles für euch übernehmen.
Derzeit noch eine Beta
Hallo Jan. Vielen Dank für dieses überragende Tutorial. Hat mir den Wiedereinstieg in diesen Bereich deutlich vereinfacht. Mein Ziel war es das private Büro papierlos zu bekommen.
Folgendes Setup habe dazu gewählt. Raspberry Pi (am Router), Netwerkdrucker (Brother MFC-L2740DW), 2x1TB USB Festplatten (Toshiba Canvio Basics), Amazon Basic USB Hub mit 4 Ports.
Die beiden Festplatten habe ich zur Datensicherung am Raspberry über mdadm als Raid1 Verbund eingerichtet. Hierzu gibt es zahlreiche sehr gute Tutorials. Allerdings sollte man beachten, dass bei einem Reboot der Kernel gestartet wird noch bevor sich die USB devices gemeldet haben. Ein rootdelay hilf hier weiter. (hat lange gedauert bis ich das gecheckt hab 😀 )
Das Einrichten von OCRmyPDF und Recoll hat super funktioniert. Allerdings habe ich noch ein paar zusätzliche Einstellungen vorgenommen, die eventuell nützlich sein könnten. Und zwar habe ich in der run.sh in Zeile 30 hinter OCRmyPDF.sh noch die Optionen „-d“ für das Geradeziehen der eingescannten Bilder und „-l deu“ für Deutsch hinzugefügt. Bei Letzterem muss vorher noch die deutsche Sprachdatei für tesseract installiert werden (tesseract-ocr-deu). Vor allem das Geradeziehen der Bilder ist für die Untere Hälfte des Dokuments sehr hilfreich bei der Texterkennung. 😉
Bei der Recoll Web Oberfläche hat mich gestört, dass ich über den Hyperlink nicht auf das Dokument zugreifen konnte. ==> Anpassung der /home/pi/recoll-webui/views/result-tpl
Zeile 11 sieht bei mir folgendermaßen aus:
[{{d[‚label‘]}}]
Die Recoll Startseite rufe ich via InternetExplorer auf und lege die Seite als „Vertrauenswürde Seite“ in den Einstellungen unter „Internetoptionen“ –> „Sicherheit“ an. Und schon öffnet sich beim Click auf das entsprechende Suchergebnis das entsprechende PDF in einem neuen Tab.
Noch eine kurze Sache zum Brother MFC. Hier gibt es leider keine Einstellung um die gescanten Blätter in einzelnen PDF Dokumenten abzulegen. Wen das stört, kann sich mit pdftk behelfen und so die erzeugten PDFs wieder zerstückeln. Ich habe das Ganze gleich in der run.sh eingebunden.
Achja un den Brother musste ich via FTP anbinden. Samba hat leider nicht funktioniert.
Wer noch Fragen zu den einzelnen Punkten hat kann sich gerne bei mir via Facebook melden.
Hallo Mario,
schön das es bei Dir so gut läuft. Ich habe angefangen das ganze hier als ein Github Projekt aufzusetzen. ( https://github.com/JuXReal/SimpleDocumentManagement ).
Ziel ist es einen einfachen Installer zu machen, damit dieses Tutorial entfällt.
Vielleicht hast Du ja Lust mit zu helfen?
Leider stecke ich gerade etwas fest. Alles wird installiert etc. Aber die Cronjobs starten nicht. Leider kenne ich mich nicht gut damit aus.
Vielleicht würdest Du ja sogar deine Verbesserungen ( Sprache etc.) commiten ?
Ich wüsste zum Beispiel nicht wie ich das als Variable einbaue. In dem Guthub Projekt gibt es eine Config Datei, zum einfachen Editieren.
PS: Ich habe Dich absichtlich nicht in FB angeschrieben, da hier alles für alle Leute einzusehen ist. Ich hoffe das ist kein Problem.
MFG
Sascha
Hi,
unhabhängig von diesem Projekt hab ich mir , ebenfalls auf Basis von OCRMyPDF ein script gebaut welches normale nicht durchsuchbare PDFs in durchsuchbare wandelt(bei mir wir auch noch jpg als format unterstützt) der text im PDF wird dann in eiener mysql Volltextsuche gespeichert und wird somit schnell suchbar. ist im Scan ein Barcode enthalten wird dieser zur Benennung und Einsortierung des PDFs genutzt(zbarimg).
ist kein Barcode vorhanden, kann man Schlagworte vorgeben die dann zur Benennung genutzt werden. Trifft nichts zu wird die Datei einfach unter Ihrem alten Namen mit Datum abgelegt.
Ausgabe erfolgt mittels einer kleinen PHP Seite, nachträgliches umbenennen und verschieben der Dateien ist möglich.
Aktueller Stand „Internal Privat Use“
(Variablenprüfung, sql injection, dateirechte. usw. noch nicht berücksichtigt)
Screenshots gibst hier…
http://oliver-amann.de/projekt-postsortierer/
PS:
Raspbery Pi 1B Portierung: geht so, 2-4 Minuten Pro Seite….
Oli
Hallo Oli,
könntest du das Script/die Scripte irgendwie online stellen?
Genau das suche ich nämlich schon eine weile 😉
Liebe grüße
Im Post hab ich doch auf meine Seite verlinkt dort ist es weitestgehen dokumentiert.
Oli
Hallo Jan,
mir sind 2 Dinge aufgefallen.
Zum einen werden keine Dateien verarbeitet, die ein Leerzeichen im Dateinamen enthalten. Hierfür habe ich beim run.sh script folgende Zeile vor dem Backup eingefügt: find /home/pi/document-vault/raw -name „* *“ -type f | rename ’s/ /_/g‘
Zum anderen sind wohl nicht immer deutsche Dictionaries für aspell installiert. Das kann mit sudo apt-get install aspell-de erledigt werden
Ansonsten super Tutorial… Funktioniert einwandfrei.
Moin, danke für den Hinweis: das Projekt lebt weiter auf http://github.com/juxreal – sobald ich die Möglichkeit habe werde ich das Git Projekt updaten . danke!
Ich danke dir für die Ergänzung! Habe ich in den Artikel übernommen.
Hallo Sascha,
ich habe heute die Installation per SDM.sh dirchgeführt.
Leider hat Step 10 nicht funktioniert. Das Zip wurde in Verzeichnis bin nicht ausgepackt. DAs musste ich manuell durchführen und danach konnte ich dann die Recoll Webui aufrufen. fyi
Gruß
Mirko
Hallo,
ich habe sämtliche Dateien unter Simple* gelöscht und von scratch noch einmal gestartet. Anschließend hat es funktioniert. Ich habe danach noch apache installiert und nun das ganze auch auf einem Webserver.
Ich habe aber leider das beschriebene Problem von recoll-webui, dass die PDF´s nicht angezeigt bzw. geöffnet werden können. Die Erweiterung von Chrome hat leider nichts gebracht. Wenn ich eine RDP Session auf den PI aufmache, dann kann ich das File öffnen. Lokal auf dem PI funktioniert es, aber nicht via Webbrowser von einem anderen Client.
Wenn jemand dieses Problem gelöst hat, dann würde ich mich freuen, wenn jemand die Lösung pasten könnte.
Danke
Gruß
Mirko
Ich habe das „ganz einfach“ gelöst. Ich habe mein Handled Ordner in /var/www gemountet.
Und dann unter Einstellungen im Webgui ( also im Browser: http://deineIP:deinPort dann oben Links glaube ich ) den Pfad zu den Dateien auf /var/www/handeld gestellt.
Dann geht das von allen Geräten aus und man braucht kein Plugin.
Ich kontrolliere das nachher noch einmal und schreibe das hier hin. Sollte ich das vergessen, erinnert mich dran 🙂
Hallo Sascha,
das habe ich nun auch so ähnlich gemacht. Ich habe es mit einem MAC getestet und dann habe ich das Problem mit /home auf dem MAC und dem SAMBA Share. Das habe ich nun auch wie Du gelöst, dass ich ein link gesetzt habe von handled nach /Volumes/handled. Nun kann ich via SAMBA mounten auf dem MAC nach /Volumes/handled und ich kann das PDF Dokument aufrufen, da es jetzt lokal auch unter /Volumes/handled zu finden ist. In Recoll habe ich vorsichtshalber noch den Index nach /Volumes/handled verschoben.
Unter Chrome habe ich das Extension benötigt und unter Firefox via user.js.
Für Safari habe ich noch keine Lösung gefunden.
Sieht somit gut aus.
Danke
Gruß
Mirko
Das kann ich mir nicht erklärem. An diesem Punkt hatte ich noch keine Probleme. Ich schaue mir die ganze Geschichte noch einmal an.
Hallo zusammen. Ich hab mir das jetz auch mal installiert und den gleichen Fehler wie Florian oben erwähnt hat. Bekomm ne Fehlermeldung wegen der Resolution. Gibt es da inzwischen ne Lösung? Desweiteren ist mir noch aufgefallen wenn ich über remote auf dem PI bin um das Recoll einzurichten bekomm ich beim Indexieren auch ne Fehlermeldung in der Konsole.
:2:../index/indexer.cpp:298:ConfIndexer::createAspellDict: aspell init failed: Could not open shared library [/usr/lib/libaspell.so] [/usr/lib/libaspell.so.15] [/usr/lib/libaspell.so.16] : /usr/lib/libaspell.so.16: cannot open shared object file: No such file or directory
Bei mir hat es soweit gut funktioniert, nur verzweifle ich total an den Umlauten. Ganz egal, was ich in /home/pi/.recoll/recoll.conf als „defaultcharset“ eintrage – ich kriege die Umlaute in Dateinamen nicht korrekt angezeigt und daher auch nicht gesucht. Genauer: bereits beim Suchen des Pfades wird mir bspw. Steuererklärung als „Steuererklärung“ angezeigt. Daher ist wohl auch nicht erstaunlich, dass das in der Suche nicht besser klappt. Auch im Terminal stimmen die Sonderzeichen nicht, dagegen passt es in Leafpad oder pcmanf (Dateimanager). In der raspi-config habe ich unter locale sowohl die DE-ISO…, DE-UTF8, als auch die en_GB_UTF8 aktiviert – ist das vielleicht irgendwie falsch? Danke Euch!
Oh, hat sich bereits erledigt, das lag nicht an Recoll, sondern ich hatte fälschlicherweise die locale nicht korrekt auf de_DE.UTF-8 eingestellt (lässt sich einsehen mit „cat /etc/default/locale“)
Aber dennoch: wenn ich in der recoll-webui als Verzeichnis eines mit Umlauten auswähle (Bspw. folder „Kontoauszüge“), dann kriege ich folgenden Fehler:
UnicodeDecodeError(‚ascii‘, ‚ dir:“Steuer/Kontoausz\xc3\xbcge 2014″ ‚, 22, 23, ‚ordinal not in range(128)‘)
Gibt es da ein Mittel gegen? Ist nicht wirklich schlimm, aber lästig.
Ansonsten ein Tipp meinerseits, um auf die gefundenen Dateien über die webui auch tatsächlich zugreifen zu können: FTP!!
Kurzgesagt: ich habe das gleiche Verzeichnis einfach über FTP im Intranet freigegeben und anschließend im Browser unter Settings/Locations einfach „ftp://192.168.178.61:21“ eingetragen, also die IP des Raspi. Beim ersten Anklicken müssen dann nur noch die Zugangsdaten für FTP eingetragen und gespeichert werden und fertig! PDF/JPG öffnen sich direkt im Browser, andere Dateien meist als Download.
Das ganze läuft dann auch per Smartphone (jedenfalls Android), allerdings bei mir nur unter Firefox. Weder der Systembrowser noch Chrome noch Dolphin laufen mit dieser Lösung, aber was solls…
Juhu, auch das ist lösbar, in der Datei webui.py muss Zeile 162 (!!) ausgetauscht werden durch die folgende:
qs += “ dir:\“%s\“ “ % q[‚dir‘].decode(‚utf-8‘)
Quelle: https://github.com/koniu/recoll-webui/issues/26
Hi, viele Dank für dein Hinweis. Ich bin gerade umgezogen und noch etwas busy. Ich werde eure Hinweise mal ins Git schubse . Vielen Dank!
Guten morgen,
vielen Dank für eure Hinweise. Ich habe soweit alles in das Git übernommen.
Einzig der letzte Teil, das habe ich noch nicht hinbekommen.
Aber das kommt noch!
Mich würde mal interessieren, ob zu diesem Artikel nicht eine „Fortsetzung PDF OCR mit Raspi 2016“ sinnvoll wäre, der beim Stand der aktuellen Version beginnt, denn seither scheint sich viel getan zu haben, wie die Diskussion allein zeigt.
Was bekomme ich wohl, wenn ich gemäß der obigen Erst Anleitung installiere?
Was aus den Kommentaren ist bereits in die Anleitung eingeflossen, was nicht?
Hintergrund meiner Fragen/Anregungen:
Ich denke, dass mittlerweile fast alle HP MFP zumindest der Laserjet Serien in ein Verzeichnis Raspi/NAS Verzeichnis JPG oder PDF schreiben können, so dass dann der Raspi automatisch loslegen könnte, das PDF mit einem OCR Layer und evtl. Volltextindex zu erstellen. Nur geht das auch bei mehrseitigen PDF und wann beginnt der Raspi seine Arbeit, wenn es 20 Seiten sind, die der HP scannt und liefert als PDF?
Legt der Raspi sofort los oder wartet der, bis die Datei nicht mehr „in use“ ist?
Was es hier auf dieser website mit den Umlauten auf sich hat, muss ich noch evaluieren, denn mal war die Rede vom Dateinamen („Steuererklärung“) und mal von der OCR Erkennung an sich.
Ich hoffe, dass das eine tragfähige Solution bereits ist oder wird.
Dann wird das Ganze für HP interessant, zumindest in der Vermarktung von deren MFP, denn HP hat momentan nur deutlich teurere, aber auch leistungsfähige HP Digital Sender zur Digitalisierung im Angebot, aber nichts für den Heimgebrauch bzw. Small Business.
Zur Performance:
Mit welchem RaspBi Modell und welchem Overclocking wurde gearbeitet?
Darf der Pi 3 einen großen Fortschritt erwarten?
Erst einmal Danke für diese schöne, praktische Idee, an der ich vor 17 Jahren mit Entwicklern von HP aus Bergamo (Italy) einst arbeitete und anno 1998 auf einer Messe war. In 1999 gab es von Acrobat ein Produkt namens Acrobat Capture, wo man pro OCR erkannter Seite zu zahlen hatte. Das dauerte damals etwas über 1 Minute auf IBM Highend Laptop / PC, so meine ich, u.a. gut 1000 Buchseiten einzulesen und mit OCR Layer zu versehen. Von daher ist 1 Minute für einen 35€ Rechner doch super.
Nochmals
DANKE…
Guten Morgen,
ich habe einge Änderungen aus den Kommentaren auf Guthub übernommen.
Was ich nicht hinbekommen haben, waren die Umlaute (installieren des deutschen sprachpaketes).
Das war mein erstes bash Porjekt und der Syntax fällt mir echt schwer.
(ZAUNPFAHL 🙂 )
Stand derzeit:
Umlaute konnen nicht gesucht werden (Steuererklärung) Ä. Wobei Steuererklärung auch richtige treffer liefert. Ich suche eigentlich immer nach Nummern ( Steuernummer, ID, etc).
Ich würde mich aber wie bolle freuen, wenn sich jemand findet der etwas mithilft 🙂
Die Angabe:
2-3 Minuten pro Seite beruht auf einen Raspberry B ohne übertaktung. Mit übertaktung geht es viel schneller.
Wobei ich auch da sagen muss:
In der Regel suche ich nicht direkt nach einem Dokument das gerade gescannt wurde.
Bearbeitung:
Alle Scanner die ich betreut habe, speicher eine .tmp Datei und bennen sie um sobald alles fertig ist. Erst wenn die Datei .pdf/.tiff ist wird sie bearbeitet.
Ansonsten freue ich mich über jede Anregung.
Hier ein Beispielbild: Passwort für den Link “ OCR “
https://www.juxcloud.de/owncloud/index.php/s/EH7wG8qG8nloiry
Habe natürlich alles nachgereicht 🙂
Der Zugang erfordert ein Passwort.
Noch ein Nachtrag bzgl. FTP und anderen Standardeinstellungen. Diese lassen sich im Verzeichnis ./recoll-webui/views/settings.tpl nämlich teilweise voreinstellen. Einmal gepeichert werden diese Werte als Cookie gespeichert, was auf dem PC kein Thema sein sollte, ggf. aber auf mobilen Geräten. Hier lief bei mir nur Firefox (Android) sauber. Falls diese Einstellungen zurückgesetzt wurden, reicht ein Tipp auf „settings“ und dann auf „save“, damit erübrigt es sich dann, alle Einstellungen manuell nochmal vorzugeben. Hier ein paar geänderte Zeilen aus der settings.tpl, wie sie bei mir gut laufen:
Zeit (time format string)
Speicherort
%for d in dirs:
lokal gespeichert auf {{d}}
%end
Die englischen Begriffe innerhalb und lassen sich hier nebenbei auch leicht ins Deutsche übertragen…
Unter value ist die IP, ggf. gefolgt vom entsprechenden Unterverzeichnis (ftp://192.168.178.61:21/Dateien) einzutragen, der USB-Stick muss dazu natürlich via FTP erreichbar sein. Einfach testen, der richtige Wert sollte schnell ermittelt sein!
Guten Morgen, das ist auch eine guter Weg.
Ich habe Apache installiert, das /handled Verzeichnis nach www gemountet und in den Settings http://192.168.1.200 (also die Ip) eingetragen.
Läuft auf allen Mobilen Geräten, auch via VPN etc.
Hallo, weiß nicht ob ihr hier noch online seid aber eine Frage habe ich noch zu dem Thema Dateien öffnen aus der Weboberfläche und zwar habe ich das Verzeichnis handled in das /var/www/handled gemountet aber wenn ich das dann öffnen will steht dann da das ich nicht die erforderlichen Rechte habe. Hat einer ne Idee was ich noch machen kann?
Hallo, klar sind wir online :-). sudo chmod 777 /handled sollte erst einmal helfen. Vielleicht auch 775 kenne mich damit nivht so aus. Du musst nur sicherstellen, das du nur im LAN bist.
Guten Tag,
wie kann man bei dem Komplet Image eine Festplatte hinzufügen, oder den Speicherort ändern? Ich danke schon mal für die Unterstützung.
Ui das ging unter: Klar ganz einfach wie immer bei Linux (Jan hat ein Guide).
Das Laufwerk mountest Du nach www/handled oder so.
Aus dem Kopf heraus bin ich über fragt.
Hallo,
nutze das Projekt seit einiger Zeit ohne Probleme auf meinem Laptop.
Unter Neuinstallation von debian 9 funktioniert OCRmyPDF (1.1) nicht mehr — unter debian 8 gings noch — , wahrscheinlich weil nun irgendwelche Abhängigkeiten verletzt sind bzw. Pakete fehlen. Einen Fehler konnte ich durch Installation durch python-reportlab beheben, nun aber:
File „./src/hocrTransform.py“, line 10, in
import Image, re, sys
ImportError: No module named Image
Die unter Step 3 angegebenen Pakete gibt es teilweise nicht mehr, etwa oracle-java7-jdk. Es wäre super wenn der Step 3 mit debian 9 äquivalenten Pakete aktualisiert werden könnte/genannt werden könnte. Bzw. mittlerweile gibt es ja OCRmyPDF 3.0, ist es wirklich weiterhin so, dass die (sicher verbesserte) Version für das Projekte nicht alternativ genutzt werden kann?
Vielen Dank für Hilfe/Tipp jeder Art.
Ich habe die Scripts von Jan noch ein wenig erweitert. Mein Ziel war es, das PDF mit OCR/TXT schon einigermaßen sinnvoll zu benennen. Die Idee: eine Wortliste wird im PDF gesucht und in der Reihenfolge der Funde wird das File dann benannt und um das aktuelle Datum ergänzt.
Das Script:
———————————— Anfang
#!/bin/bash
# Check lockfile
if [ -f newname.lock ]
then
echo „—– Script is already running —–“
exit
fi
date +%s > newname.lock
# Scipt will search for predefined words by using pdfgrep and rename the file.
# Define Wordlist – content and order will determine the new file name
´word=(telekom unitymedia mainova süwag aldi amazon adac gemeinde versicherung hausrat haftpflicht miete vertrag auszug rechnung beitrag zeugnis lohn finanzamt steuererklärung beleg quittung reservierung)
# Start searching for keywords and rename
echo „—– starting renaming —–“
unset newname
for i in `ls /home/pi/document-vault/handled/ScanDoc*.pdf | tr ‚\n‘ ‚\0‘ | xargs -0 -n 1 basename`;
do
wordlimiter=0
for item in ${word[*]}
do
pdfgrep -ic $item /home/pi/document-vault/handled/$i > /dev/nul
pdfgrepreturn=$?
if [ $pdfgrepreturn == 0 ];
then
# echo $item $pdfgrepreturn
newname=“$newname-$item“
wordlimiter=$((wordlimiter + 1))
if [ $wordlimiter -gt 5 ];
then
break
fi
fi
done
newname=${newname:1}
mv /home/pi/document-vault/handled/$i „/home/pi/document-vault/handled/$newname-$(date ‚+%Y%m%d‘).pdf“
echo “ Renaming finished. Renamed from $i to $newname-$(date ‚+%Y%m%d‘).pdf“
unset newname
done
rm newname.lock
echo „—– Finish —–“
———————————— Ende
In run.sh muss dann noch eine Passage (die Schleife mit den OCRmyPDF aufrufen) angepasst werden:
———————————–Anfang
for i in `ls /home/pi/document-vault/tmp/*.pdf | tr ‚\n‘ ‚\0‘ | xargs -0 -n 1 basename`;
do sh /home/pi/document-vault/OCRmyPDF/OCRmyPDF.sh -d -l deu+eng /home/pi/document-vault/tmp/$i /home/pi/document-vault/handled/$i &&
/home/pi/document-vault/newname.sh &&
echo “ OCR finish from $i“
done
————————————— Ende
Im clean.sh dann noch für die Bereinigung beim Neustart
rm newname.lock
einfügen.
Die Güte der Wortliste (Inhalt und Reihenfolge) bestimmt den neuen Dateinamen.
(Vielen Dank an meinen Freund für die tatkräftige Unterstützung bei der Umsetzung.)
Hallo Udo,
das hört sich ganz gut an was du da vor hast!!!
Habe allerdings noch ein paar Fragen zu deinem Vorschlag und zwar hast du im ersten Teil einen ganz neuen Script erstellt oder das nur in den run.sh eingefügt und den Rest wo OCR gestartet wird und so gelöscht?
Gruß Berthold
Hallo,
* „OCRmyPDF … Wir benötigen die Version 1.1“ – gilt das noch?
* Ist die Anleitung 2018 allgemein noch gültig?
* Ist das völlig ohne GUI machbar/installierbar/konfigurierbar?
Das würde mich auch interessieren ob die Anleitun und das Programm noch funktioniert.
Ich hab es nach dieser Anleitung installiert aber die PDFs werden nur ins Backup Verzeichnis verschoben sonst passiert garnichts.
Gruß Thomas
1) Erst einmal vielen Dank an Jan, dass er so gute Anleitungen geschrieben hat.
2) Ja, das erweiterte Script (basiert auf dem von Jan) läuft komplett ohne GUI. Man kopiert ein File in den Ordner raw und im Ordner handled kommt das prozedierte File raus
3) Man muss natürlich noch einen cronjob angelegt haben, der das script aufruft.
4) Hier noch einmal das Script, wie es bei mir läuft:
—————–Scriptanfang
#!/bin/bash
# Check lockfile
if [ -f run.lock ]
then
echo „—– Script is already running —–“
exit
fi
date +%s > run.lock
# Definition of Word-List
wordarray=(rechnung lieferschein ford volkswagen diesel vertrag finanzamt)
# Clean files in raw directory and create a backup from input files and move files for ocr to tmp
echo „—– Raw file renaming and start process —–“
find /home/pi/document-vault/raw -name „* *“ -type f | rename ’s/ /_/g‘
rename ‚y/A-ZÄÖÜ/a-zäöü/‘ /home/pi/document-vault/raw/*
cp /home/pi/document-vault/raw/* /home/pi/document-vault/backup
mv /home/pi/document-vault/raw/* /home/pi/document-vault/tmp
# Convert .tif to .pdf
echo „—– Get the .tif and convert —–“
for i in `ls /home/pi/document-vault/tmp/*.tif | cut -d. -f1`;
do tiff2pdf -o $i.pdf $i.tif;
echo “ converting $i.tif“
rm $i.tif;
done
# Convert .jpg to .pdf
echo „—– Get the .jpg and convert —–“
for i in `ls /home/pi/document-vault/tmp/*.jpg | cut -d. -f1`;
do convert.im6 $i.jpg -resample 100 -page A4 $i.pdf;
echo “ converting $i.jpg“
rm $i.jpg;
done
# Convert .jpeg to .pdf
echo „—– Get the .jpeg and convert —–“
for i in `ls /home/pi/document-vault/tmp/*.jpeg | cut -d. -f1`;
do convert.im6 $i.jpeg -resample 100 -page A4 $i.pdf;
echo “ converting $i.jpeg“
rm $i.jpeg;
done
# Start ocr the documents
echo „—– Starting OCR —–“
echo „—– Note: 2-5 Minutes per page! Not file —–“
for i in `ls /home/pi/document-vault/tmp/*.pdf | tr ‚\n‘ ‚\0‘ | xargs -0 -n 1 basename`;
do sh /home/pi/document-vault/OCRmyPDF/OCRmyPDF.sh -d -l deu+eng /home/pi/document-vault/tmp/$i /home/pi/document-vault/tmp2/$i && echo “ OCR finish from $i“ && rm /home/pi/document-vault/tmp/$i
done
# Scipt will search for predefined words by using pdfgrep and rename the file.
# Start searching for keywords and rename
echo „—– Starting renaming —–“
for i in `ls /home/pi/document-vault/tmp2/*.pdf`;
do
unset newname
wordlimiter=0
for item in ${wordarray[*]};
do
pdfgrep -ic $item $i
pdfgrepreturn=$?
if [ $pdfgrepreturn == 0 ];
then
echo $item $pdfgrepreturn
newname=“$newname-$item“
wordlimiter=$((wordlimiter + 1))
if [ $wordlimiter -gt 5 ];
then
break
fi
fi
done
newname=“${newname:1}-$(date ‚+%Y%m%d-%H%M%S‘).pdf“
mv $i /home/pi/document-vault/handled/$newname
echo “ Renaming finished. Renamed from $i to $newname“
done
# Remove raw files from ocr layered files and clean temp and backup files
find /home/pi/document-vault/backup -iname „*“ -mtime +2 -delete
find /home/pi/document-vault/OCRmyPDF/tmp -maxdepth 4 -iname „*“ -mtime +2 -delete
# rm /home/pi/document-vault/tmp/*
rm run.lock
echo „—– Finish —–“
—————–Scriptende
Hallo,
habe nun die Installation hinbekommen.
Leider funktioniert der Script bei mir nicht.
Ich musste aus mehren Quellen eine neuen zusammen basteln.
Aber nun funktioniert OCR „Happy“
Jetzt kommt noch die Königsklasse!
Vielleicht kann mir ja jemand weiter helfen.
Ich kann leider nicht zweiseitig einscannen nun möchte ich per Script die beiden PDFs im Reißverschluss verfahren zusammenfügen.
Dokument 1 Seiten: 1,3,5,7,9 (Vorderseiten)
Dokument 2 Seiten: 2,4,6,8 (Rückseiten)
Mit PDFsam funktioniert das zusammenzufügen ja schon (pdfsam-console -f 1.pdf -f 2.pdf -o ./12.pdf concat ).
Nur werden da die Seiten hinten angehängt.
Kennt jemand eine lösung
guck mal nach pdftk für den raspi – damit kann man pdf manipulieren etc.
Hallo,
kann man das Ganze auch ohne Desktop auf einem Raspberry Pi instllieren ? Bei Step 12 bleibe ich an dem recoll Befehl zum einrichten hängen. Leider gibt es auf meinem RasPI 3 keinen recoll Befehl. Welchen Desktop muss ich dazu installieren.
Was muss ich bei meinem „Linux raspberrypi 4.14.79-v7+ “ Lite – Raspbian Stretch Lite nachinstallieren um den gewünschten Desktop zu bekommen ?
Dank und Gruss
Timo Widmann
Hallo Timo,
siehe Step 9, hier wird erst recoll installiert. Wenn Du das nicht brauchst, einfach weglassen; ist für das OCR selbst nicht notwendig, aber für die Dokumentenverwaltung
Hallo Ihr Entwickler,
ich habe jetzt versucht nach der Anleitung diese Lösungumzusetzen.
Jetzt habe ich noch zwei Fehler welche ich nicht lösen kann.
HAt jemand einen Tipp?
1. der Crontab
@reboot screen -dmS RecollWebGui bash -c „cd /home/pi/document-vault/recoll-webui && ./webui-standalone.py -a 192.168.178.XX -p 8080“
läuft nicht. Aber per Console funktionert die Webseite.
2. Wenn ich auf der Webseite mit und ohne Suchbedingung auf „Search“ klicke, erhalte ich folgende Fehlermeldung:
Error 500: Internal Server Error
Sorry, the requested URL ‚http://192.168.178.98:8080/results?query=*&dir=%3Call%3E&after=&before=&sort=mtime&ascending=0&page=1‘ caused an error:
Internal Server Error
Exception:
AttributeError(„‚module‘ object has no attribute ‚connect'“,)
Traceback:
Traceback (most recent call last):
File „/home/pi/document-vault/recoll-webui/bottle.py“, line 744, in _handle
return route.call(**args)
File „/home/pi/document-vault/recoll-webui/bottle.py“, line 1479, in wrapper
rv = callback(*a, **ka)
File „/home/pi/document-vault/recoll-webui/bottle.py“, line 2850, in wrapper
result = func(*args, **kwargs)
File „/home/pi/document-vault/recoll-webui/webui.py“, line 223, in results
res, nres, timer = recoll_search(query)
File „/home/pi/document-vault/recoll-webui/webui.py“, line 170, in recoll_search
db = recoll.connect(config[‚confdir‘])
AttributeError: ‚module‘ object has no attribute ‚connect‘
Ich hoffe es gibt Hinweise. Danke und Grüße aus Sachsen.
Hallo ich finde das Projekt super , es wäre klasse wenn es Geupdatet würde es gibt nicht viele Projekte die so simple und gut sind. Ein remake wäre echt klasse und würde wahrscheinlich vielen helfen.