Bewegungserkennung mit dem Pi und motion

Das „motion-Paket“ ist ja etwas unübersichtlich in der Konfiguration, nun haben wir uns dem aber doch angenommen.

Im Folgenden nun also unsere Codebasis und Schritte, wie man damit (mittels „mjpeg-Streamer“ und mit einem Raspi nebst Pi-Cam) ein Videostreaming und eine Bewegungserkennung zur Realisierung einer Überwachungskamera aufbauen kann…

Zuerst geht es wie immer um die Aktualisierung der Softwarebasis, welche man mit

sudo apt-get update && sudo apt-get upgrade

einleitet. Daneben soll noch die Firmware des Pi upgedatet werden. Eine gute Idee in diesem Zusammenhang, denn wir wollen aktuelle Hardware (Pi-Cam) und Software einsetzen:

sudo wget http://goo.gl/1BOfJ -O /usr/bin/rpi-update
sudo rpi-update

Danach muss neu gestartet werden. Sollte die Kamera noch nicht im Einsatz sein, muss man sie für den Raspi bekannt machen:

sudo reboot
sudo raspi-config
# Menüpunkt: camera: enable

Wir brauchen außerdem git (für das Holen von zusätzlicher Software), screen (für das Starten im Hintergrund), motion (zur Bewegungserkennung), cmake und die „libjpeg62-Library“.

sudo apt-get install -y git-core screen motion cmake libjpeg62-dev

Der mjpg-Streamer soll eingesetzt werden, um diverse Videodaten zu streamen und motion bereitzustellen.

cd ~
git clone https://github.com/jacksonliam/mjpg-streamer.git
cd mjpg-streamer/mjpg-streamer-experimental/

Um diesen zu kompilieren, braucht es im Makefile noch eine kleine Änderung:

nano Makefile
# In der folgenden Zeile das „#“ vor „PLUGINS“ entfernen:
#PLUGINS += input_file.so

Danach also

make
sudo make install

ausführen.

Wir kreieren nun das Script „start_mjpg_streamer.sh“ im Skripte-Ordner unserer Wahl mit folgendem Inhalt:

#!/bin/bash
export LD_LIBRARY_PATH=“/usr/local/lib“
mjpg_streamer -i „input_raspicam.so -ex night -x 640 -y 480“ -o „output_http.so -p 8080 -w /usr/www“
exit 0

Damit übergeben wir schon einmal die meisten Parameter, wie die Bildgröße und den Streaming-Port.

Um zu schauen, ob alles funktioniert hat, startet man kurz das Skript und gibt folgende Zeile in die URL-Leiste eines Browsers ein:

http://[pi-address]:8080/?action=stream

Anschließend kann man noch (optional) die Berechtigungen zum besseren späteren Killen der Prozesse ändern:

cd /usr/local/bin
sudo chown pi.pi mjpg_streamer

Nun muss motion noch aufgesetzt werden. Also die motion.conf lokal kopieren und mit den notwendigen Änderungen versehen. Dort kann sie dann verbleiben, da wir deren lokale Kopie mit dem Parameter „-c“ an Stelle dem Original an motion übergeben wollen.

cd /home/pi/scripts
sudo cp /etc/motion/motion.conf motion.conf
sudo chown pi.pi motion.conf

Für unser Projekt haben wir wenige Änderungen in der motion.conf gemacht:

netcam_url http://[pi-address]:8080/?action=stream
width 640
height 480
framerate 20
locate on
target_dir /home/pi/images (an eigene Filestruktur anpassen)
threshold 1500
lightswitch 1
quality 85

Nun ist’s schon fertig. Für die „Überwachung“ ist also folgendes (aus dem eigenen Skripte-Ordner, bei mir „/home/pi/scripts“) nacheinander zu starten:

screen -d -m -S mjpg_streamer bash /home/pi/scripts/start_mjpg_streamer.sh
screen -d -m -S motion motion -c /home/pi/scripts/motion.conf

Eine wesentliche Vorlage zu diesem Projekt stammt aus den Entwicklungen von „inth3sh4dows“ aus dem RaspberryPi-Forum und dessen Quellen, was ich hier gerne erwähne. Denn ohne die Tests und Erkenntnisse über den „mjpg-streamer“ wäre dies hier nicht möglich gewesen. Einiges, was dort zu lesen war, wurde erneuert, einem längeren Praxistest unterzogen und auf die eigenen Bedürfnisse abgestimmt.

Motion erzeugt bei uns nun Bilder, wann immer eine Bewegung erkannt wird, also genügend Bildpunkte sich in genügend Veränderung zum Vorgänger-Bild befinden. Im Beispiel hier werden diese Bilder im Ordner /home/pi/images abgelegt. Das Live-Bild lässt sich nach wie vor über die Browser-URL oben beobachten. Wer möchte, kann daraufhin natürlich noch genug Automatisierung hinzufügen…

Swen Hopfe

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert