Notizen unter Linux scannen

Dieser Artikel beschreibt, wie man handschriftliche Notizen unter Linux einscannen und platzsparend speichern kann.
zweiversionen.png

Von Zeit zu Zeit möchte ich handschriftliche Notizen einscannen und platzsparend speichern. Speicherplatz ist zwar billig, aber spätestens dann, wenn ich die Notizen versenden möchte, hätte ich gerne eine möglichst kleine Datei. Mit den Ergebnissen meines Scanners war ich immer unzufrieden. Dann entdeckte ich Noteshrink.

Noteshrink optimiert eingescannte handschriftliche Notizen, reduziert dabei die Datenmenge und speichert das Ergebnis als handliche PDF-Datei ab. Das Skript stammt von Matt Zucker. In einem Blog-Artikel beschreibt er, wie das Programm funktioniert. Kurzgefasst identifiziert das Skript die Hintergrundfarben, isoliert die Vordergrundfarben und wandelt sie in indizierte Farben um, indem es eine Hand voll Farben definiert, die den Vordergrundfarben nahekommen.

Noteshrink lässt sich mit pip installieren. Es benötigt Python 2 oder 3, NumPy 1.10 oder neuer, SciPy, ImageMagick und das Imagemodul von PIL oder Pillow. Ich habe noteshrink in einer mit pyvenv erzeugten virtuellen Python-Umgebung mit Python 3 installiert.

Um den ganzen Prozess des Einscannens, Optimierens und Abspeicherns zu vereinfachen, habe ich ein kleines Makefile geschrieben, das Folgendes tut:

  1. Es scannt die Notiz mit Hilfe von scanimage und erzeugt dabei eine TIFF-Datei, die später gelöscht wird
  2. Es ruft noteshrink auf.
  3. Es ruft ein rename Skript auf, das nach dem Dateinamen fragt, unter dem das Endergebnis abgespeichert werden soll.
  4. Es löscht alle temporären Dateien, die nicht mehr gebraucht werden.
all: scan shrink rename delete

scan:
    scanimage --device-name='genesys:libusb:001:004' \
    --mode=Color --resolution=300 --format=tiff > scan.tiff

shrink:
    ~/py3/bin/noteshrink scan.tiff

rename:
    ./rename.sh

delete:
    rm page*.png scan.tiff

Den Gerätenamen (--device-name) erhält man mit scanimage -L. Eine Auflösung von 300dpi reicht für meine Zwecke bisher aus.

Das Rename-Skript ist extrem simpel:

#!/bin/bash

echo "Dateinamen eingeben"
read filename
mv output.pdf $filename

Das ist auch schon alles. Das Makefile und das Rename-Skript liegen beide in einem Ordner, in dem ich die Notizen speichern will. Ich muss also bloß das Papier auf den Scanner legen, in den Ordner wechseln und make aufrufen.

$ cd Notizen
$ make
scanimage --device-name='genesys:libusb:001:004' --mode=Color --resolution=300 --format=tiff > scan.tiff
~/py3/bin/noteshrink scan.tiff
opened scan.tiff
  getting palette...
  applying palette...
  saving page0000.png...
  done

running PDF command "convert page0000.png output.pdf"...
  wrote output.pdf
./rename.sh
Dateinamen eingeben
Beispiel.pdf
rm page*.png scan.tiff

Das Ergebnis

Das Ergebnis ist überzeugend. Das Bild unten zeigt ein Beispiel. Die Notiz erfolgte auf der Rückseite eines bereits bedruckten Blattes. Beim Einscannen scheint die beschriebene Rückseite durch. Noteshrink entfernt solche störenden Elemente. Linien und Kästchen eines Kollegblocks bleiben meistens erhalten. Das Repository von noteshrink enthält weitere Beispiele.

Links der Originalscan mit 27 MB, rechts das optimierte Bild mit 101 KB.
Links der Originalscan mit 27 MB, rechts das optimierte Bild mit 101 KB.