Datenanalyse in der Cloud Autos zählen mit ThingSpeak

Daten in der Cloud mit ThingSpeak auswerten.
Daten in der Cloud mit ThingSpeak auswerten.

Eine Webcam, ein Raspberry Pi und Simulink für die Software-Entwicklung – mehr ist nicht nötig, um automatisiert Fahrzeuge zu zählen. Spannend wird es, wenn die Daten in der Cloud ausgewertet werden, wie hier exemplarisch am Beispiel von ThingSpeak gezeigt wird.

Das Internet of Things (IoT) entwickelt sich rasant zu einem Ort, an dem praktisch jedes „intelligente“ Hardware-Gerät – ob Mobiltelefon, Schrittmacher, tragbarer Fitness Tracker oder gar Kühlschrank – mit dem Internet verbunden werden kann, um Daten zu generieren und zu empfangen. Hier soll an einem einfachen Beispiel gezeigt werden, wie das konkret funktioniert. Eine Webcam, ein Raspberry Pi, der Cloud-Dienst ThingSpeak und ein paar Zeilen Code reichen aus, um eine echte IoT-Anwendung zu bauen. Der Ursprung dieses Projekts geht auf zwei Ingenieure zurück, die – genervt vom Stau – die Verkehrsflusstrends auf der stark befahrenen Fernstraße vor ihrem Gebäude zu untersuchen wollten. Sie installierten eine Webcam in einem Büro mit Blick auf die Straße und schlossen sie an ein Raspberry Pi Board an, auf dem ein Bildverarbeitungsalgorithmus läuft, der die Autos zählt. Die Daten werden an ThingSpeak gesendet, eine analytische IoT-Plattform, die Matlab-Code ausführt und die Daten damit sammelt und analysiert.

Der Autozähler besteht aus einem Raspberry Pi 2 und einer USB-Webcam. Die Webcam, eine Logitech HD Pro C920, wurde auf einem flexiblen Stativ montiert. Die Kamera steht am Fenster im 3. Stock eines Bürogebäudes mit Blick auf die Route 9 in Natick, Massachusetts. Die Blickrichtung wurde so gewählt, dass beide Fahrtrichtungen gut erfasst werden. Per USB ist die Kamera mit dem Raspberry Pi verbunden und an einem weiteren USB-Anschluss des Raspberry Pi befindet sich ein WLAN-USB-Dongle von Wi-Pi. Wenn man den neueren Raspberry Pi 3 verwendet, kann selbst der WLAN-Dongle entfallen, da der Raspberry Pi 3 WLAN bereits integriert hat.

Da es nicht sinnvoll ist, bandbreitenintensive Videobilder in die Cloud zu senden, werden die Fahrzeuge mit dem Prozessor des Raspberry Pi 2 detektiert. Die Anzahl der erkannten Fahrzeuge wird dann an den Datenaggregator ThingSpeak in der Cloud gesendet, wo die Daten alle 15 Sekunden aktualisiert werden.

Ein Bildverarbeitungsalgorithmus zur Erkennung der vorbeifahrenden Fahrzeuge ist keine triviale Angelegenheit. Aber warum neu erfinden, was es schon gibt? – Die Modellierungsumgebung Simulink bietet fertige Bausteine an, aus denen der Code für die Bilderkennung vollständig generiert werden kann. In diesem Beispiel generiert Simulink Code für den Raspberry Pi 2. Das Simulink-Modell für den Auto-Zählalgorithmus zeigt Bild 2.

Zur Entwicklung des Algorithmus kommt der „external mode“ von Simulink zum Einsatz. In diesem Modus erfasst Simulink den Videostream des Raspberry Pi und der Anwender kann das Video mit dem SDL-Video-Display-Block auf einem externen Monitor anzeigen, während der Algorithmus ausgeführt wird (Bild 3).

Betrachtet man das Simulink-Modell von links nach rechts, dann ist zu sehen, dass der Datenfluss links mit der USB-Webcam beginnt, die mit dem Raspberry Pi verbunden ist. Von den erfassten Videodaten wird ein zu untersuchender Bereich ausgewählt. Als Nächstes schätzt „vision.ForegroundDetector“ die Vordergrundpixel der Videosequenz, die von der stationären Webcam erfasst wird.

Den Hintergrund separiert „vision.ForegroundDetector“ mit Hilfe von Gaußschen Mischverteilungsmodellen und erzeugt eine Vordergrundmaske, in der die Vordergrundobjekte hervorgehoben werden – in diesem Fall fahrende Autos. Die Vordergrundmaske wird noch mit einem Medianfilter nachverarbeitet, um unerwünschtes Rauschen zu entfernen. Dann wird sie mit dem Blob-Analyseblock analysiert, der Schwerpunkte der Blobs berechnet, die die Autos enthalten. Schließlich schätzt der Autozählerblock die Anzahl der Autos, die im 15-Sekunden-Intervall in jede Richtung fahren. Dieser Block teilt den zu untersuchenden Bereich in zwei Teilabschnitte auf (oberhalb und unterhalb des Mittelstreifens der Schnellstraße). Er zählt dann die Autos oberhalb und unterhalb dieser Linie. Abschließend werden die Daten mit dem write-block von ThingSpeak an den Datenaggregator gesendet. Dieser Block enthält je einen Wert für die Anzahl der Fahrzeuge in Richtung Osten und einen für die Anzahl in Richtung Westen. Beide Werte werden an den ThingSpeak-Kanal 38629 gesendet und in Feld 1 für die westliche Richtung sowie in Feld 2 für die östliche Richtung gespeichert.