Aufnahmen von IP-Kameras bei Bewegung per E-Mail melden

© bluebay, 123RF

Sicheres Zuhause

Günstige IP-Kameras vom Discounter erkennen und melden zwar Bewegungen, doch die Fehlerrate fällt dabei recht hoch aus. Eine selbst entwickelte Bewegungserkennungssoftware für den RasPi beseitigt das Problem.

Zwischen Gemüse und Waschmitteln finden sich heute beim Discounter gelegentlich auch IP-Kameras mit Bewegungserkennung für weniger als 60 Euro. Sie funktionieren zwar bei Tag und Nacht und melden per E-Mail, doch zeigt die Erfahrung, dass die Kamerasoftware im Außenbereich Bewegungen nicht zuverlässig erkennt. Sonne und Schatten sowie der Wechsel zwischen Tag und Nacht verursachen zahlreiche Fehlmeldungen.

Als Alternative kommt der Raspberry Pi infrage: Mit den Kameras und entsprechender Software ausgestattet, mutiert er zum verlässlichen Überwachungssystem. Dabei laden eine oder mehrere Kameras die Bilder via FTP auf den RasPi hoch. Der verarbeitet die übertragenen Aufnahmen, prüft deren Abfolge auf Bewegungen hin und verschickt bei einem positiven Ergebnis eine E-Mail an zuvor konfigurierte Adressen, mit den fraglichen Bildern als Attachment.

Die Software läuft als Dienst im Hintergrund und lässt sich über Ini-Dateien konfigurieren. So können Sie die Parameter gegebenenfalls verändern, ohne die Anwendung neu starten zu müssen. Damit Unbefugte nicht die Passwörter für FTP- und Mailserver aus der Konfiguration auslesen können, gibt es die Möglichkeit, diese zu verschlüsseln.

Architektur

Da der Raspberry Pi nicht gerade zu den schnellsten Computern gehört, galt der Effizienz des Programms besonderes Augenmerk. Bevor die eigentliche Bildbearbeitung beginnt, lassen sich Masken über das Bild legen. Damit nehmen Sie Bildteile von der Erkennung aus, etwa eine viel befahrene Straße vor der Haustür oder den Zugang zum Nachbarhaus.

Zu diesem Zweck spezifizieren Sie in der Ini-Datei ein Schwarz-Weiß-Bild, das die Software mit jeder Aufnahme kombiniert und dabei schwarze Bereiche ignoriert. Solche Filter-Bilder erstellen Sie mit einem beliebigen Bildbearbeitungsprogramm, wobei das Format identisch zur Auflösung der Kamera sein muss.

Den Ablauf der Bildbearbeitung verdeutlicht das Flussdiagramm aus Abbildung 1. Die erste Stufe dient der groben Einschätzung, ob das aktuelle Bild sich vom vorherigen unterscheidet. Dazu ermittelt die Software einen Durchschnitt über alle Pixel des Bilds und vergleicht ihn mit dem Durchschnitt der vorhergehenden Aufnahme. Nur Bilder mit Unterschieden fließen in die weitere Analyse ein. Diese erste, relativ grobe Filterung steigert die Leistung des Programms maßgeblich.

Abbildung 1: Der Ablauf der Bewegungserkennung als Flussdiagramm. Für die Bildbearbeitung kommt Libvips zum Einsatz.

Die nächste Stufe der Bearbeitung kompensiert die Tatsache, dass die im Aufbau benutzte Kamera über einen Infrarot-Scheinwerfer verfügt, der sich bei Nacht automatisch einschaltet. Dadurch ergeben sich während der Dämmerungsphasen für aufeinanderfolgende Bilder oft sehr unterschiedliche Durchschnitte, weil das Kameralicht sich zwischen den Bildern ein- oder ausschaltet. Ein (im Code gesondert dokumentierter) Filter vermeidet hier unnötige Fehlmeldungen.

