Überwachungskamera mit einem Raspberry Pi

Hallo,
ich hab mal getestet was man alles mit einem Raspberry und einer Kamera ohne großen Aufwand anstellen kann...

MATERIAL (was man so braucht)

  • einen Raspberry Pi, und wenn man etwas Strom sparen will (z.B. bei Batteriebetrieb) dann genügt auch der etwas ältere Pi 3.
    Der Zero funktioniert auch, hat aber einen anderen Anschluss für das Flachband vom Kameramodul. Also evtl. gleich das Adapterkabel besorgen, z.B. das hier.

  • natürlich eine Stromversorgung (z.B. USB- Netzteil) und eine SD Karte.

  • eine Kamera braucht man: entweder über Flachband am I²C angeschlossen oder eine Kamera über USB (ist ein bisschen langsamer). Vielleicht aber gleich eine Kamera mit Infrarot Zusatzlicht für den Nachtbetrieb.

MÖGLICHE ANWENDUNG (was man damit alles anstellen könnte)

  • Webcam einrichten im Heimnetzwerk (eine Webcam auf den Vogelkäfig ausrichten ist bestimmt interessanter als die Einfahrt)
  • Haustür-Überwachung mit Benachrichtigung (dann kann man in Ruhe überlegen ob man den überhaupt reinlassen will)
  • Wildkamera für den Garten (so sieht man wie sich Fuchs und Hase gute Nacht sagen)
  • Dashcam mit Endlos- Aufzeichnung fürs Auto (da hilft schon wenn man den anderen Verkehrsteilnehmern nur zeigt dass sie gefilmt werden)
  • Babymelder (um am Handy zu sehen ob alles OK ist)

Daher sollte man gleich eine Kamera mit Infrarot verwenden - da gibt es einfach viel mehr Möglichkeiten.

FEATURES (coole Sachen, die das Teil dann können sollte)

  • automatische Bewegungserkennung durch Änderung des Bildes
  • autom. Bild machen und auf SD Karte abspeichern
  • evtl. Bild auch noch senden z.B. per Email (bevor die SD Karte geklaut wird)
  • Infrarot LEDs für Nachtaufnahmen
  • Solarzelle zur Stromversorgung oder zur Unterstützung von Batterie/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). Wenn der Fernseher per HDMI- Kabel verbunden ist dann kann man beim Player unter “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 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 von Haus aus unterstützt. Die muss man allerdings erst aktivieren:

  • entweder über “Start - Einstellungen - Raspi Konfig”
  • oder über das LX-Terminal mit dem Befehl
    sudo raspi-config
    und dort die Kamera auf Aktiviert (enabled) setzen.

Bei der Gelegenheit auch gleich SSH auf “Enabled” setzen um einen Fernzugriff über das Heimnetz zu ermöglichen.

SSH- ZUGRIFF

Damit wir aber alle Befehle nicht dauernd am Raspberry Pi selber eintippen müssen sondern ganz gemütlich am PC, richten wir erst den Fernzugriff über das Netzwerk ein.

Dafür nimmt man ein Terminalprogramm wie z.B. den PuTTY (den gibts normal bei CHIP oder heise kostenlos zum download).

Dort gibt man die IP Adresse von seinem Raspberry ein. Die kann man sich im LX-Terminal anzeigen lassen mit
  hostname -I
d.h. eure IP wird ein bisschen anders lauten!
Den Port lässt man auf 22 stehen und dann unten auf OPEN klicken.

Falls die Meldung erscheint “es gibt keine Garantie ob das der Rechner ist…” einfach mit Ja akzeptieren.

Dann öffnet sich das Eingabefenster und man muss sich anmelden.
Zuerst mit dem login- Namen “pi” und dann mit dem Passwort. Bei Fernzugriff sollte man auf jeden Fall das Standard- Passwort “raspberry” abändern. Auch das kann man unter “Start - Einstellungen - Raspi Konfig” ändern.

Auch hier kann man wieder die beide Befehle
  ls /dev/video*
und
  v4l2-ctl -V
eingeben und die Ausgabe überprüfen, ob die Kamera erkannt wurde:


BILDER UND VIDEOS MACHEN

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/

Und es gibt die tolle Funktion “time-lapse”, um z.B. in einem festen Zeitabstand ein Bild machen zu lassen. Im Zeitraffer gesehen ergibt das bestimmt tolle Effekte - also nicht nur bei Pflanzen, sondern einfach mal auf die Couch richten um sich selbst im Zeitraffer anzuschauen (oder auch um zu sehen wann man eingeschlafen ist).

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

