Dog Park

Inspiration

Ich wollte es wissen – was kann AWS DeepLens "direkt aus der Box"? Die meisten Benutzer, die DeepLens zum ersten Mal verwenden, haben wenig Erfahrung mit Machine Learning oder Deep Learning. Amazon SageMaker ist ein leistungsstarkes Tool, jedoch dauert es eine Weile, bis man damit so richtig loslegen kann. Also wollte ich sehen, was die Beispielanwendungen können. Und das war, wie sich herausstellte, eine ganze Menge.

Funktionsweise

Dog Park führt das Hotdog/No Hotdog-Modell aus und berechnet die Wahrscheinlichkeiten für die höchsten Treffer. Danach untersucht es, ob der höchste Treffer ein Hund ist. Hierfür wird das Motiv mit der Untergruppe der 1 000 Kategorien abgeglichen, bei denen es sich um Hunde handelt. Meint die Anwendung, einen Hund zu erkennen, untersucht sie die Wahrscheinlichkeit. Ist diese größer als der vorgegebene Grenzwert (ich habe diesen willkürlich auf 0,5 gesetzt), bestätigt die Anwendung, dass es sich um einen Hund handelt. Danach sieht sie sich den nächsten Kategorietreffer an und bestimmt, ob es ein Hund ist. Wenn dem so ist, schreibt sie das Vollbild – nicht das für die Erkennung verwendete Kleinformat – in einen S3-Bucket. Außerdem schreibt sie die beiden wahrscheinlichsten Rassen sowie die Bild-URL in ein MQTT-Thema. Die Ergebnisse können in der AWS IoT-Konsole verfolgt werden. Eine zweite Lambda-Funktion (geschrieben in Node.js) mit dem Namen DogParkNotifier empfängt die Nachricht aus dem Thema und extrahiert die relevanten Felder mit einer SQL-Anweisung. Die Felder werden formatiert – dabei wird die Wahrscheinlichkeit auf eine ganze Zahl gekürzt –, und über SNS an den Benutzer gesendet. Sie können als SMS-Textnachricht oder als E-Mail versandt werden. Ein weiterer Schritt ist zur Einrichtung des E-Mail-Pfads erforderlich (Erstellung eines Themas und Verifizierung der E-Mail).

Das visuell sichtbarste Ergebnis ist eine SMS-Textnachricht an das Smartphone mit dem Bild des Hundes und den ermittelten Wahrscheinlichkeiten. Das Ergebnis innerhalb weniger Sekunden auf dem Handy zu haben, nachdem ich die DeepLens-Kamera auf einen Hund gerichtet habe, ist schon ziemlich beeindruckend.

Interessant finde ich es aber auch, dass sich die Wahrscheinlichkeiten bei jeder Aufnahme ändern. Hunde halten kaum still. Deswegen ändert sich auch die Erkennungswahrscheinlichkeit, je nach Bewegung des Hundes manchmal um bis zu 10 %.

Die Leute, die ich im Park getroffen habe, waren sehr offen für mein technologisches Experiment. Sie wollten unbedingt sehen, was DeepLens zu ihrem Hund sagen würde.

Erstellt von: Dan Brennan

Entwicklung

Die Entwicklung begann mit der Beispielanwendung "Hotdog or No Hotdog". Sie konnte, wie ich feststellte, eine große Vielfalt von Hunderassen erkennen, und so dachte ich mir, würde sie ein großartiger Anwendungsfall für Anfänger sein. Der von mir entwickelte Code kann sehr einfach wiederverwendet werden. Der Benutzer benötigt ein AWS-Konto. In der Region, in der die Lambda-Funktionen bereitgestellt werden, muss er einen S3-Bucket erstellen. Für diesen S3-Bucket muss er eine IAM-Rolle einrichten und auch in der Lambda-Funktion muss er eine IAM-Rolle mit ausreichenden Berechtigungen einschließen. Der Code enthält einen Platzhalter für [YOUR_BUCKET_NAME]. Außerdem benötigt der Benutzer Zugriff auf die DeepLens-Beispielanwendung "Hotdog or No Hotdog".

Der zweite Teil der Anwendung besteht aus der Lambda-Funktion DogParkNotifier. In dieser Funktion wird die Telefonnummer oder E-Mail-Adresse des Benutzers für die Benachrichtigung via SNS eingerichtet. 

Herausforderungen

Für diese Demo habe ich weit über 100 Builds erstellt. Tatsächlich habe ich an dieser Anwendung mehr als vier Wochen und über 100 Stunden geknobelt. Ich durchlebte eine enorme Lernkurve. An das Debugging von Python-Lambda-Code in DeepLens musste ich mich erst gewöhnen. Das DeepLens-Gerät wurde sehr schnell registriert. Die Anweisungen waren gut. Für DogParkNotifier musste ich mich erst in Node.js einarbeiten. Und natürlich tappte ich in die Falle der automatischen Betriebssystemaktualisierung, wodurch mein WLAN ausfiel. Das für DeepLens zuständige AWS-Team stellte mir aber sehr schnell eine Behelfslösung bereit.

Herausfordernd war es, DeepLens für den Einsatz im Freien fit zu machen. Ich probierte es mit einem Akkupack, wie Sie ihn auch zum Laden Ihres Smartphones verwenden. Die Ausgangsleistung war jedoch 3,2 A, und DeepLens benötigt 4,0 A. Das System versuchte sich hochzufahren, schlug aber nach wenigen Sekunden fehl. Andere marktgängige Akkupacks lieferten 4,8 A. Ich wollte DeepLens aber nicht braten. Also ging ich auf Nummer Sicher und entschied mich für ein Wechselstromnetzteil. Dies hatte auch den Vorteil, das es Tonnen an Energie speichern kann, mit denen DeepLens mindestens 10 Stunden läuft. Der Nachteil ist, dass es etwas sperrig ist. Es kostete mich 79 USD, ein wenig mehr, als ich für einen Akkupack ausgegeben hätte.