Das System nutzt die letzten 10 Bilder (diese Anzahl können Sie anpassen), um ein verbundenes Maskenbild für die weitere Bearbeitung zu kreieren. Dazu konvertiert es die zur Analyse herangezogenen Aufnahmen einzeln in ein Schwarz-Weiß-Bild. Danach entfernt es mit einem Gauß-Blur-Filter das Rauschen. Danach betont es die Schwarz-Weiß-Kanten ("Edges") mit einem Faltungsfilter ("Convolution-Filter"). Im vorletzten Schritt konvertiert die Software dann die Bilder von einer Grau-Skala zu reinem Schwarz-Weiß und invertiert sie. Für das verbundene Maskenbild ("Composite image") führt das System dann letztlich alle verarbeiteten Bilder zusammen (Abbildung 2).

Abbildung 2: Beispiel eines verbundenen Maskenbilds. Hier sehen Sie in der oberen rechten Ecke die Auswirkung des Filter-Bilds.

Zur Bewegungserkennung greift die Software wieder auf die letzten 10 Bilder zurück, die es dazu ähnlich wie das Maskenbild nach Schwarz-Weiß konvertiert und mit einem Faltungsfilter bearbeitet, um die Schwarz-Weiß-Übergänge zu betonen. Das Ergebnis speichert das System dann als Bewegungsbild ab, um es gegebenenfalls per E-Mail verschicken zu können. Die eigentliche Bewegungserkennung erfolgt dann über einen Vergleich mit dem verbundenen Maskenbild (im Code: vips::VImage::ifthenelse()), um Bewegungen zu entdecken. Ein Gauß-Blur-Filter entfernt aus dem daraus entstandenen Bild wieder das Rauschen.

Den errechneten Beleuchtungsdurchschnitt vergleicht die Software anschließend mit einem in der Ini-Datei festgelegten Schwellwert. Übersteigt der Durchschnitt diese Schwelle, wertet das System die Veränderung als Bewegung (Abbildung 3) und bereitet den Versand einer E-Mail vor. Die dazu nötigen Daten (E-Mail-Adresse, SMTP-Zugangsdaten) holt sich das Programm aus der Ini-Datei. Die E-Mail erhält folgende Attachments:

  • das Bewegungsbild, anhand dessen Sie erkennen, wo im Bild die Bewegung stattgefunden hat,
  • mehrere Bilder vor und nach der Bewegungserkennung, deren Anzahl (Voreinstellung *5) Sie in der Ini-Datei vorgeben, sowie
  • optional das Maskenbild.
Abbildung 3: Hier hat das Überwachungsprogramm eine Bewegung erkannt, das Bewegungsbild erscheint in Schwarz-Weiß.

Das System kommt dabei mit mehr als einer Kamera zurecht, in der Praxis beim Autor etwa mit zwei verbundenen Kameras. Die Bewegungserkennung erfolgt für jede davon in einem eigenen Thread. Ein Haupt-Thread überwacht dabei die jeweiligen Threads und meldet Probleme via E-Mail.

Die Ini-Datei

Als Anwender konfigurieren Sie das Programm über die Ini-Datei, in der Sie die Spezifika für die individuelle Installation eintragen. Diese Textdatei bearbeiten Sie mit einem beliebigen Editor. Die Beispieldatei auf der Heft-DVD listet alle Einstellungsmöglichkeiten auf. Die Abschnitte der Ini-Datei und die wichtigsten Settings fasst die Tabelle "Ini-Datei: Sektionen und Einstellungen" zusammen.

Bei allen Einträgen kommt es auf die Groß- und Kleinschreibung an: QWERT ist also nicht dasselbe wie qwert. In mehreren Fällen gibt es Standardeinstellungen, die Sie unverändert übernehmen können. Kritische Einträge (etwa Benutzer- und Anmeldedetails sowie Passwörter) verschlüsseln Sie bei Bedarf mithilfe des beigefügten Programms passwordCrypto (siehe Kasten "Verschlüsselung").

Ini-Datei: Sektionen und Einstellungen

Sektion

Einstellung

Anmerkung

[CameraNr]

 

Eine Sektion pro Kamera, mit eindeutiger Nummer Nr für das jeweilige Gerät.

 

CameraName = Name

Ein Name als String für die Kamera.

 

FtpServerUrl = ftp://URL

URL zum Verzeichnis auf dem FTP-Server. Muss auch in Kamera-Konfiguration (siehe Kamerahandbuch) eingestellt werden.

 

