Raspberry Pi als Webcam bzw. Motion Tracker

Mit einem Raspberry Pi, einer Webcam oder dem Raspberry-Pi-Kameramodul ist es relativ einfach, eine Überwachungskamera zu realisieren. Mit der Software motion wird anschließend aufgezeichnet, wenn sich im Bild etwas bewegt. In der folgenden Anleitung möchte ich Schritt für Schritt beschreiben, wie das Ganze in Betrieb genommen werden kann.

Kamera

USB-Webcam

Evtl. kann eine bereits vorhandene Webcam verwendet werden. Ist die Webcam mit Raspbian, der für Raspberry Pi angepassten Version von Debian Wheezy, kompatibel, sollte nach dem Anstecken der Kamera automatisch ein Device /dev/video* erstellt worden sein. Informationen über den Initalisierungsprozess der Kamera können mit folgendem Kommando angezeigt werden:

dmesg | tail

Raspberry Pi Kameramodul

Seit kurzem ist ein Treiber verfügbar, der das Rasperry Pi Kameramodul als /dev/video*-Gerät zur Verfügung stellt. Zuerst muss das entsprechende Repository eingebunden werden und anschließend die benötigte Software installiert werden.

Repositiory eintragen:

echo deb http://www.linux-projects.org/listing/uv4l_repo/raspbian/ wheezy main | sudo tee /etc/apt/sources.list.d/uv4l.list

Signaturkey des Repositorys einbinden:

curl http://www.linux-projects.org/listing/uv4l_repo/lrkey.asc | sudo apt-key add -

Repositories neu laden und Kameramodul installieren:

1sudo apt-get update
2sudo apt-get install uv4l uv4l-raspicam uv4l-raspicam-extras

uv4l enthält grundelegende Module, uv4l-raspicam den Treiber zum Ansprechen des Rasperry-Pi-Kameramoduls und uv4l-raspicam-extras ein Skript, welches beim Starten des Rasperry Pi automatisch den erforderlichen Treiber läd.

Anschließend wird der Treiber gestartet:

sudo service uv4l_raspicam start

Jetzt sollte unter /dev/video* ein entsprechendes Gerät erstellt worden sein.

Bewegungserkennung

Mit der Software motion ist ein Paket verfügbar, mit dem sich Videostreams auf Änderungen untersuchen lassen und anschließend automatisch aufgezeichnet werden können.

sudo apt-get install motion

Leider hat das Startskript von motion in der Version 3.2.12 noch einen Fehler: es wird beim Starten des Services nicht die Konfigurationsdatei /etc/motion/motion.conf verwendet. Ausserdem ist zum Einbinden des Raspberry-Pi-Kameramoduls eine weitere Anpassung notwendig.

Editieren des Startskripts von motion:

sudo editor /etc/init.d/motion

unter der Zeile DESC="motion detection daemon" wird folgende Zeile eingefügt:

CONFIG_FILE=/etc/motion/motion.conf

Die Zeile, in der Motion gestartet wird, wird folgendermaßen abgeändert, so dass das angegebene Config-File verwendet wird:

if start-stop-daemon --start --oknodo --exec $DAEMON -b --chuid motion -- -c $CONFIG_FILE ; then

Wird das Raspberry-Pi-Kameramodul verwendet, muss vor dem Starten von motion noch folgendes ins Startskript eingetragen werden:

export LD_PRELOAD=/usr/lib/uv4l/uv4lext/armv6l/libuv4lext.so

Das vollständige Startskript für motion kann hier heruntergeladen werden.

Anschließend stellt man in der Datei /etc/default/motion noch ein, dass motion nach jedem Reboot automatisch gestartet wird und startet den Service anschließend per Hand:

1sudo editor /etc/default/motion
2sudo service motion start

In der Default-Konfiguration werden jetzt bei Bewegungserkennung unter /tmp/motion/ Bilder und Videos abgelegt. Auf dem Raspberry Pi können über den Browser Vorschaubilder der Kamera angezeigt werden. Unter http://localhost:8081 sind Livebilder der Kamera zu sehen und unter http://localhost:8080 ist ein Steuerungsinterface von motion zugänglich.