Mein Mobilfunkanbieter (Verizon) sperrte die von Dog Park eingehenden Textnachrichten nach wenigen hundert Nachrichten. Ich konnte diesen Wert nicht zurücksetzen und fand auch keine Dokumentation von Verizon zu dieser Einschränkung. AWS versuchte die Nachrichten zu übertragen, meldete aber das vollständige Unvermögen, Nachrichten vom Mobilfunkbetreiber zu übermitteln. Ich behalf mich mit der Zustellung via E-Mail.

Dann machten Wetterkapriolen Tests schier unmöglich. Bei den frostigen Temperaturen in New Jersey führte niemand mehr seinen Hund spazieren. Auch konstanter Dauerregen kurz vor Ende des Wettbewerbs vermasselte uns die Tests. Zweimal besuchten wir aber den Park, und dabei zeigten sich die Ergebnisse als erstaunlich präzise.

Ein weiteres Problem war die Internetverbindung. Diese benötigt DeepLens, um Bilder nach S3 zu übertragen und das MQTT-Thema auszufüllen. Mein Handy fungierte als Hotspot und als Empfänger der Textnachrichten. Die Hotspot-Verbindung wurde allerdings, wie sich herausstellte, getrennt, wenn sie nicht genutzt wurde. Und DeepLens versuchte keine Neuverbindung. Die Lösung war also zwiespältig. Das nächste Mal nahm ich ein iPad mit und richtete es als Hotspot ein. Aus irgendeinem Grund hält das iPad die Verbindung zum Hotspot auf meinem Handy, und dadurch blieb auch DeepLens verbunden. Auch entfernte ich die alternativen drahtlosen Verbindungen aus dem Ubuntu-System von DeepLens. Ich hatte eine drahtlose Hochgeschwindigkeitsverbindung für die Entwicklung und eine zur Fernbedienung für den Hotspot. Sobald der Hotspot unerreichbar war, versuchte er eine Neuverbindung mit dem Hochgeschwindigkeits-WLAN-Netzwerk, das aber natürlich im Hundepark nicht verfügbar war. Und so gelang ich also nicht mehr zum Hotspot zurück. Also musste ich alle anderen WLAN-Verbindungen in der Liste löschen, bevor ich das Haus auf dem Weg zum Hundepark verließ.

Ein mysteriöses Problem waren auch Lambda-Funktionen, die sich in DeepLens bereitstellten, aber dann ging das Kameralicht nicht mehr an. Das Python-Protokoll auf dem Gerät zeigte keine Fehler. Das AWS-Team riet mir (während seiner #Öffnungszeiten), Folgendes im DeepLens-System einzugeben:

aws_cam@Deepcam:~$ git clone https://github.com/boto/boto3.git aws_cam@Deepcam:~$ cd boto3 aws_cam@Deepcam:~$ sudo cp -r boto3 /usr/local/lib/python2.7/dist-packages aws_cam@Deepcam:~$ sudo pip install awscli –force-reinstall –upgrade

Das funktionierte. Der Trick war also die Neuinstallation der AWS CLI.

Erfolge, die mich stolz machen

Ich bin stolz, dass es funktioniert. Ich habe sehr viel über Lambda, DeepLens, Python, IAM, Themen und all die Myriaden Probleme gelernt, die ein Projekt scheitern lassen können. Ich dachte, dieses Projekt würde mich etwa 10 Stunden kosten. Tatsächlich brauchte ich mehr als 100 Stunden. Das Projekt hielt mich zahllose Nächte wach.
Deswegen bin ich stolz, dass ich es abgeschlossen habe. Die Grundlage war das Hotdog-Beispiel, aber daraus wurde etwas sehr Interessantes, das weit über diese Anwendung hinausreicht. Die Anwendung nutzt Deep Learning und sie macht die Menschen neugierig. Die Leute fragen, wie sie funktioniert.

Was ich gelernt habe

Ich habe gelernt, dass ich die Dauer eines Projekts völlig falsch einschätze! Ich habe sehr viel über die AWS-Services gelernt. Ich habe die praktische Seite kennengelernt, wie man alles zusammensetzt. Ich habe im Laufe des Projekts gelernt, schneller zu arbeiten. Nach der Bereitstellung einer Lambda-Funktion wundere ich mich nicht mehr über deren Verbleib. Ich konnte herausfinden, wo sich die Python-Protokollnachrichten in DeepLens befinden.

Die Zukunft von Dog Park

Dog Park braucht unbedingt einen kleineren Akkupack. Der Grenzwert sollte in einer Apple IOS-App programmierbar sein, damit er auch unterwegs eingestellt werden kann. Ich sollte das Thema Sicherheit angehen. Diese stand während meiner Tests doch noch sehr weit offen.
Ich spiele mit dem Gedanken der Vogelerkennung an Futterhäuschen. Dazu muss ich das Modell jedoch noch optimieren und es auf die Vielfalt der Vogelwelt trainieren. Natürlich wird Amazon SageMaker der Schlüssel zu diesen Weiterentwicklungen sein.

Entwicklung mit

Lambda
DeepLens
Python
Node.js
S3
Amazon SNS

Jetzt testen