FtpUsername = Name

FTP-Benutzername, wie im FTP-Server konfiguriert.

 

FtpPassword = CODE_BEGIN_Passwort_END_CODE

Bei Bedarf das Passwort mit passwordCrypto verschlüsseln.

 

FilterFilePath = Pfad

Pfad zur Filter-Datei (optional).

[Ftp]

 

Einstellungen für den Zugriff auf den FTP-Server (optional).

[Imaging]

 

Einstellungen für die Bildbearbeitung (optional).

[E-Mail]

 

Einstellungen für das Senden von E-Mails.

 

E-MailFromAddress =

E-Mail-Adresse des Absenders.

 

E-MailToAddresses = Name@Domain.TLD; ....

Mehrere Empfänger-E-Mail-Adressen, durch Semikola getrennt.

 

SmtpServerAddress = SMTP-Server

Adresse des SMTP-Servers, in der Regel vom E-Mail-Provider festgelegt.

 

SmtpPort = Portnummer

SMTP-Port, in der Regel vom E-Mail-Provider festgelegt. Nur notwendig, falls nicht 465 (verschlüsseltes SMTP).

 

SmtpUseSecureSMTP = Boolean

true oder false. Nur notwendig, wenn der SMTP-Port nicht 465 ist.

 

SmtpUsername = <§§I>CODE_BEGIN_Name_END_CODE

Der Benutzername für Anmeldung bei dem SMTP-Server. Verschlüsselung mit passwordCrypto ist empfohlen.

 

SmtpPassword = <§§I>CODE_BEGIN_Passwort_END_CODE<§§I>

Das Passwort für Anmeldung bei dem SMTP-Server. Verschlüsselung mit passwordCrypto ist empfohlen.

 

E-MailDateFormat = YYYY.MM.DD hh:mm:ss

Format für das Schreiben der Uhrzeit und des Datums in einer E-Mail (empfohlen).

[Configuration]

 

Allgemeine Einstellungen.

 

OutputDirectory = Verzeichnis

Arbeitsverzeichnis für das Programm. Muss vorhanden und beschreibbar sein.

 

ImageFileDateFormat = ?????????????YYYYMMDDhhmmss

Die von der Kamera übertragenen Bilder tragen meist die Uhrzeit und das Datum im Dateinamen. Dieser Eintrag gibt dem Programm die Information, wie die Dateinamen von der Kamera zu verstehen sind. Der Beispieleintrag ist für eine Kamera des Typs Maginon IPC-20C von Aldi.

 

ArchiveDirectoryPath = Pfad

Pfad zu einem Verzeichnis, in das die Anwendung die Aufnahmen archiviert. Wenn nicht vorhanden, werden die Bilder nicht archiviert. Wählen Sie einen externen Datenträger wie einen USB-Stick, sollte dieser nicht mit FAT32 formatiert sein, da dieses Dateisystem maximal 16 000 Dateien in einem Verzeichnis unterstützt. Sie sollten besser ein Linux-Dateisystem wie EXT4 nutzen.

 

ArchiveDeleteAfterDays = Zahl

Anzahl der Tage nach denen die Archivbilder automatisch gelöscht werden. Wenn nicht vorhanden, müssen Sie das Archiv von Hand aufräumen.

[StatusReporting]

 

Statusmeldungen per E-Mail über Speicherbedarf und andere Parameter (optional, siehe INI-Datei).

[Test]

 

Nur für Entwicklungszwecke.

Verschlüsselung

Generell sollten Sie vermeiden, Passwörter in Konfigurationsdateien einzutragen. Mit dem Kommandozeilenprogramm passwordCrypto lassen sich die Zugangsdaten wenigstens maskieren und stehen damit nicht mehr im Klartext in der Ini-Datei. Das Programm nutzt dazu das Verschlüsselungsverfahren von OpenSSL. Zwar steht der verwendete Schlüssel fest verdrahtet im Code, in der Regel genügt das jedoch für das Verschleiern des Passworts. Um den Schlüssel zu ändern, müssen Sie die Datei VipsLibrary/src/dasicrypto.cpp editieren. Der Aufruf des Programms ohne Parameter liefert einen Hilfetext (Listing 1, Zeile 1). Eine Verschlüsselung (Zeile 9) liefert das verschlüsselte Passwort zwischen den Textblöcken CODE_BEGIN_ und _END_CODE. Diesen Ausgabetext übernehmen Sie komplett in die Ini-Datei.

