Konfiguration Videoüberwachung mit Motion
RaspberryPi: Konfiguration Videoüberwachung mit Motion Der Server Als Grundlage für den Server dient Ubuntu Server 10.04 [2]. Der spätere Überwachungsrechner benötigt weder Tastatur noch Monitor. Beim Partitionieren gilt es zu beachten, dass abhängig von der Anzahl der Kameras, der Dauer der Zeiträume und den Aktivitäten in den zu überwachenden Bereichen erhebliche Datenmengen anfallen, sodass Sie gleich zu Beginn genügend Platz für Bilder und Videos auf der Zielpartition einplanen sollten. Um den Server später aus der Ferne zu administrieren, wählen Sie bei der Frage nach der zu installierenden Software auch den SSH-Server aus. Nach der Installation des Grundsystems lohnt es sich, dieses mit sudo apt-get update, sudo apt-get upgrade auf den neuesten Stand zu bringen. Anschließend braucht es noch einige zusätzliche Pakete, bevor es an die eigentliche Konfiguration geht. Dazu zählt ntp, um die Serverzeit zu synchronisieren – So zeigen die Überwachungsvideos stets die korrekte Zeit an. Das Paket acpi-support bietet einen einfachen Weg, um den Motion-Server abzuschalten, und zu guter Letzt brauchen Sie natürlich motion selbst. Motion konfigurieren Nach der Installation ist Motion so konfiguriert, dass es nicht automatisch beim Booten als Daemon startet. Um dem abzuhelfen, setzen Sie in der Datei /etc/default/motion den Wert start_motion_daemon auf yes. Um das Programm im Daemon-Modus zu betreiben, benötigt es eine Möglichkeit, eine Systemdatei und die Bilder abzulegen. Im Beispiel kam für die Dateien die Home-Partition zum Einsatz, wo mit mkdir /home/motion und chown -R motion:motion /home/motion ein passendes Verzeichnis für die Programmdaten entstand. Jetzt geht es daran, Motion an die lokalen Gegebenheiten und Bedürfnisse anzupassen. Alle Einstellungen finden sich in /etc/motion/motion.conf. Kommen mehrere Kameras zum Einsatz, sind für deren individuelle, von den Standards abweichende Einstellungen die Dateien threadNummer.conf vorgesehen. Die Hauptkonfigurationsdatei enthält Angaben, die für alle Kameras gelten. Dazu zählen unter anderem der Speicherort der Daten, das Format des Videostreams und der Bildern, die Zugangsdaten für den Zugang über ein Webinterface oder Aktionen, die die Software bei Bewegungen auslöst. Auf dem Server verwenden Sie die Applikation über die Option daemon on, um Motion im Hintergrund zu betreiben. Die Werte für das Videogerät (videodevice /dev/video0) übernehmen Sie in der Regel ebenso wie die Schalter v4l2_palette und input. Letzteres erfordert Änderungen, wenn es sich bei den Kameras nicht um Webcams handelt, sondern um Geräte, die Sie über eine Video-Capture-Karte angeschlossen haben. Für weitere Kameras verwenden Sie die oben genannten zusätzlichen Konfigurationsdateien. Abmaße Die Punkte width und height hängen von den verwendeten Kameras ab und sollten möglichst einem Vielfachen von 16 entsprechen. Eine höhere Auflösung fängt zwar mehr Informationen ein, allerdings fallen in diesem Fall bedeutend mehr Daten an, und nicht jede Kamera unterstützt hohe Auflösungen. Experimentieren Sie bei Bedarf mit diesen Werten, um die optimalen Einstellungen zu ermitteln. Die gefundenen Werte nutzen Sie für das Maskieren, um Änderungen in bewegten, aber uninteressanten Bereichen zu ignorieren. Die Variable framerate steuert, wie viele Bilder Motion pro Sekunde aufnimmt. Standardmäßig steht hier 2 als Wert, was bedeutet, dass das Programm zwei Bilder in der Sekunde aufnimmt. Überwacht die Software enge Bereiche, dann nimmt Motion entweder gar nichts oder nur einen Schatten auf, wenn eine Person den Bereich zügig durchquert. Werte zwischen 10 und 15 Bildern pro Sekunde sorgen aber dafür, dass Motion alle Bewegungen einfängt. Der nächste Punkt, der Aufmerksamkeit verdient, ist threshold 1500. Das bedeutet, dass die Software Änderungen von 1500 Pixeln als Bewegung interpretiert. Der Wert entspricht bei einer Auflösung von 640x480 Pixeln weniger als einem halben Prozent des Bilds. Dabei mutiert schon eine vor dem Fenster hüpfende Krähe zum Filmstar, sodass hier ein höherer Wert nichts schadet. In Tests erwiesen sich Werte zwischen 3000 und 5000 Pixeln als ausreichend, um Bewegungen größerer Objekte festzuhalten. Bei Werten jenseits 15 000 marschierten dann Personen unbemerkt durchs Bild. Unter dem Abschnitt Image File Output nehmen Sie bei Bedarf Einstellungen für die Ausgabe der Bilder vor. Da es viel mehr Zeit braucht, mehrere tausend Bilder auszuwerten, als ein paar Videos anzusehen, kam im Beispiel die Option output_normal off zum Einsatz, so dass Motion vom Speichern von Bildern absieht. Die Angaben für Videos nehmen Sie direkt im folgenden Abschnitt FFMPEG related options vor. Die Variable ffmpeg_cap_new on sorgt dafür, dass Motion MPEG-Videos mit Hilfe von Ffmpeg in Echtzeit encodiert. Der Wert der Option ffmpeg_video_codec definiert das Dateiformat, in dem Videos auf dem Server landen. Schnappschuss gefällig Wünschen Sie in bestimmten Zeitabschnitten Schnappschüsse des Überwachungsbereichs, dann legen Sie das Zeitintervall in Sekunden in der Variable snapshot_interval fest. Die Variable text_right sorgt dafür, dass die Software in der rechten unteren Ecke einen Text einblendet, der in der Standardeinstellung darüber informiert, wann ein Video oder Bild aufgenommen wurde und welches interne Ereignis dies ausgelöst hat. Bei Bedarf passen Sie das Textfeld an eigene Bedürfnisse an (siehe Tabelle "OSD-Informationen". Der Parameter target_dir gibt das Zielverzeichnis an, in dem die Bilder und Videos landen. Standardmäßig legt das Programm alle Daten in /tmp ab – mit der Folge, dass Ubuntu sie nach einem Neustart von Ubuntu ins Nirwana schickt. Im Beispiel ist das nicht erwünscht, so dass hier das Verzeichnis entsprechend /home/motion/videos lautet. Über das Netz Motion kommt mit einem kleinen eigenen Webserver, mit dessen Hilfe es einen Livestream der Kameras ins Netz stellt. Wer das Feature nutzen möchte, nimmt die nötigen Änderungen in der Sektion Live Webcam Server vor. Nun mag es zwar sein, dass nur Wenige die Bilder live betrachten wollen. Bei der HTTP-basierten Steuerung (HTTP Based Control) sieht das schon wieder anders aus: Ein Zugriff von außen ergibt durchaus Sinn – etwa, um die Kameras für eine bestimmte Zeit zu deaktivieren oder deren Status aus der Ferne abzufragen. Da derartige Zugriffe vermutlich nur selten vom Überwachungsserver aus geschehen, gilt es, den Zugriff von außen zuzulassen (control_localhost off) und den Passwortschutz zu aktivieren, wofür Sie in der Zeile control_authentication das kommentierende Semikolon am Beginn entfernen und die Platzhalter username und password durch eigene Werte ersetzen. Startklar Damit ist Motion fertig eingerichtet. Bewegt sich etwas vor der Kamera, die Sie dem Programm zugeordneten haben, sollten im Zielverzeichnis einzelne Videos auftauchen. Positionieren Sie das Gerät richtig und aktivieren Sie einem Testlauf. Haben Sie die richtige Position gefunden, fixieren Sie die Webcam am besten: Oft scheitern Aufnahmen, weil Unbeteiligte unabsichtlich gegen das Kabel stoßen und so die Aufnahmeposition verändern. Einem längerer Testlauf fördert dann schnell erste Kandidaten für kritische Elemente im zu überwachenden Bereich ans Tageslicht, die zu Fehlalarmen führen. Das können sich im Wind wiegende Bäume und Sträucher oder flatternde Sonnensegel und Zelte sein. Motion bietet mehrere Möglichkeiten, diese Fehlerquellen zu beseitigen. Zum einen haben Sie die Möglichkeit, fest definierte Bereiche, die sogenannten Areas, ein- und auszublenden, zum anderen legen Sie bei Bedarf Masken über das Bild. Kamera hinzufügen Eine einzelne Kamera bringt den Motion-Server in der Regel nicht in Bedrängnis. Läuft soweit alles, fügen Sie zusätzliche Kameras mit nur wenigen Handgriffen hinzu. Sie erstellen dann für jede Kamera eine Konfiguration und binden Sie diese in die motion.conf ein. Verfügen alle Kameras über identische Auflösungen, genügen hier der Name des Geräts (videodevice) und eventuell die zugehörigen Bereiche oder Maskierungsdateien. Haben die Kameras ähnlich aussehende Bereiche im Blick und möchten Sie auf einen Blick erkennen, von welcher Kamera die Bilder kommen, entfernen Sie dazu entweder das Kommentarzeichen in der Zeile text_left oder ergänzen text_right um ein Kamera %t. Ereignisse Jede von Motion erfasste Aktivität (siehe Tabelle "Ereignisse") erlaubt eine Folgeaktion, wie etwa den Versand einer E-Mail beziehungsweise SMS oder das Ausführen eines Skripts auf dem Server. Um eine Mail zu versenden, bedarf es der Mailutils und eines kleinen SMTP-Clients wie MSMTP [3], die Sie mit sudo apt-get install mailutils msmtp msmtp-mta installieren. Aktivität Beschreibung on_area_detect Bewegung in vorher bestimmten Regionen on_motion_detected Bewegung im Bild festgestellt on_event_start Start eines Ereignisses on_event_end Ende eines Ereignisses on_movie_start Start einer Video-Aufnahme on_movie_end Ende einer Video-Aufnahme on_picture_save Abspeichern eines Bilds on_camera_lost Kamera nicht erkannt / Kontakt zur Hardware verloren Anschließend ist es ein leichtes, den Server anzuweisen, bei bestimmten Ereignissen eine Mail zu versenden, wie Listing 1 m Beispiel einer verlustig gegangenen Kamera demonstriert. Listing 1 on_camera_lost echo "Kamera %t am %d.%m.%Y um %T bei Ereignis %v verloren." | mail -s "[Motion] Kamera verloren" empfaenger@mail.provider Steuern via HTTP Motion bietet die Möglichkeit, die Software über den Browser zu steuern. So haben Sie die Möglichkeit, das Programm auch von der Kommandozeile aus zu bedienen (Abbildung 5), indem Sie die Links mit einem Werkzeug wie Wget aufrufen. Um die Software von einem anderen Rechner aus zu steuern, deaktivieren Sie wie bereits beschreiben die Option control_localhost in der Hauptkonfiguration. Standardmäßig erreichen Sie Motion über den Port 8080. Die aufzurufende URL setzt sich wie folgt zusammen: http://Server<§§>:<§§>Port<§§>/Thread<§§>/Kommandokategorie/Aktion$Parameter Hinter Thread verbirgt sich die Nummer der jeweiligen Kamera. Setzen Sie mehr als eine Kamera ein, fragen Sie über den Thread 0 die Standardeinstellungen ab und ändern diese bei Bedarf. Die Tabelle "HTTP-Aktionen" listet die wichtigsten Kategorien und Kommandos auf. Setzen Sie zum Beispiel eine Logitech Quickcam Sphere/Orbit in Verbindung mit Motion ein, ist es möglich, deren Servermotoren anzusteuern und Bewegungen zu verfolgen. Aktion Beschreibung config/list Konfiguration anzeigen config/write Konfigurationsdateien neu schreiben config/get Wert einer Option anzeigen config/set Wert einer Option ändern action/makemovie Video-Aufnahme starten action/snapshot Schnappschuss auslösen action/restart Jeweiligen Thread neu starten action/quit Thread beenden detection/status Status der Kamera anzeigen detection/start Aufnahme starten detection/pause Aufnahme pausieren detection/connection Verbindung prüfen Komfort Haben Sie den Motion-Server einmal eingerichtet und läuft dieser rund, vereinfachen einige Skripte Abruf und Anzeige der frisch hinzugekommenen Aufzeichnungen. Um neue Videos auf den Arbeitsrechner oder Wohnzimmer-PC zu holen, bietet sich das Rsync-Protokoll [4] an. Rsync überträgt nur die Daten, die sich geändert haben, wodurch erheblich weniger Datenvolumen anfällt. Das macht sich vor allem dann bezahlt, wenn Quell- und Zielrechner nicht im selben Netzwerk stehen und der Quellrechner nur über einen gewöhnlichen DSL-Anschluss mit der entsprechend dürftigen Upload-Rate arbeitet. Listing 2 zeigt ein kommentiertes Rsync-Skript, das die Videos vom Server holt und abspielt. Es speichert in timestamp.txt die Zeitstempel der bereits geholten und angesehenen Videos, sodass es nur diejenigen Videos automatisch wiedergibt, die seit dem letzten Abruf hinzu kamen. Listing 2 # Variable für Zeitstempeldatei TIMEFILE=~/timestamp.txt # Mediaplayer PLAYER=/usr/bin/mplayer # Kommandozeilenargument auswerten case $1 in # neue Ueberwachungsaufzeichnungen holen und abspielen neu) # Synchronisieren # --progress Fortschritt anzeigen # --delete Remote geloeschte Dateien auch lokal loeschen # -a Rekursiv alle Dateien holen # -v Aktuell bearbeitete Datei anzeigen # -h Für Menschen lesbare Ausgaben verwenden # -e Zu benutzende Remote-Shell rsync --progress --port=2200 --delete -avhe ssh USER@SERVER:/home/motion/videos ~/orwell # Dateien abspielen, falls neuer als Zeitstempel-Referenzdatei for FILE in ~/orwell/motion/*.swf; do if [ "$FILE" -nt "$TIMEFILE" ]; then $PLAYER $FILE # Zeitstempel der aktuell gezeigten Datei speichern touch -r $FILE $TIMEFILE else echo "$FILE bereits gesehen" fi done ;; # alle (auch die alten) Filme abspielen alle) $PLAYER ~/orwell/motion/*.swf ;; *) printf "Falscher Aufruf:\n\"$0 neu\" um neue Filme zu holen und abzuspielen\n\"$0 alle\" um al[lt]e Filme abzuspielen\n\n" ;; esac exit 0 Vor allem in "bewegten Zeiten" fallen Unmengen von Daten an, sodass die Festplatte des Motion-Servers irgendwann unweigerlich voll läuft. Ein kleiner Cronjob hilft, dem komfortabel entgegenzuwirken. Die Anweisung aus Listing 3 sorgt beispielsweise dafür, dass der Server bei jedem Neustart die Videos ins Nirwana schickt, die mehr als drei Tage auf dem Buckel haben. Listing 3 @reboot /usr/bin/find /home/motion/videos -mtime +3 -exec rm {} \;