Überwachungskamera mit Raspberry Pi » Livebild als RTSP Stream
Veröffentlicht: 23.01.2023 | Lesedauer: 13 Minuten
In unserem Ratgeber zum Raspberry Pi finden Sie allgemeine Informationen rund um den kleinen Einplatinencomputer. Von Aufbau und Installation bis hin zu den verschiedenen Varianten des Raspberry Pi geben wir einen Einblick in die Welt des Raspi.
Überwachungskamera mit einem Raspberry Pi: Benötigtes Material
- Raspberry Pi: z.B. den Pi 3 oder Zero (der Raspberry Pi Zero besitzt einen anderen Anschluss für das Flachband vom Kameramodul; hier wird ein Adapterkabel benötigt)
- USB-Netzteil zur Stromversorgung
- SD-Karte
- Kamera: über Flachband am I²C angeschlossen oder USB-Kamera (ideal: Kamera mit Infrarot Zusatzlicht für den Nachtbetrieb)
Anwendungsmöglichkeiten der Überwachungskamera
Einrichten einer Webcam im Heimnetzwerk
(z.B. Haustierüberwachung)
Haustür-Überwachung mit Benachrichtigung, um unliebsamen Besuchern die Türe nicht zu öffnen
Nutzung als Wildkamera zur Überwachung des eigenen Gartens beziehungsweise Grundstücks
Dashcam mit Endlos-Aufzeichnung fürs Auto
als abschreckende Maßnahme
Nutzung als Babymelder (Alternative zum klassischen Babyphone)
Features, die die Überwachungskamera am Ende haben sollte
- Automatische Bewegungserkennung durch Änderung des Bildes
- Automatische Bildaufnahme sowie Abspeichern auf der SD-Karte
- Ggf. Versenden des Bildes per E-Mail
- Infrarot-LEDs für Nachtaufnahmen
- Solarzelle zur Stromversorgung oder zur Unterstützung von Batterie bzw. Akku
USB-Kamera
Eine USB-Kamera wird einfach in einen freien USB Port eingesteckt, dafür muss nichts in den Einstellungen geändert werden. Bei einer USB Webcam kann man mit diesem Befehl im LX-Terminal überprüfen, ob die Kamera erkannt wurde:
Mit “lsusb” werden alle USB- Geräte angezeigt
lsusb
Mit diesem Befehl hier werden alle angeschlossenen Videogeräte / Kameras angezeigt:
ls /dev/video*
und dieser Befehl zeigt die Eigenschaften der Kamera an:
v4l2-ctl -V
Damit kann man überprüfen, ob die Kamera richtig erkannt wurde und einsatzbereit ist.
Beim Raspbian wird seit einiger Zeit auch der VLC Player mit installiert (bei den Unterhaltungsmedien zu finden). Wenn der Fernseher per HDMI-Kabel verbunden ist, kann man beim Player “Medien / Medium öffnen” anklicken und beim Aufnahmegerät die “Video camera” auswählen. Sobald “Wiedergabe” gedrückt wird, erscheint die Kameraansicht. Unter dem Menü “Video” kann man einen “Videoschnappschuss” machen, der dann automatisch im Ordner pi/Bilder abgelegt wird.
Kameramodul
Nun benötigen wir zuerst einmal ein “einfaches” Kameramodul (ohne IR).
Zum Flachbandkabel einstecken: zuerst die Plastikhalterung (hier die weisse) etwas anheben, dann das Kabel einführen und danach die Halterung wieder reindrücken.
Dabei muss der Kontaktstreifen (die silbernen Kontakte) zum HDMI hin zeigen.
Und natürlich im stromlosen Zustand einstecken.
Eine Kamera wird vom Raspberry Pi grundsätzlich unterstützt. Diese muss man allerdings zuerst aktivieren. Dafür sind zwei Optionen möglich:
- über "Start" > "Einstellungen" > "Raspi Konfig"
- über das LX-Terminal mit dem Befehl
sudo raspi-config
und dort die Kamera auf "Aktiviert" (Enabled) setzen
Bei der Gelegenheit sollte man SSH auch direkt auf "Enabled" setzen, um einen Fernzugriff über das Heimnetz zu ermöglichen.
SSH-ZUGRIFF
Damit wir die Befehle nicht dauernd am Raspberry Pi selbst eintippen müssen, richten wir zunächst den Fernzugriff über das Netzwerk ein. So können die Befehle komfortabel am PC eingegeben werden.
Dafür wird idealerweise ein Terminalprogramm, z.B. PuTTY, verwendet. Dieses kann üblicherweise kostenlos heruntergeladen werden.
Dort gibt man nun die IP Adresse seines Raspberrys ein. Diese wird im LX-Terminal angezeigt, wenn man folgenden Befehl eingibt:
hostname -I
Dementsprechend wird jede IP ein wenig anderslauten.
Den Port lässt man auf 22 stehen, anschließend unten auf "Open" klicken.
Falls die Meldung erscheint “Es gibt keine Garantie, ob das der Rechner ist…” wird dies einfach mit "Ja" akzeptiert.
Das Eingabefenster öffnet sich, als nächstes erfolgt nun die Anmeldung.
Zuerst funktioniert das mit dem Login- Namen “pi” und dann mit dem Standard-Passwort. Bei Fernzugriff sollte man auf jeden Fall das Standard- Passwort “raspberry” abändern. Auch das kann abgeändert werden unter:
“Start" > "Einstellungen" > "Raspi Konfig”
Auch hier kann man wieder die beiden Befehle
ls /dev/video*
und
v4l2-ctl -V
eingeben und die Ausgabe überprüfen, ob die Kamera erkannt wurde:
Bilder und Videos aufnehmen
Bei Raspbian hat der Raspberry Pi die Befehle “raspistill” und “raspivid” bereits als sog. “command line tools” an Bord. Mit diesen beiden Befehlen kann man vom (LX-Terminal) Eingabeterminal aus Bilder und Videos erstellen:
https://www.raspberrypi.org/documentation/usage/camera/raspicam/
Eine weitere nennenswerte Funktion ist “time-lapse”: Dammit kann in einem festen Zeitabstand ein Bild aufgenommen werden. Sieht man dies nun im Zeitraffer an, ergibt das tolle Effekte – also nicht nur bei Pflanzen, sondern einfach mal auf die Couch richten, um sich selbst im Zeitraffer anzusehen.
LX-Terminal
Jetzt wollen wir wie oben erwähnt vom PC aus über SSH mit den Befehlen “raspistill” und “raspivid” Bilder und Videos erzeugen.
Bilder erzeugen
Mit “raspistill” können Bilder erzeugt werden und mit “output filename” Option -o wird der Dateiname festgelegt. Mit dem folgenden Befehl wird also ein Bild aufgenommen und unter dem Namen “Bild.jpg” abgespeichert:
raspistill -o Bild.jpg
Dabei wird zuerst etwa 5 Sekunden lang eine Vorschau geöffnet und dann das Bild erstellt. Dieses befindet sich dann im Verzeichnis “home/pi”.
Wenn die Kamera wie bei uns über das Flachbandkabel einfach am Tisch liegt, dann steht das Bild am Kopf. Das ist aber kein Problem: das Bild kann mit -vf vertikal und mit -hf horizontal gedreht werden:
raspistill -o Bild1.jpg -hf -vf
Da man die Vorschau über SSH ja sowieso nicht sieht/sehen würde, hängen wir die Option -n an: Damit wird die Vorschau abgeschaltet
raspistill -o Bild2.jpg -n
Nun erstellen wir einen Ordner “Test” und speichern unser Bild in diesem Verzeichnis ab:
mkdir Test
raspistill -o /home/pi/Test/Bild3.jpg
Nun zur time-lapse Funktion: time-lapse (als Option -tl) macht alle x ms ein Bild (also legt die Zeit fest zwischen zwei Bildern) und der Timeout -t legt fest, wie lange das Programm läuft (das waren in der Default Einstellung die 5 Sekunden der Wartezeit von vorhin).
Mit den beiden Befehlen lassen wir eine Minute lang alle 10 Sekunden ein Bild machen. Der Name der Datei “Bild_000.jpg” soll dabei einfach laufend durchnummeriert werden:
raspistill -t 60000 -tl 10000 -o Bild_%03d.jpg
Mit einer größeren SD-Speicherkarte oder einem angeschlossenen USB-Stick bzw. einer externen Festplatte kann man so relativ schnell eine einfache Überwachung realisieren.
Und wenn eine niedrigere Auflösung genügt, dann kann man mit -q die Qualität und damit die Größe der Datei verringern:
raspistill -o Bild5.jpg -q 10
So können mehr Bilder auf dem Speichermedium gespeichert werden.
Und über ein Bash-File könnte auch das Datum und die Uhrzeit mit in den Dateinamen eingebaut werden. Oder man erzeugt jeweils einen Ordner mit dem Datum, in dem die Bilder abgespeichert werden.
Um alle Optionen zu sehen, gibt man nur den folgenden Befehl ein:
raspistill
Videos erzeugen
Analog zu raspistill gibt es den Befehl “raspivid” zum Erstellen von Videos. Das Format ist h264, das der VLC Player im Raspbian aber wiedergeben kann.
Dieser Befehl erzeugt ein Video, das in der Default Einstellung wieder 5 Sekunden lang ist:
raspivid -o video.h264
Natürlich ist auch das Video drehbar mit -vf und -hf, und über den Timeout -t kann man auch die Länge des Videos ändern auf z.B. 10 Sekunden:
raspivid -vf -hf -o video2.h264 -t 10000
Mit der Option timed “-td x,y” kann man die Aufnahmedauer x und die Dauer der Pause y einstellen. In dem Beispiel wird 10 Sekunden lang aufgenommen, und zwar immer 1 Sekunde aufnehmen mit einer halben Sekunde Pause anschließend:
raspivid -o video3.h264 -t 10000 -td 1000,500
Mit “segment” -sg kann man die Videos in einzelne Teile splitten. So kann man ein Video mit der Gesamtdauer -t (hier 12 Sekunden) aufzeichnen, das aus lauter einzeln Videos von jeweils -sg (hier 3 Sekunden) besteht:
raspivid -t 12000 -sg 3000 -o video%04d.h264
Damit kann man sich viele einzelne Videos erzeugen lassen. Mit dem entsprechenden Dateinamen (z.B. Uhrzeit) wird die Suche erheblich vereinfacht.
Zum Umwandeln der “h264” in mp4- Dateien gibt es eine Vielzahl kostenloser Tools.
Programmierung in Python
Nachfolgennd noch jeweils ein einfaches Beispiel zur Programmierung in Python. Die beiden Programme können am einfachsten in die “Thonny Python IDE” reinkopiert und ausgeführt werden (das Programm ist bei Raspbian unter Entwicklung zu finden).
Bilder erzeugen
Bilder werden mit dem Befehl “capture” erzeugt. Die Auflösung wird in diesem Beispiel hier reduziert auf 800*600 und die Voransicht wird für 2 Sekunden aktiviert:
Hier das Programm:
import picamera
from time import sleep
cam = picamera.PiCamera()
try:
cam.resolution = (800, 600)
cam.start_preview()
sleep(2)
cam.stop_preview()
cam.capture('/home/pi/test.jpg')
finally:
cam.close()
Videos erzeugen
Videos werden mit dem Befehl “start_recording” und “stop_recording” erzeugt.
Hier wird zuerst die Voransicht und dann das Video gestartet. Nach einer Wartezeit von 10 Sekunden wird die Aufnahme und auch die Ansicht beendet.
Hier das Programm:
import picamera
from time import sleep
with picamera.PiCamera() as cam:
cam.start_preview()
cam.start_recording('/home/pi/film.h264')
cam.wait_recording(10)
cam.stop_recording()
cam.stop_preview()
cam.close()
Python- Programme bieten aber noch deutlich mehr Möglichkeiten:
Man kann einen beliebigen Text mit in das Video einblenden. Dazu fügt man diese Zeilen ein:
cam.annotate_text_size = 160
cam.annotate_text = 'Hello world!'
So kann man z.B. das Datum und die Uhrzeit mit in das Bild einblenden.
Das passt hier super – ein Globus und das “Hello World”.
Und so macht man eine Python- Datei ausführbar: Wenn man das erste Beispiel unter dem Namen camera.py speichert (unter /home/pi) dann kann man im LX-Terminal das Programm starten mit dem Befehl:
python3 camera.py
Dann fügt man in der ersten Zeile im Python Programm diesen “Shebang” ein:
#!/usr/bin/env python3
und macht die Datei “ausführbar” mit dem Befehl
sudo chmod +x camera.py
Dann kann man das Python Programm in die Autostart-Datei eintragen, damit es automatisch nach dem Hochfahren startet: Dazu editiert man die Datei rc.local mit dem Befehl:
sudo nano /etc/rc.local
und fügt den Programmaufruf ein (aber vor dem Befehl “exit 0”)
sudo python3 /home/pi/camera.py &
Und schon kann man die Überwachungskamera über eine einfache Zeitschaltuhr steuern!
Livebild im Heimnetz
Nun wollen wir uns das Livebild am Rechner beziehungsweise am Handy ansehen:
RTSP
Erst ein Beispiel mit RTSP, dem “Real-Time Streaming Protocol”: Die folgende Zeile (also in einem Stück) wird im LX-Terminal am Raspberry eingegeben (oder einfacher über SSH gesendet):
raspivid -o - -t 0 -n -w 320 -h 240 -fps 30| cvlc -vvv stream:///dev/stdin --sout '#rtp{sdp=rtsp://:8000/}' :demux=h264
Am Windows 10 Rechner startet man den VLC Player, mit Ctrl+N wird der Netzwerkstream geöffnet und diese Zeile eingeben (natürlich wieder die IP an den Raspi anpassen):
rtsp://192.168.178.59:8000/
Damit bekommen wir ein Livebild mit 320 * 240 über den Port 8000. Die Übertragung ist zwar nicht ganz Live, aber nur ein klein wenig zeitversetzt. Mit Ctrl+C am Raspberry kann die Übertragung wieder beendet werden.
HTTP
Nun noch ein Beispiel über http: dazu wird am Raspberry im Terminal - auch am Stück- das folgende eingegeben:
raspivid -o - -t 0 -vf -hf -w 800 -h 400 -fps 24 |cvlc -vvv stream:///dev/stdin --sout '#standard{access=http,mux=ts,dst=:8160}' :demux=h264
Und am VLC Player wird am Windows 10 Rechner mit Ctrl+N der Netzwerkstream geöffnet:
http://192.168.178.59:8160/
Das hat hier auch übers Android-Handy funktioniert (das Bild wurde erneut umgedreht, da die Kamera andersherum liegt).
Hier nimmt die Kamera vom Raspberry den Globus auf und zeigt das Bild über (den rosafarbenen) HDMI am Fernseher an.
Gleichzeitig wird das Bild an das Handy gestreamt, das unten vor der Tastatur liegt und in dem der VLC Player läuft.
Image – MotionEyeOS
Es gibt ein komplettes Image für den Raspberry Pi mit Mega-Features: das MotionEyeOS.
Das heißt: Image drauf spielen, ein paar Einstellungen vornehmen – fertig.
Dieses Image kann automatisch eine Aufnahme starten, wenn sich etwas im Bild bewegt, kann Emails senden, es besitzt eine Zeitschaltuhr und vieles mehr. Die Software unterstützt sogar den Betrieb von mehreren Kameras gleichzeitig!
Dazu wählt man hier nur das entsprechende Release aus.
Nach dem Herunterladen und Entzippen hat man eine img- Datei. Diese wird am besten mit dem Win32DiskImager auf die SD Karte geschrieben.
Nun fehlt aber noch eine Datei namens “wpa_supplicant.conf”: Diese muss mit einem Editor erstellt werden.
Hier aber die eigene SSID (den Router) und das eigene Passwort eingeben:
country=DE
update_config=1
ctrl_interface=/var/run/wpa_supplicant
network={
scan_ssid=1
ssid="FRITZ!Box 7590 HY"
psk="passwort"
}
Die Datei wird dann ebenfalls mit auf die SD- Karte kopiert. Dann wie gehabt die SD in den Raspberry stecken und starten. Nach kurzer Zeit erscheint am Fernseher “login:”
Dann kann man bereits am PC den Browser starten und die IP eingeben, hier also die 192.168.178.59 (die IP wird ein paar Zeilen weiter oben am Fernseher ausgegeben).
Als erstes muss man sich einloggen. Oben links sind zwei Einstellungen zu sehen: “settings” und “switch user”. Das rechte anklicken und einloggen mit:
Username: admin
Passwort: (hier gar nichts eintragen)
Denn als admin werden links bei den “settings” deutlich mehr Einstellungen freigegeben.
Unter “General Settings” setzt man die Time Zone auf Europe/Berlin und unter “Video Device” kann man die “Video Resolution” ein bisschen höher setzen, die “Frame Rate” auf 10 und die "Video Rotation" auf 180° – auch das kann die Software.
Unter “Video Streaming” findet man “Useful URLs”, wie z.B. die URL für die Live- Ansicht. Diese kann man z.B. im Handy als Link in seinem Browser speichern, um jederzeit schnell Zugriff zu haben. Hier sieht die Adresse so aus:
http://192.168.178.59/picture/1/frame
Unter “Motion Detection” wurde die “Frame Change Threshold” auf 5% hochgesetzt, damit diese nicht sofort aufnimmt, wenn sich nur ein Blatt im Wind bewegt.
Die “Motion Gap” wurde auf 10 Sekunden herunter gesetzt, d.h. wenn 10 Sekunden lang keine Bewegung erkannt wird, dann wird die Aufnahme beendet. Wenn kurz danach eine neue Bewegung erkannt wird, dann wird einfach eine neue Datei erstellt.
Die Motion Detection ist standardmäßig bereits eingeschaltet, d.h. zeichnet schon fleißig auf: Wenn man im Live- Bild oben rechts auf “open movie browser” klickt, sieht man schon einige Videos, die die Software aufgezeichnet hat. Diese kann man direkt als MP4 herunterladen.
Und das Gute ist: Die Software funktioniert auch mit den meisten USB-Kameras, und zwar gleichzeitig mit einem Kameramodul (dafür wird aber ein starkes Netzteil benötigt).
Rechts oben werden beide Kameras gleichzeitig angezeigt.
Nachtaufnahme
Am Tag sieht alles ok aus, aber nachts sieht man leider nichts mehr.
Deswegen folgt jetzt der Test der IR-Kamera für Nachtaufnahmen.
Zuerst muss man die beiden IR montieren, aber wie herum? Mit dem DMM kurz gemessen, sieht man, dass die Kontakte übers Kreuz verbunden sind. D.h. wenn die beiden IR nach vorne schauen, sind sie immer richtig angeschlossen.
So sieht der Globus bei Nacht aus – bei völliger Dunkelheit im Zimmer.
Das genügt für Aufnahmen im Haus, wie z.B. für das Baby im Kinderzimmer.
Aber für die freie Natur während der Nacht reicht diese Variante nicht mehr aus. Wenn man Tiere im Garten aufnehmen möchte, benötigt man einen richtig starken IR-Scheinwerfer.