Listing 1

 

$ Debug/passwordCrypto.exe
passwordCrypto: Convert passwords to encrypted strings and backwards.
  -e <password>      Encrypt a password
  -d <encrypted password> Decrypt a password
  -t <password>      Perform round-trip encryption/decryption
              (for test purposes).
If the password contains spaces, then it should be enclosed in '"'s
$ Debug/passwordCrypto.exe -e dfghjk
CODE_BEGIN_GWoR8OW1Nshn7JnUMFpaUw==_END_CODE

TIPP

Je nach Konfiguration und Geschehen vor der Kamera versendet das Überwachungssystem eine große Menge an E-Mails. Allerdings begrenzen viele E-Mail-Provider die Anzahl der E-Mails, die man pro Tag senden darf, um Spammern das Handwerk zu erschweren. So beschränkt Googles E-Mail-Dienst Gmail den Versand von E-Mails beispielsweise auf 500 Mails pro Tag.

Diesen Artikel als PDF kaufen

Express-Kauf als PDF

Umfang: 7 Heftseiten

Preis € 0,99
(inkl. 19% MwSt.)

Raspberry Pi Geek kaufen

Einzelne Ausgabe
 
Abonnements
 
TABLET & SMARTPHONE APPS
Bald erhältlich
Get it on Google Play

Deutschland

Ähnliche Artikel

Aktuelle Ausgabe

08/2019
Smarte Hacks

Diese Ausgabe als PDF kaufen

Preis € 9,99
(inkl. 19% MwSt.)

Stellenmarkt

Neuigkeiten

  • Immer der Reihe nach

    Mit einer einfachen Schaltung testen Sie Bausteine, die über den SPI-Bus miteinander kommunizieren.

  • Einzigartig

    Eine MAC-Adresse ermöglicht die Kommunikation im Netzwerk. Der 24AA02E48 liefert sie für Setups, die aus grundlegenden Komponenten bestehen.

  • Steinkuchen

    Der Raspberry Pi hat viele Fans, doch nicht ohne Grund sehnen sich viele Anwender nach einem RasPi 4. Der Rock Pi 4 übertrumpft den RasPi 3 in Sachen Leistung um Längen und schlägt sich auch in der Praxis gut.

  • Kerngeschäft

    Der Einstieg in die Welt der Mikrocontroller fällt nicht ganz leicht. Mit dem Nucleo F401RE haben Sie jedoch ein Entwicklerboard samt abgestimmter Entwicklungsumgebung an der Hand.

  • Himbeer-Geräte

    Mit Maus und Tastatur im weiß-roten Raspberry-Look macht die Raspberry Pi Foundation das eigene Angebot an Peripheriegeräten für den Mini-Rechner komplett.

  • Unter Kontrolle

    PiCockpit ist eine speziell auf den RasPi zugeschnittene Online-Monitoring-Lösung. Wir werfen einen ersten Blick auf den brandneuen und in Ausbau befindlichen kostenlosen Dienst.

  • Ins rechte Licht gesetzt

    Selbst ohne eigenen Garten holen Sie sich Pflanzen mithilfe von LEDs in jeden Raum und sehen ihnen mit dem RasPi beim Wachsen zu.

  • Helligkeit nach Maß

    Wer bei wechselnden Lichtverhältnissen nicht ständig die Beleuchtung manuell nachregeln möchte, der spannt dafür einen PiXtend ein.

  • Geschrumpft

    Kleine Bildschirme gibt es zwar viele, aber der Support von Raspbian ist überraschend schlecht. Mit ein paar Tricks erzielen Sie trotzdem ein optimales Ergebnis.

  • Brüllwürfel

    Kompakt-Stereoanlagen mit CD-Spieler und Kassettendeck sind inzwischen oft ein Fall für den Recyclinghof – oder für die digitale Wiederbelebung mit einem RasPi und etwas Geschick.