In seiner Funktionalität auf die Lehre in gestalterischen Studiengängen zugeschnitten... Schnittstelle für die moderne Lehre
In seiner Funktionalität auf die Lehre in gestalterischen Studiengängen zugeschnitten... Schnittstelle für die moderne Lehre
In diesem Kurs konnten wir durch die Verwendung von Sensoren dynamische Umgebungen gestalten, die auf menschliche Interaktionen reagieren. Wir untersuchten, welche ästhetischen und funktionalen Aspekte bei der Gestaltung solcher adaptiven Systeme, die auf Echtzeitdaten basieren, berücksichtigt werden sollten. Dieses Projekt dreht sich um eine „Digitale Jukebox“ die mithilfe eines Bilderkennungssystems verschiedene Objekte in der physischen Welt erkennt und den zugewiesenen Song inklusive Audiovisualisierung abspielt.
Nachdem wir ein paar Fingerübungen mit dem Lötkolben durchführten, widmeten wir uns verschiedenen Sensoren. Wir testeten Feuchtigkeits-, Temperatur-, Flammenerkennung- und Distanzsensoren und viele mehr. Dabei lernten wir die Daten live in der Arduino IDE auszulesen, zu strukturieren und zu verändern, um gezielt mit LED's Feedback zu kreieren. Um mit der Programmiersprache C++ warm zu werden, starteten wir eine 3D Cube challenge und erstellten verschiedene Leuchtmuster für die zuvor gelöteten 4x4 LED-Cubes.
Nachdem wir uns den Grundaufbau und Basiswissen für TouchDesigner aneigneten (TOPs, CHOPs, SOPs etc.), ging es um die Datenübertragung vom Arduino in TD. Dafür muss im Script der Arduino IDE definiert werden, dass die gesammelten Daten im Serial Monitor ausgegeben werden. Hierbei ist zu beachten, dass pro Iteration des Programms eine Zeile ausgegeben wird und die Datensätze jeweils mit einem Komma voneinander getrennt sind, damit die Daten für TD verwertbar sind. Anschließend muss die IDE geschlossen werden, damit TD auf den Serial zugreifen kann.
Mithilfe der TouchDesigner-Vorlagen im Miroboard lernten wir die Daten in komplexere Netzwerke einzuspeisen. Dabei war es wichtig ein Gefühl für die Aufbereitung der Daten zu entwickeln, da die Sensoren nicht immer 100% akkurate Datensätze ausspucken. Lösungsansätze zur Datenaufbereitung waren: Averaging (smooth transitions), Extreme/Ausreißer ignorieren, Delay beachten, Iterationsfrequenz anpassen.
Ich bastelte zum Testen ein kleines System mit zwei Abstandsmessern, welche die Position (X und Y-Koordinaten) eines Holzobjekts bestimmten. Diese waren an eine Sphere in einem Plakat in TouchDesigner gekoppelt. Damit ließ sich das Plakat mit einem physischen Objekt in Echtzeit verändern.
IDEE
Die Konzeptidee für mein Endprojekt, war relativ simpel. Ich war mir nur unsicher, ob es die Umsetzung auch sein wird. Der Plan war es drei Objekte als Interaktionsgegenstand zu nutzen. In diesem Fall Steine. Sie sollten einzeln unter einer Kamera platziert werden, um einen Song auszuwählen. Ein Bilderkennungssystem hinter der Kamera, sollte feststellen, welcher Stein platziert wurde und in Kommunikation mit TouchDesigner den dem Stein zugewiesenen Song abspielen. Jeder Track sollte mit einem digitalen Poster mit Infos und unterschiedlicher Sound Visualisierung präsentiert werden.
TECHNISCHE KOMPONENTEN
Neben meinem Laptop war lediglich ein ESP32-Cam Kamera Modul und ein USB C Kabel notwendig.
COLLECTING DATA
Der Aufwändigste Part in diesem Projekt, war die Entwicklung des Models für die Bilderkennung. Hierbei nutzte ich eine WEB-UI für Machine Learning names „Edge Impuls“. Ein gratis Tool, mit cloud-based Trainingsalgorithmen.
Ich sammelte viele Bilddaten mit der ESP-Kamera. Etwa 80 Bilder pro Stein aus verschiedenen Perspektiven mit verschiedenem Abstand.
IMAGE RECOGNITION
Anschließend dauerte es einige Zeit alle Bilder einzeln zu Labeln. Jedem Foto musste ein Ausschnitt und eines der Tags (stein-01, -02 oder -03) zugeordnet werden, um festzulegen, welches Bild zu welchem Stein gehört. Da die Namen der Labels am Ende auch der Textoutput im Serial in der Arduino IDE sind, ist es sinnvoll sich zu überlegen, welcher Output sich gut in TouchDesigner nutzen lässt.
Nach dem Labeln lassen sich features generieren. Es entsteht ein Cluster, anhand dessen man eine Übersicht über die Ähnlichkeit der Bilddaten erhält. Je mehr die einzelnen Bilder eines Labels beieinander liegen, desto besser. Je mehr verschiedenfarbige Punkte sich überschneiden, desto unpräziser könnte am Ende das Model werden. Auch hier gilt natürlich grundsätzlich, je mehr Bilddaten genutzt werden, desto höher ist die Wahrscheinlichkeit für ein gutes Ergebnis …
TRAINING MODEL
Beim Trainieren des Models lässt sich die Menge an Trainingszyklen bestimmen. Also wie oft das Model die vorgegebenen Datensätze durchlaufen soll. Je mehr, desto länger dauert das Training. Logisch. Auch die Lernrate lässt sich einstellen. Hier gilt grundsätzlich, je kleiner die Lernrate, desto langsamer lernt das Modell – aber oft auch stabiler und präziser.
Die confusion Matrix zeigt, wie hoch die Wahrscheinlichkeiten sind, dass die eingespeisten Bilder richtig zugeordnet werden. Es kann natürlich immer sein, dass die Bilder, welche die ESP-Cam später live aufnimmt, sich von den vorher eingespeisten unterscheiden. Zum Beispiel durch andere Winkel, Perspektiven oder Lichtverhältnisse.
DEPLOY MODEL
Zu guter Letzt lässt sich die Platform wählen auf der das Model laufen soll. In unserem Fall Arduino. Dadurch wird das Model in ein FOMO (Faster Objects, More Objects) Model umgewandelt. FOMO ist das Standardmodell für Object Detection-Projekte in Edge Impulse auf Mikrocontrollern. Nun erhält man eine .zip, die sich als Library in die IDE implementieren lässt.
PROCESSING
Anschließend nutzte ich den Code aus der Library und veränderte ihn so, dass ich als Output je nach erkanntem Bild, eine 1, 2 oder 3 erhalte. Wenn kein Bild erkannt wurde, wird eine 0 ausgegeben. Diese Zahlen setzen den Index eines Switch Operator in TouchDesigner und bedienen darüber die Selektion der vier Plakate. Wichtig hierbei für einen smoothen Übergang zwischen Comps zu ermöglichen, dass die Daten in TD nur über nur einen Serial DAT Operator ausgelesen und dann in die Comps übergeben werden. Wenn mehrere auf den Serial des Arduinos zugreifen wollen, kommt es zu starken Verzögerungen.
OUTPUT
NEXT STEPS
Als Nächstes möchte ich die Daten aus dem Arduino über das lokale Netzwerk an TouchDesigner übergeben. Dann wäre die Kamera mithilfe eines kleinen Akkus ein Standalone. Außerdem würde ich für diese beiden Komponenten ein kleines Case basteln.
Des Weiteren habe ich überlegt, eine Option hinzufügen, die Lautstärke zu regulieren. Das Bilderkennungsmodel spukt neben dem Tag des Objekts noch weitere Daten aus. Nämlich mit welcher Sicherheit er das Objekt erkannt hat und an welcher Position das Objekt liegt / wie die Koordinaten sind. Anhand dieser Informationen ließe sich z.B. festlegen, dass die Tracks lauter abgespielt werden, wenn die Objekte weiter oben platziert werden. Zusätzlich könnte man zur Orientierung eine grafische Lautstärkeskala in der Platzierungszone hinzufügen. Dennoch glaube ich, dass hierfür ein neues Model vonnöten wäre, damit diese Funktion präzise umgesetzt werden kann. Das aktuelle Model ist dafür zu fehleranfällig. Mit einem umfangreicheren Training mit höherer Bilddatenmenge ließe sich dies vielleicht erreichen.
Dieses reaktive Objekterkennungs-Poster-System lässt sich auf weitere Projekte übertragen. Es kann neben der Aufbereitung und Interaktion mit Musik natürlich auch für Ausstellungen genutzt werden, die bspw. wissenschaftliche oder kulturelle Themen behandeln. Sowohl die Objekte, als auch die Poster sind austauschbar.
Insgesamt fand ich den Kurs äußerst spannend. Es war eine 1A Möglichkeit, um mich tiefer in die Materie von TouchDesigner und Mikrocontrollern einzuarbeiten. Dieses Projekt legt vermutlich die Grundlage für meine zukünftige Bachelorarbeit.