Wie können Alltagsobjekte erkannt und für die Erzeugung und Manipulation von Musik genutzt werden?

Ist es möglich, mithilfe künstlicher Intelligenz Objekte zu identifizieren und daraus genug Informationen zu ziehen, um Musik zu generieren und zu manipulieren?

Mithilfe von verschiedenen Ansätzen und Technologien lassen sich auf jeden Fall interessante Dinge vollbringen.

Von Holzblöcken, über Farbe zum Objekt

Noch bevor Technologien recherchiert, Farben oder Objekte ausgewählt wurden, hatte sich die Idee, mithilfe von Objekterkennung Musik zu generieren oder zu manipulieren, gefestigt.

Zu Beginn wurde TensorFlow benutzt, um ein eigenes neuronales Netz zu erstellen und mithilfe dessen die antrainierten Gegenstände zu erkennen.

Leider erwies sich TensorFlow als nicht performant genug und musste ad acta gelegt werden.

Nach weiterer Recherche wurde YOLO in die Auswahl möglicher Lösungen aufgenommen und war nach einigen Testläufen unsere aussichtsreichste Möglichkeit.

Erste ernsthafte Erfolge erzielten wir mit YOLOv3 und einigen simplen neuronalen Netzen, die nur wenige Gegenstände oder Gesten erkannten.

Zu diesem Zeitpunkt war bis auf eine visuelle Repräsentation des Erkannten keine Datenweitergabe möglich und somit die Kommunikation mit der restlichen Software unmöglich.

Yon YOLO zum Wert

Um eine noch performanteres System zu garantieren, wurde schließlich YOLOv5 gewählt. Durch seine modernisierten Algorithmen und die dort mitgelieferten „weights“ ist es gleichzeitig ressourcenschonend und schnell.

Die „weights” – sozusagen das Gedächtnis der Objekterkennung – sind äußerst vielfältig nutzbar und bieten ein weites Anwendungsspektrum.

1. Objekterkennung modifizieren

Neben der eigentlichen Erkennung der Gegenstände, muss sowohl die Art des Gegenstandes, als auch seine Position ausgelesen und für die weitere Verarbeitung aufbereitet werden. Dies erfolgt in der von YOLOv5 mitgelieferten Datei detect.py.

Dort werden die Klassen und die Koordinaten der aktuell erfassten Objekte gesammelt in eine CSV-Datei geschrieben. Alle Daten sind nun als einfache Liste gespeichert und werden laufend aktualisiert.

2. Eine Datei verarbeiten

Die CSV-Datei enthält die Klasse, sprich die Art, des Objektes, sowie die Koordinaten der vier Eckpunkte der Box darum. Zunächst werden diese Werte separat gespeichert, um spezifische Namen und Werte daraus zu generieren.

Die Klasse liefert eine einfache Zahl und wird für die Zuweisung des Objektes für einen Filter genutzt.
Die Koordinaten werden genutzt, um die Mittelpunkte des Objektes auf der X- und der Y-Achse zu bestimmen. Diese werden genutzt, um die Intensität der Filter zu steuern.

3. Von CMD zu DAW

Um tatsächlich Musik manipulieren zu können, mussten nun Zuweisung und Werte der einzelnen Filter übermittelt werden. Hierzu dient Python-OSC als Schnittstelle. Die darüber im OpenSoundControl Format gesendeten Daten können nun von Max/MSP verarbeitet werden und individuell zur Steuerung von Ableton Live über die Max for Live Schnittstelle genutzt werden.

4. Vom Objekt zum Sound

Die Objekte wurden sowohl zur Manipulation der Musik genutzt, als auch um diese zu erzeugen. Mithilfe von verschiedenen Objekten und den Geräuschen die diese von sich geben, wurden mittels Effekten Töne generiert, die so verfremdet eine eigenartige Atmosphäre ergeben.

Die Spielwiese und der Weg dorthin

Der eigentliche Spaß findet auf einem eigens verkleideten Glastisch statt, auf den der oder die Neugierige ein Objekt legen kann. Von unten verfolgt eine Kamera das Objekt und übermittelt die Art und die Position des Objektes an Ableton. Dort werden die gesammelten Daten genutzt, um verschiedene Effekte zu steuern und die Musik live zu beeinflussen.

Beschreibung des Bildes.
Flowchart der Software

Es war spannend, sich mit neuronalen Netzen auseinander zu setzen und die Methodik der Objektverfolgung für etwas Kreatives zu nutzen. Dadurch, dass wir unterschiedliche Technologien getestet haben, war es reizvoll die Grenzen der jeweiligen Technologie zu erkennen. Auch wenn es schade war, wenn wieder von vorne angefangen werden musste.

Außerdem konnten wir unser Wissen bezüglich der Signalübertragung vertiefen. Die Anzahl der einzelnen Übertragungsschritte scheint nicht sonderlich hoch, allerdings ist die Kommunikation bestimmter Komponenten untereinander herausfordernder gewesen, als zunächst angenommen.

Folgende Software und Python Bibliotheken wurden verwendet:

Team

Adrian Jehne, Tobias Wagner

Betreuung

Prof. Damian Gerbaulet