Mit “raspistill” erzeugt man Bilder und mit der “output filename” Option -o wird der Dateiname festgelegt. Mit dem folgenden Befehl wird also ein Bild gemacht 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 mir über das Flachbandkabel einfach am Tisch liegt, dann steht das Bild am Kopf. Das ist aber kein Problem: das Bilder kann man vertikal drehen mit -vf und horizontal drehen mit -hf:
  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 default die 5 Sekunden der Wartezeit von vorhin).
Mit den beiden Befehlen lassen wir uns 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. USB 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 passen mehr Bilder auf das Speichermedium.

Und über ein Bash- File könnte man auch das Datum und die Uhrzeit mit in den Dateinamen einbauen. Oder man erzeugt jeweils einen Ordner mit dem Datum, in dem die Bilder abgespeichert werden.

Um alle Optionen zu sehen gibt man nur den Befehl ein:
  raspistill

Videos

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 default 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 von dem Video ä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 entsprechendem Dateinamen (z.B. Uhrzeit) wird die Suche erheblich vereinfacht.
Und zum Umwandeln der “h264” in mp4- Dateien gibt es genügend kostenlose Tools.

PYTHON

Anbei 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 findet man bei Raspbian unter Entwicklung).

Bilder

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

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()

Mit Python- Programmen kann man ja noch mehr machen:
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 ja super hier - 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 sein 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 bzw. 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 euren 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 bei mir auch übers Android-Handy funktioniert (und ich habe das Bild wieder umgedreht, da meine Kamera anders herum da liegt):

Hier nimmt die Kamera vom Raspberry den Globus auf und zeigt das Bild über (einen rosafarbenen !) HDMI am Fernseher an. Gleichzeitig wird das Bild an mein Handy gestreamt, das unten vor der Tastatur liegt und in dem der VLC Player läuft.

IMAGE - MotionEyeOS

Jetzt kommt der Knaller: es gibt ein komplettes Image für den Raspberry Pi mit Mega- Features: das MotionEyeOS.
Das heisst Image drauf spielen, ein paar Einstellungen vornehmen - fertig.

Dieses Image kann automatisch eine Aufnahme starten wenn sich etwas im Bild bewegt, kann Emails absenden, es besitzt eine Zeitschaltuhr und vieles vieles mehr. Die Software unterstützt sogar den Betrieb von mehreren Kameras gleichzeitig!

Dazu wählt man sich hier nur das entsprechende Release aus.

Nach dem herunterladen und entzippen hat man eine img- Datei. Die wird am besten mit dem Win32DiskImager auf die SD Karte geschrieben.

Dann 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, bei mir 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 seht ihr zwei Einstellungen: “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” viel mehr Einstellungen freigegeben.

Unter “General Settings” habe ich die Time Zone auf Europe/Berlin gesetzt und unter “Video Device” setze ich die “Video Resolution” ein bisschen höher, 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. Die kann man z.B. im Handy als Link in seinem Browser speichern um jederzeit schnell Zugriff zu haben. Bei mir sieht die Adresse so aus:
http://192.168.178.59/picture/1/frame

Unter “Motion Detection” hab ich die “Frame Change Threshold” auf 5% hochgesetzt, damit die nicht sofort aufnimmt, wenn sich nur ein Blatt im Wind bewegt.
Die “Motion Gap” hab ich auf 10 Sekunden runter 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 halt eine neue Datei erstellt.
Die Motion Detection ist ja default schon eingeschaltet, d.h. der zeichnet schon fleißig auf: wenn man im Live- Bild oben rechts auf “open movie browser” geht, sieht man schon einige Videos, die die Software aufgezeichnet hat. Und die kann man direkt als MP4 herunterladen.

Und das Gute ist: die Software funktioniert auch mit den meisten USB Kameras, und zwar gleichzeitig mit meinem Kameramodul (dafür braucht man aber ein starkes Netzteil…).
Rechts oben werden beide Kameras gleichzeitig angezeigt.


NACHTAUFNAHME

Bei Tag sieht das alles OK aus, aber bei Nacht sieht man aber gar nichts…

Deswegen kommt jetzt der Test der IR Kamera für Nachtaufnahmen. Ich verwende die hier von Joy-it (Best.Nr. 1611055) - die liefert ganz gute Ergebnisse.

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 dann sind sie immer richtig angeschlossen.

So sieht der Globus bei Nacht aus - und da war es richtig dunkel 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 in der Nacht genügt sowas natürlich nicht. Wenn man Tiere im Garten aufnehmen möchte braucht man einen richtig starken IR Scheinwerfer.


Ich denke das genügt mal zum starten. Viel Spaß.

Anmelden oder Registrieren, um zu kommentieren.