Auf meinem Weg dahin, eine automatisierte Dokumenten-Scan-Station mit einem RaspberryPi einzurichten, habe ich einige Zeit verschwendet, bin letztlich aber zu einem brauchbaren Ergebnis gekommen.
Vielleicht hilft meine Beschreibung dir ja, damit du nicht die gleichen Fehler machst, wie ich…
Vorhaben
Vorhanden:
- Dokumentenscanner (Epson Workforce DS-310)
- Raspberry Pi (Raspberry Pi Zero W // Raspberry Pi 3+)
- NAS (Synology DiskStation)
Ich wollte gern eine Scan-Station für Dokumente realisieren, an der ich eingehende Papierdokumente (vorwiegend im Format A4) in einen Dokumentenscanner lege, der diese dann wiederum auf Knopfdruck in einer Netzwerkfreigabe auf meinem NAS ablegt. Idealerweise – diesen Job hätte allerdings auch das NAS ausführen können – sollte dabei gleich die Texterkennung durchgeführt werden, damit die Dokumente im Anschluss durchsuchbar sind.
Raspberry Pi Zero W

Da ich noch einen Raspberry Pi Zero W herumliegen hatte, dachte ich mir, dass es naheliegend sei, das Ganze mit diesem umzusetzen. Schnell wurde mir jedoch klar, dass die meisten benötigten Bibliotheken für Rapsbian OS zu alt waren, als dass sie für mich nützlich gewesen wären: So war „SANE“ beispielsweise nur in der (Backend-)Version 1.0.27 verfügbar, der von mir eingesetzte Dokumentenscanner Epson Workforce DS-310 funktioniert allerdings erst mit neueren Versionen. (Hinweis: Mit älteren Versionen hat er nicht „gar nicht“ funktioniert, allerdings kam es zu häufigen Verbindungsabbrüchen und fehlerhaften Scans.)
Zudem schien mir die Adapter-Verbindung zwischen USB-A und Micro-USB (der kleine Raspberry Zero hat keinen großen USB-Port) nicht besonders zuverlässig zu funktionieren!
Raspberry Pi 3+

Kurzerhand habe ich dann einen Raspberry Pi 3+ eingesetzt, der bislang eine andere (wenig benötigte) Funktion in meinem Netzwerk übernahm. Auf ihm habe ich ein Ubuntu mit Hilfe des Raspberry Pi Imagers aufgesetzt und anschließend SANE installiert.
Installation von SANE
sudo apt-get update
sudo apt-get upgrade
sudo apt install sane sane-utils scanbd git imagemagick -y
(Angelehnt habe ich diesen Prozess an das Vorgehen von Chris Schuld hier: https://chrisschuld.com/2020/01/network-scanner-with-scansnap-and-raspberry-pi/)
Unter Ubuntu für den Raspberry Pi 3+ konnte ich zwar immer noch nicht die neuste Version von SANE installieren, immerhin aber die (Backend-)Version 1.1.1, die den Drucker korrekt unterstützt. (Prüfen kann man das in der Liste der unterstützten Geräte.) Im Anschluss habe ich meinen Benutzer der Gruppe „scanner“ hinzugefügt, unter der SANE arbeitet.
sudo usermod -a -G scanner <BENUTZER>
Mit folgenden Befehlen konnte ich dann schauen, ob sich der Scanner zu erkennen gibt und sogar etwas scannt:
# Listet alle USB-Geräte
lsusb
# Sucht nach Scannern am USB-Bus
sudo sane-find-scanner
# Prüft, ob der Scanner korrekt von SANE erkannt wurde
sudo scanimage -L
# Scannt ein Bild und leitet es in ein temporäres Verzeichnis um. Wer hineinsehen will, kann dies an einem Rechner mit GUI unter GIMP tun.
sudo scanimage >/tmp/out.pnm
Installation von sane-scan-pdf
Raman Gupta hat mit „sane-scan-pdf“ ein Script bereitgestellt, dass die ganze „harte Arbeit“ übernimmt, die passenden Befehle zu verketten, um tatsächlich mehrere Seiten per automatischem Papiereinzug zu einer PDF zu verketten und eine OCR laufen zu lassen. Installieren lässt es sich mit:
cd $HOME
git clone https://github.com/rocketraman/sane-scan-pdf.git
Nach kurzem Ausprobieren musste ich feststellen, dass das Script meine Scans ohne OCR mit „pnmtops“, einem Tool, dass aus dem PNM-Format PostScript Dateien erstellt, konvertiert wurde und dabei irgendwie auf der resultierenden Seite nicht korrekt positioniert wurde. Auch die Option „-nocenter“ brachte keine Abhilfe… ein Teil auf der Seite oben blieb abgeschnitten.
Ein Workaround, der für mich (gut!) funktioniert, ist der Einsatz von „tesseract“ zur Texterkennung. Damit wird mein Scan korrekt dargestellt und durchsuchbar – exakt das, was ich wollte.
Mit folgendem Script lief dann der ganze Scanvorgang wie am Schnürchen:
#!/bin/sh
now=date +"%Y-%m-%d-%H%M"
/home/<BENUTZER>/sane-scan-pdf/scan -d -r 200 -v -m Color --device "" -xo "-y 297.0" --no-default-size --ocr --language deu -o /home/<BENUTZER>/scans/scan-$now.pdf
Scannen in einen Netzwerkordner

Natürlich wollte ich die gescannten Dateien nicht lokal sondern auf einer SAMBA-Netzwerkfreigabe meines NAS ablegen. Dazu habe ich den Ordner „/mnt/scans“ erstellt:
sudo mkdir /mnt/scans
Danach musste ich die Datei „/home//.credentials/scanserver“ mit folgendem Inhalt erstellen:
username=<NAS-BENUTZER>
password=<FREIGABE-PASSWORT>
Im Anschluss habe ich noch die Datei „/etc/fstab“ bearbeitet und folgende Zeile ergänzt:
//<IP-Adresse>/scans /mnt/scans cifs user,credentials=/home/<BENUTZER>/.credentials/scanserver,iocharset=utf8,vers=2.0,_netdev,x-systemd.automount,x-systemd.after=network-online.target,noperm 0 0
Danach mussten nur noch alle Laufwerke neu gemountet werden:
sudo mount -a
Auch im obenstehenden Script, das den Scanvorgang übernimmt, habe ich dann als Zielverzeichnis die Netzwerkfreigabe und nicht länger das lokale Verzeichnis übernommen.
scanbd Alternative – mein Scanner macht seine Buttons nicht öffentlich zugänglich

Den Knopfdruck des Scanners abzufragen stellte sich dann als nächste Hürde heraus. Auf dem herkömmlichen Weg, nämlich mit scanbd, ließen sich die Buttons nicht abfragen, da der Scanner ihren Status nicht öffentlich preisgibt.
Entsprechend habe ich folgende Anleitung befolgt und versucht, es2button von Jan Ruethzu kompilieren und zu installieren.
Download von Github ins Home-Verzeichnis:
cd $HOME
git clone https://github.com/janrueth/es2button.git
Kompilieren vorbereiten (hierbei wird auch die Source vom Treiber „epsonscan2“ heruntergeladen):
cd es2button
cmake . -B build
Kompilieren:
make -C build
Debian-Package erstellen:
make -C build package
Die .deb-Datei findet sich dann in build/artifacts/
. Sie konnte dann aber noch nicht installiert werden, denn hier sollte mir die Architektur des Rapsberry Pi mit Ubuntu (ARM64) einen Strich durch die Rechnung machen. Zwar lassen sich alle Abhängigkeiten in Form von Softwarepaketen installieren, gerade der benötigte Scanner-Treiber von Epson („epsonscan2“) ist aber nicht für diese Prozessorarchitektur kompiliert, was ich dann noch selbst übernehmen musste. Zwei Stunden (ja, leider!) sollten für diesen Prozess einkalkuliert werden. Hier bin ich dieser Anleitung von Epson selbst gefolgt.
Die Quelle des Treibers hatte ich ja schon herunterladen lassen, diese musste ich mir nur noch an einen vernünftigen Ort kopieren:
cd $HOME
cd es2button/build
cp epsonscan2-<VERSIONSNUMMER>.src.tar.gz ~
tar -xvzf epsonscan2-<VERSIONSNUMMER>.src.tar.gz
mv epsonscan2-<VERSIONSNUMMER>.src.tar.gz epsonscan2
Im Anschluss konnte ich das Kompilieren/Installieren vorbereiten, indem ich die benötigten Abhängigkeiten installiert habe:
cd $HOME
cd epsonscan2
./install-deps
Weiter ging es mit:
cmake .
Das ging noch verhältnismäßig schnell (wenige Minuten), der folgende Prozess dauert dann allerdings in etwa eineinhalb bis zwei Stunden:
make
Danach konnte epsonscan2 installiert werden, das ging wieder recht schnell (wenige Minuten):
sudo make install
Mögliche Fehler – und einen Umgang damit – listet Epson übrigens hier auf.
Zurück zu es2buttons: Mit dem Scanner-Treiber als letzter fehlender Abhängigkeit konnte nun es2buttons installiert werden.
cd $HOME
cd es2button/build/artifacts
sudo dpkg --force-all -i es2button_<VERSIONSNUMMER>_arm64.deb
Nach einem Neustart mit sudo reboot now
wurden die Knopfdrücke am Scanner dann erkannt. Nun musste nur noch der Inhalt des oben gezeigten Scripts (sofern es denn abgespeichert wurde) an die entsprechende Stelle kopiert werden, damit es auf Knopfdruck ausgeführt wird:
sudo cp /home/<BENUTZER>/scanfile.sh /etc/es2button/default
Schreibe einen Kommentar