Standardmäßig sind die Vorschaubilder und das Steuerungsinterface nur lokal auf dem Raspberry Pi abrufbar. Will man die Bilder auch auf einem anderen Rechner im Netzwerk betrachten, muss in der Datei /etc/motion/motion.conf der Eintrag webcam_localhost auf off gestellt und anschließend motion neu gestartet werden.

Fehlersuche

Zuerst sollte überprüft werden, ob sich nach dem Starten von motion im Syslog ungewöhnliche Einträge wiederfinden. Ein normaler Start von motion mit dem Rasperry-Pi-Kameramodul sieht wie folgt aus:

 1Feb 11 08:38:08 pi motion: [26134344] Processing thread 0 - config file /etc/motion/motion.conf
 2Feb 11 08:38:08 pi motion: [26134344] Motion 3.2.12 Started
 3Feb 11 08:38:08 pi motion: [26134344] ffmpeg LIBAVCODEC_BUILD 3482368 LIBAVFORMAT_BUILD 3478785
 4Feb 11 08:38:08 pi motion: [0] Thread 1 is from /etc/motion/motion.conf
 5Feb 11 08:38:08 pi motion: [1] Thread 1 started
 6Feb 11 08:38:08 pi motion: [0] motion-httpd/3.2.12 running, accepting connections
 7Feb 11 08:38:08 pi motion: [0] motion-httpd: waiting for data on port TCP 8080
 8Feb 11 08:38:08 pi motion: [1] cap.driver: "raspicam"
 9Feb 11 08:38:08 pi motion: [1] cap.card: "Camera Board OV5647"
10Feb 11 08:38:08 pi motion: [1] cap.bus_info: "CSI"
11Feb 11 08:38:08 pi motion: [1] cap.capabilities=0x05000001
12Feb 11 08:38:08 pi motion: [1] - VIDEO_CAPTURE
13Feb 11 08:38:08 pi motion: [1] - READWRITE
14Feb 11 08:38:08 pi motion: [1] - STREAMING
15Feb 11 08:38:08 pi motion: [1] Test palette YU12 (640x480)
16Feb 11 08:38:08 pi motion: [1] Using palette YU12 (640x480) bytesperlines 960 sizeimage 460800 colorspace 00000000
17Feb 11 08:38:08 pi motion: [1] found control 0x00980900, "brightness", range 0,100 
18Feb 11 08:38:08 pi motion: [1] #011"brightness", default 50, current 50
19Feb 11 08:38:08 pi motion: [1] found control 0x00980901, "contrast", range -100,100 
20Feb 11 08:38:08 pi motion: [1] #011"contrast", default 0, current 0
21Feb 11 08:38:08 pi motion: [1] found control 0x00980902, "saturation", range -100,100 
22Feb 11 08:38:08 pi motion: [1] #011"saturation", default 0, current 0
23Feb 11 08:38:08 pi motion: [1] found control 0x0098090e, "red balance", range 0,800 
24Feb 11 08:38:08 pi motion: [1] #011"red balance", default 100, current 100
25Feb 11 08:38:08 pi motion: [1] found control 0x0098090f, "blue balance", range 0,800 
26Feb 11 08:38:08 pi motion: [1] #011"blue balance", default 100, current 100
27Feb 11 08:38:08 pi motion: [1] found control 0x08000000, "shutter speed", range 0,65535 
28Feb 11 08:38:08 pi motion: [1] #011"shutter speed", default 0, current 0
29Feb 11 08:38:08 pi motion: [1] found control 0x08000001, "zoom factor", range 1,8 
30Feb 11 08:38:08 pi motion: [1] #011"zoom factor", default 0, current 1
31Feb 11 08:38:08 pi motion: [1] mmap information:
32Feb 11 08:38:08 pi motion: [1] frames=4
33Feb 11 08:38:08 pi motion: [1] 0 length=460800
34Feb 11 08:38:08 pi motion: [1] 1 length=460800
35Feb 11 08:38:08 pi motion: [1] 2 length=460800
36Feb 11 08:38:08 pi motion: [1] 3 length=460800
37Feb 11 08:38:08 pi motion: [1] Resizing pre_capture buffer to 1 items
38Feb 11 08:38:09 pi motion: [1] Started stream webcam server in port 8081

Ebenfalls kontrolliert werden kann, ob motion auf den voreingestellten Ports lauscht:

sudo netstat -tlpn

In der angezeigten Liste sollte motion bei den Ports 8080 und 8081 auftauchen.