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

02/2019
Neue Energien

Diese Ausgabe als PDF kaufen

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

Stellenmarkt

Neuigkeiten

  • Scheibchenweise

    Zu den Stärken von Sonic Pi gehört es, mit wenigen Zeilen Code Samples dynamisch auszuwählen und zu zerlegen.

  • Unter Strom

    Für einen kleinen Spannungsmesser wie den INA3221 gibt es viele Einsatzmöglichkeiten. Wir zeigen, wie Sie den flexiblen Baustein richtig verdrahten.

  • Vermittlungsstelle

    Fischertechnik-Modelle bieten sich zum Fernsteuern an. Mit dem Ftduino schlagen Sie die Brücke zwischen dem RasPi und dem Technik-Spielzeug.

  • Durchgeschlängelt

    Mit den M0-Boards steigen Sie unkompliziert in die Welt der Mikrocontroller ein – ganz ohne C-Kenntnisse.

  • Gesiebt und gefiltert

    Filter und Werbeblocker einzurichten ist besonders auf Smartphones aufwendig. Den eBlocker hingegen schließen Sie einfach nur an Ihren Router an.

  • Es werde Licht

    Wollen Sie bei beginnender Dämmerung nicht ständig die Helligkeit der heimischen Beleuchtung nachregeln, überlassen Sie das einfach einem RasPi – der macht es automatisch.

  • Energiekontrolle

    Der Gesetzgeber erschwert das Direktvermarkten von Strom durch technische Hürden: So muss sich die Einspeisung etwa aus der Ferne abschalten lassen. Der RasPi löst das Problem.

  • H<->2<->-Power

    Gilt es, Energie aus einer regenerativen Quelle zu speichern, erweist sich die Kombi aus einer Brennstoffzelle und dem RasPi als ideale Lösung.

  • Kleine Wolke

    Lokale Cloud-Lösungen im Heimnetz finden immer mehr Nutzer. Mit dem RasPi und Seafile haben Sie eine Lösung zur Hand, die selbst professionellen Ansprüchen genügt.

  • Planvoll verdrahtet

    Die Leiterplattendesign-Software KiCad leistet trotz einer etwas umständlichen Bedienung auch Hobbybastlern gute Dienste.