Raspberry Pi als Kamera

Aus LT42-Wiki
Version vom 27. Juni 2023, 17:14 Uhr von Lukas (Diskussion | Beiträge) (Lukas verschob die Seite Raspberry Pi nach Raspberry Pi als Kamera)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Zur Navigation springenZur Suche springen

Schon vor längerer Zeit habe ich mir einen Raspberry Pi angeschafft und ein wenig damit herum experimentiert. Nun habe ich mir noch ein Kamera-Modul dazu bestellt. Das ist eine feine Sache. Hier versuche ich nun ein wenig zu dokumentieren, wie ich das Kamera-Modul mit Hilfe von motion so eingerichtet habe, dass es beim Wahrnehmen von Bewegung Bilder aufzeichnet. Ich bin nach dieser Anleitung (http://jankarres.de/2013/12/raspberry-pi-kamera-modul-mit-motion-tracking/) vorgegangen, habe dann aber angefangen zu spielen und viel von hier (Debacher-Wiki:Raspberry_Pi) übernommen.

Zuerst updaten wir das System:

sudo apt-get update
sudo apt-get upgrade

LED deaktivieren

Dann deaktivieren wir das kleine Lämpchen neben der Kamera. Wir wollen ja potenziellen Einbrechern nicht gleich zeigen, dass sie gefilmt werden. Wir editieren die Datei

sudo vi /boot/config.txt

und ergänzen sie um folgende Zeile

disable_camera_led=1

Nach einem Neustart des Systems können wir fortfahren:

sudo reboot

Motion

Dann können wir motion und einige weitere benötigte Pakete installieren:

apt-get install -y motion libjpeg62 libjpeg62-dev libavformat53 libavformat-dev libavcodec53 libavcodec-dev libavutil51 libavutil-dev libc6-dev zlib1g-dev libmysqlclient18 libmysqlclient-dev libpq5 libpq-dev

Nun installieren wir das Kernel-Modul für die Kamera mit

sudo apt-get install v4l-utils

und aktivieren es

sudo modprobe bcm2835-v4l2

Vor der Benutzung sollte man immer ein Bild aufnehmen, da es sonst zum Hängenbleiben des gesamten Systems kommt:

raspistill -o /tmp/test.jpg

Mit dem Debian-Paket wird ein Benutzer motion mitgeliefert, dem wir noch ein Homeverzeichnis anlegen:

sudo mkdir /home/motion
sudo chown -R motion.motion /home/motion

Die mitgelieferte Konfiguration von motion ist unter dem Raspberry Pi nicht stabil lauffähig, deshalb muss eine angepasste Version mit

wget https://www.dropbox.com/s/xdfcxm5hu71s97d/motion-mmal.tar.gz 

heruntergeladen werden. Wenn man möchte, kann man nun beide Konfigurationen nebeneinander benutzen, das möchte ich aber nicht.

Wir kopieren die ausgepackten Dateien in das Homeverzeichnis und in ein lauffähiges Verzeichnis, zum Beispiel /usr/local/bin

sudo tar -xzf motion-mmal.tar.gz
sudo mv motion-mmalcam.conf /home/motion/
sudo mv motion /usr/local/bin/

Dann stellen wir in der Konfigurationsdatei noch einige Pfade um:

sudo vi /home/motion/motion-mmalcam.conf
process_id_file /home/motion/motion.pid
logfile /home/motion/motion.log
target_dir /home/motion

Wenn man möchte, kann man auch noch ein Unterverzeichnis für die Bilddateien anlegen. Das macht Sinn, um nicht aus Versehen die Konfiguration zu löschen und bequem rm * nach dem Kontrollieren der Aufnahmen ausführen zu können:

sudo -u motion mkdir /home/motion/data
target_dir /home/motion/data

Dann passen wir noch einige Zeilen an, damit Motion im Hintergrund startet und die Konfiguration auch aus dem lokalen Netz zulässt:

# Start in daemon (background) mode and release terminal (default: off)
daemon on 

# Restrict control connections to localhost only (default: on)
webcontrol_localhost off

Starten

Um Motion dann zu starten, bedienen wir uns eines kleinen Startscripts:

sudo -u motion vi /home/motion/startmmalmotion.sh
#!/bin/sh

/usr/bin/raspistill -o /tmp/test.jpg
/sbin/modprobe bcm2835-v4l2

/usr/bin/sudo -u motion /usr/local/bin/motion -c /home/motion/motion-mmalcam.conf

Nachdem wir der Datei Ausführ-Rechte verleiht haben,

sudo chmod +x /home/motion/startmmalmotion.sh

können wir Motion starten mittels

sudo /home/motion/startmmalmotion.sh

zum Laufen bringen. Nach einigen Informationen, verschwindet es dann im Hintergrund. Sofern man Motion unter dem Benutzer motion startet, bekommt man eine Fehlermeldung, dass der Benutzer motion nicht berechtigt ist, modprobe auszuführen. Wir müssen motion also als root starten oder alternativ den Benutzer motion in die sudoers mit aufnehmen, wovon ich aus Sicherheitsgründen absehen würde.

Im Browser ist der Live-Stream dann mittels http://IPDESPIS:8081/ verfolgbar.

Beenden

Möchten wir die Überwachung unterbrechen, suchen wir uns mit dem Befehl

sudo ps aux | grep motion

die Prozess-ID des Motion-Services heraus, z.B.

motion    2592 96.3  5.0  84820 19336 ?        Sl   21:36   1:08 /usr/local/bin/motion -c /home/motion/motion-mmalcam.conf

und beenden mittels

kill 2592

alternativ dazu können wir auch einfach alle Prozesse des Benutzers motion killen

killall -u motion

Daten-Kopie

Um die Daten bequem auf einem normalen Arbeitsrechner anzuschauen (der Pi soll schließlich versteckt Einbrecher beobachten), können wir die Daten einfach mittels SSH-Protokoll auf den Rechner kopieren. Motion macht eine tolle Sache: Bei jeder neuen Bewegungserkennung, wird die führende Zahl der Dateien um einen nach oben gesetzt. Wir können also alle Dateien kopieren oder einfach jene des aktuellen Vorfalls

# Kopiere alles nach 172.16.0.4 auf den Desktop eines Benutzers (der Unterordner muss natürlich erstellt werden)
sudo scp /home/motion/data/* lukas@172.16.0.4:/home/lukas/Desktop/motion-daten
# Kopiere nur Bilder
sudo scp /home/motion/data/*.jpg lukas@172.16.0.4:/home/lukas/Desktop/motion-daten
# Kopiere nur Filme
sudo scp /home/motion/data/*.avi lukas@172.16.0.4:/home/lukas/Desktop/motion-daten
# Kopiere nur aktuelle Vorgänge (bspw. #24)
sudo scp /home/motion/data/24-* lukas@172.16.0.4:/home/lukas/Desktop/motion-daten

Der Ordner kann natürlich auch als NFS-Laufwerk eingebunden werden, was das Ablegen bequemer und auch direkt über motion möglich macht. Oder man kopiert die Dateien mittels rsync, egal von welchem Rechner aus.

Erkenntnisse am Rande

Der Raspberry scheint Probleme mit dem HDMI-DVI-Adapter von Apple zu haben. Nach dem Start von Raspbian tauchen nur noch Fehlermeldungen nach dem Prinzip

Timeout waiting for hardware interrupt - cmd 13

auf. Nach einem Wechsel auf ein reines HDMI-DVI-Kabel funktioniert wieder alles.