Bewegungsmelder sind relativ einfache Systeme, Schnittstellen für Computer sind jedoch relativ selten und teuer oder erfordern elektronische Ausrüstung. Mit einer einfachen Webcam geht es auch unter Linux.

Webcam einrichten

In der Ubuntu-Community-Hilfe steht, wie man eine Webcam grundsätzlich zum Laufen bekommt. Für meine Zwecke verwende ich eine Logitech QuickCam Messenger, die man als OEM-Ware bereits unter 25 EUR bekommen kann. Diese funktioniert unter neueren Ubuntu-Varianten allerdings nur unter dem Video4Linux-Kompatibilitätstreiber. Das ist jedoch keine größere Hürde…

Am besten liest man die Ubuntu-Community-Hilfe und testet cheese und andere Programme, ob die Kamera funktioniert.

Grundkonzept Bewegungsmelder

Die Grundidee ist folgende: Man kann die Webcam dazu nutzen, periodisch Standbilder zu schießen. Vergleicht man nun zwei Standbilder miteinander, kann man anhand der Unterschiede feststellen, ob eine Bewegung im Raum stattgefunden hat.

Dazu benötigen installieren wir zunächst ffmpeg order avconv:

Neuere Ubuntus sollten avconv statt ffmpeg installieren:

Ein Kurzer Test verrät, ob die Kamera funktioniert:

Falls es Fehler gibt, kann man auch folgendes ausführen:

Damit wird die besagte Kompatibilitätsbibliothek geladen. Es sollte sich eine schönes Videobild im Verzeichnis befinden, das den Namen out.jpg trägt.

Falls das geklappt hat, haben wir es fast schon geschafft!

Motiontrack installieren

Motiontrack ist eine Linux-Software, welche Bewegungen bzw. Unterschiede in Bildern errechnen kann. Leider ist die Software nicht als Ubuntu- oder Debian-Paket verfügbar und wir müssen es selbst bauen. Dafür installieren wir zunächst die wesentlichen Teile:

(Anmerkung: wget und checkinstall müssen nicht zwingend installiert werden, wenn man das Paket anders holen und bauen will. libgd2-xpm-dev kann durch libmagick++-dev oder graphicsmagick-libmagick-dev-compat ersetzt werden, wenn man statt gd2 ImageMagick bzw. GraphicsMagick einsetzen will)

Dann holen wir uns Motiontrack und entpacken es:

Nun können wir die Installation beginnen:

Checkinstall ermöglicht das Erzeugen von Debian-Paketen aus einem build-Verzeichnis heraus. Wenn alles glatt läuft, sollte motiontrack installiert sein (ggf. mit which motiontrack prüfen, sollte in /usr/local/bin/motiontrack sein).

Bewegungsmelder basteln

Ein kleines Skript verdeutlicht nun die Funktionsweise des Bewegungsmelders:

Dieses Skript können Sie kopieren, als motiontracker.sh speichern und per chmod +x motiontracker.sh ausführbar machen. Gegebenenfalls müssen noch Einstellungen an ffmpeg/avconv und motiontrack vorgenommen werden, um alles richtig laufen zu lassen.

Was macht das Skript? Es wird eine Endlosschleife erzeugt (die mit Strg+C unterbrochen werden kann), in der zuerst das aktuelle Datum ausgegeben wird. Dann wird ffmpeg/avconv aufgerufen und ein Bild von der Kamera geholt. Dieses wird unter /tmp/pic2.jpg gespeichert. Nach dem Vergleich wird dieses Bild nach /tmp/pic1.jpg verschoben werden. Zunächst aber vergleicht Motiontrack die beiden Bilder (falls sie existieren). Per head -n 1 wird lediglich die Anzahl der Unterschiede ausgegeben.

Die Ausgabe des Skripts, aufgerufen per ./motiontracker.sh sollte etwas in der Art ausgeben:

Zuerst wird das aktuelle Datum angezeigt, dann die Bewegungsskala. Deutlich sichtbar ist hier, dass bei Bewegungen der Wert deutlich über 100 ansteigt, bei fehlender Bewegung dümpelt er deutlich unter 100 herum. Mein Rechner braucht übrigens eine Weile zum extrahieren der Bilder per ffmpeg/avconv. Falls das Abfragen zu schnell gehen sollte, kann man den auskommentierten sleep-Befehl unten im Skript verwenden, um das Skript etwas auszubremsen.

Dieses Skript ist lediglich ein kleiner Test, zeigt aber die Möglichkeiten von Webcam, ffmpeg/avconv und motiontrack. Will man nun automatisierte Reaktionen des Skripts erzeugen, sind einige Dinge denkbar:

  • Per netcat könnte die Anzahl der Bewegungsvektor an einen entfernten Rechner oder eine Anwendung geschickt werden, die an einem Socket lauscht. Dazu müsste man unter dem zweiten echo bswp. echo $MOTION | netcat -u 192.168.0.99 2000 eingeben, um ein UDP-Paket mit dem Vektor zu verschicken.
  • Man könnte das 2. Bild auch per Mail verschicken, um zu z.B. sehen, ob die Katze wieder einmal auf dem Drucker schläft: "echo "Katze auf Drucker!" | mailx -s 'Katze auf Drucker!' meine@mail.de -a /tmp/pic2.jpg".

Nun ja, einige kleine Ideen…

P.S.: Ein anderes, interessantes Projekt ist möglichweise Motion, welches offenbar die obigen Prozesse in einem Paket zusammenfasst und noch viel, viel mehr kann.