Ü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.

Zum Ratgeber Raspberry Pi »



Ü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.