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

04/2019
TV & Multimedia

Diese Ausgabe als PDF kaufen

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

Stellenmarkt

Neuigkeiten

  • Finger weg

    Ein Temperatursensor verrät, ob Sie einen Gegenstand gefahrlos berühren dürfen. Beim Messen brauchen Sie dabei noch nicht einmal Kontakt zum Objekt.

  • Aus einer Hand

    Um einen Mikrocontroller zu programmieren, genügt ein Raspberry Pi. Wir zeigen, was Sie dazu noch benötigen.

  • Im Gleichtakt

    Synchronisierte Live-Loops und selbst erstellte Funktionen helfen dabei, Sonic Pi wie ein Live-Instrument zu spielen.

  • Mach mal

    Das Ftduino-Modul schlägt die Brücke zu Fischertechnik und ermöglicht es unter anderem, einen Drei-Achsen-Roboter anzusteuern.

  • Eleganter Diener

    Jeden Morgen dieselben Handgriffe, um zu sehen, ob die S-Bahn fährt und wie das Wetter wird? Ein cleverer Infoscreen auf RasPi-Basis automatisiert den Vorgang.

  • Bienenflüsterer

    Bienenzüchter, die ihre Völker besser kennenlernen möchten, müssen die fleißigen Insekten nicht pausenlos stören. Mit einem Raspberry Pi und verschiedenen Sensoren überwachen sie Temperatur, Luftfeuchtigkeit und bald auch das Gewicht des Bienenstocks.

  • Beerige Musik

    Für echten Hi-Fi-Sound braucht es mehr als einen kleinen Bluetooth-Brüllwürfel. Mit Volumio und einem Raspberry Pi rüsten Sie Ihre klassische Hi-Fi-Anlage mit smarten Funktionen auf.

  • Ton ab!

    Auf den ersten Blick erscheint der RasPi zu schwachbrüstig für den Betrieb leistungshungriger DAW-Software. Doch der Schein trügt.

  • Himbeer-TV

    Der DVB TV µHAT rüstet den Raspberry Pi mit einem DVB-T/T2-Tuner auf. Die deutsche TV-Landschaft schränkt dessen Möglichkeiten allerdings ein.

  • Git à la RasPi

    Mit wenigen Handgriffen zum Git-Hoster: Die dezentrale Arbeitsweise von Git erleichtert in Kombination mit der Netzwerkfähigkeit des RasPi das Verwalten von Quellcode.