Video-Livestream mit der Raspberry Webcam + motion

Nachdem wir zuletzt mit dem Raspberry Pi und einer alten Webcam ein einzelnes Foto aufgenommen haben, soll nun auch ein Video-Stream mit der Kamera aufgebaut und bereitgestellt werden. Dazu verwende und installiere ich das Programm motion:

> sudo apt-get install motion

Während der Installation, die durch umfangreiche Systemmeldungen begleitet wird, erfolgt unter anderem auch die Anlage eines eigenen Benutzers “motion” in eurem System.

Aufbau

Die Kamera wird wieder per USB mit dem Raspberry Pi verbunden. Ob sie erfolgreich erkannt wird, kann mit dem Befehl lsusb überprüft werden. Die spezifischen Eigenschaften eurer Kamera können mit dem video4linux-control (v4l2)-Befehl angezeigt werden:

> lsusb
Bus 001 Device 00x: ID 0xxx:xxxx Creative Technology, Ltd Live! Cam...
> v4l2-ctl -V
Format Video Capture:
Width/Height : 640/480
Pixel Format : 'YUYV'
...

Konfiguration

Motion stellt einen eigenen Server für den Video-Stream bereit. Die Konfiguration dieses Servers geschieht über die Datei motion.conf:

> sudo vim /etc/motion/motion.conf

Diese Konfigurationsdatei umfasst rund 700 Zeilen und ist in einzelne thematische Abschnitte unterteilt, jeder einzelne Parameter ist gut dokumentiert. Nehmt euch gerne einmal die Zeit und schaut diese Datei vollständig durch, um alle möglichen Einstellungen kennenzulernen.

Die wichtigsten Parameter für einen ersten Start sind

  • stream_localhost off – So könnt ihr auch von außen auf den Video-Stream zugreifen
  • stream_port XXXX – Der gewünschte Port für die Adresse des Video-Streams
  • v4l2_palette, width, height und framerate – In diesen Parametern müssen die von v4l2-ctl -V (vgl. oben) für eure Kamera ausgegebenen Werte eingetragen werden

Start des Motion-Servers

Ihr solltet den Motion-Server nun bereits starten können, als Service über den Befehl:

> sudo service motion start

Ist der Start erfolgreich, so seht ihr nun unter der URL eures Raspberry Pi und dem unter stream_port angegebenen Port, also beispielsweise http://192.168.1.50:8081, bereits den Videostream eurer Kamera.

Im Fehlerfall

Falls kein Video zu sehen sein sollte, kann es unter anderem an Darstellungsproblemen je nach verwendetem Browser liegen, testet hier auch einmal mit Alternativen. Sollte der Service überhaupt nicht starten, es werden Fehlermeldungen am Raspberry Pi ausgegeben werden oder ähnliches, so könnt ihr motion auch direkt über die Kommandozeile für eine erweiterte Ausgabe der Meldungen des Motion-Servers starten:

> sudo motion start

Zusätzlich kann auch der Parameter log_level temporär in der Konfigurationsdatei auf einen höheren Wert gesetzt werden. Achtet bei den Ausgaben speziell auf das erste Vorkommen von fehlerhaften, mit [ERR] markierten Meldungen.

Betrieb im Hintergrund

Wenn der Motion-Server korrekt konfiguriert ist und der Server erfolgreich startet, kann das Programm auch als Dämon im Hintergrund des Systems gestartet werden. Dazu muss wieder in der gleichen Konfigurationsdatei (/etc/motion/motion.conf) zunächst der Parameter daemon_on auf on gestellt werden und dann in der Datei, die den Dämon-Betrieb steuert (/etc/default/motion) ein yes eingetragen werden

Konfiguration per Webzugriff

Der laufende Motion-Server kann auch bequem über einen Webzugriff gesteuert werden. Dazu müsst ihr

  • in der Konfigurationsdatei den Parameter webcontrol_localhost analog zu oben auf off stellen um den Zugriff von außen zu ermöglichen,
  • den gewünschten Port in webcontrol_port eintragen
  • und gegebenenfalls noch einen Benutzer und Passwort in webcontrol_authentification vorgeben.

Bei Aufruf der URL des Raspis erscheint nun unter dem webcontrol-Port eine Website (beispielsweise http://192.168.1.50:8086), auf der unter anderem die einzelnen Parameter der Konfiguration angezeigt und geändert werden können (Klick auf “config” -> “list”), ein Snapshot aufgenommen werden kann (Klick auf “action” -> “snapshot”) oder die Bewegungsüberwachung an- und ausgeschaltet werden kann (unter “detection” -> “pause”).

 

Video Camera

Erkennen von Bewegung

Im Motion-Server ist bereits vom ersten Start ab eine Bewegungserkennung integriert und aktiv. Sobald ihr also vor eurer Kamera eine Bewegung simuliert, wird ein Schnappschuss des aktuellen Videobildes in das Verzeichnis /var/lib/motion abgelegt. Dieses Verzeichnis kann über den target_dir-Parameter in der Konfigurationsdatei festgelegt werden, beachtet dabei dass der Motion-Server die passenden Zugriffsrechte auf das Verzeichnis besitzt (über sudo chmod ug+rw, chown, chgrp motion). Die Menge der ausgegebenen Bilder kann unter anderem über den Parameter output_pictures gesteuert werden.

Bei längerem Betrieb der Kamera müssen wir darauf achten, dass dieses Verzeichnis nicht mit der Zeit vollläuft. Ältere Schnappschüsse können beispielsweise über einen cron-Job regelmäßig gelöscht werden (in etwa per find -mtime X … -exec rm {};).

Überwachung mit der Bewegungserkennung

Wann genau die Bewegungserkennung von Motion anschlägt, kann über zahlreiche weitere Parameter sehr genau eingestellt werden. Der threshold-Parameter gibt zum Beispiel die Mindestanzahl der sich ändernden Pixeln an, lightswitch verhindert einen Fehlalarm bei schnellen Lichtveränderungen und über area_detect kann die Bewegungserkennung auf bestimmte Teilbereiche des Kamerabildes eingeschränkt werden. Alternativ dazu kann über mask_file eine Schwarz-Weiss-Grafik als eigens zugeschnittene Maske für die überwachten Bildbereiche über das Kamerabild gelegt werden.

Weiter ausbauen lässt sich die Kameraüberwachung über die Tracking- und External-Commands-Sektion der Konfigurationsdatei, in der für bestimmte Ereignisse, also bei einem Bewegungsalarm oder Erstellung eines Schnappschusses, weitere vom System auszuführende Befehle festgelegt werden können. Je nach euren Wünschen könnt ihr hier also eine Email an euch als Warnung versenden, etwas ein- oder ausschalten, Grenzen sind hier nur durch die Fähigkeiten eures Systems und Netzwerkes gesetzt.

Falls ihr noch tiefergehendes Interesse an einer zuverlässigen Kameraüberwachung mit motion habt und dazu ein integriertes eigenes System aufsetzen möchtet, dann werft auch einmal einen Blick auf das Projekt motioneyeos: https://github.com/ccrisan/motioneyeos/wiki/Installation

Also dann, man “sieht” sich 😉

Quellen und weitere Informationen:
* motion-Projekt in github: github.com/Motion-Project/motion
* Artikel in der Linux-Community (2010): www.linux-community.de/Internal/Artikel/Print-Artikel/LinuxUser/2010/12/Objekte-mit-Motion-per-Video-ueberwachen

Mein Kommentar...