Spielerische Kunst

Challenge

Entwicklung einer Plattform, die Usern hilft Kunst zu erschaffen.

Lösung

Eine Website, mit der es möglich ist, eine API zu bedienen die durch einen Microservice Bilder in einen anderen Kunststil überträgt.

Technologien

Python, Tensorflow, Keras, Flask Docker

 

Challenge

Kunst erschaffen macht Spaß. Aber viele Menschen sind nicht talentiert genug, um selbst Künstler zu sein, und wenn sie es doch sind, bleibt oft viel zu wenig Zeit, um sich frei auszuleben. Hier kommt MAI, unsere KI, ins Spiel. Mit künstlicher Intelligenz können wir einen Teil der Arbeitslast auf sie auslagern

Client

In dieser speziellen Case Studies agieren wir in einem Demoprojekt. Wir sind also im Grunde unser eigener Kunde. Trotzdem wollten wir uns wie zwei verschiedene Unternehmen verhalten. So konnten wir den gesamten Prozess von Planung über die Entwicklung und dem Deployment von Anfang bis Ende durchführen und testen. Der fiktive Kunde in diesem Szenario ist ein Unternehmen, das einen Online-Überblick über neue KI-Technologien bietet. Sie wollen ein Bild-zu-Kunst-Konverter-System online anbieten, das den Benutzern die Möglichkeit bietet, ein Bild hochzuladen und dieses in Kunst zu verwandeln.

Lösung

Zunächst mussten wir die Anforderungen spezifizieren. Einige wurden von Kunden vorgegeben, jedoch waren uns diese nicht detailliert genug. Diese Anforderungen lauten:

  • Es muss ein Web-Frontend vorhanden sein
  • Der Benutzer muss in der Lage sein, ein Bild hochzuladen.
  • Das gesamte System läuft als Webservice (und hat daher nur begrenzte Rechenkapazitäten)

Nach diesen ersten Anforderungen benötigten wir weitere Detailinformationen. Zum Beispiel: Lädt der Benutzer ein anderes Bild zum Konvertieren hoch oder gibt es einen festen Pool an vordefinierten Stilen? Muss der Algorithmus während des Betriebs weiter trainiert werden und wird es eine Feedback-Option geben?

Die meisten optionalen Anforderungen wurden verworfen, dennoch wurden einige als ausreichend angesehen. Das Endergebnis sieht wie folgt aus:

  • Es wird ein Web-Frontend vorhanden sein
  • Der Benutzer muss in der Lage sein, ein Bild hochzuladen und entweder einen Stil auszuwählen oder ein zweites Bild als Stile-Bild hochzuladen
  • Das gesamte System läuft als Webdienst (und hat daher nur begrenzte Rechenkapazitäten)
  • Der Algorithmus wird implementiert und nicht weiter trainiert

Zunächst begannen wir mit der Erforschung der Best-Practice Methoden für diese Aufgaben. Hierbei ist zu beachten, dass das Erstellen aus einem vorgegebenen Bild und das Konvertieren von einem Bild in den Stil eines anderen zwei vollkommen verschiedene Aufgaben sind.

Wir implementierten ein Offline-System, das ein Bild als Inhaltseingabe übernehmen und eine angepasste Version davon in einem bestimmten Stil produzieren kann. Dieses Produkt erfüllte keine der oben definierten Kriterien, zeigte aber die Realisierbarkeit des Projekts. Die Offline-Version ist ein Python-Modul, das verschiedenste Bedingungen mittels Befehlszeilenargumente erfüllt. Bevor wir die restlichen Funktionen hinzufügen, haben wir beschlossen, diesen Teil zuerst abzuschließen. Daher machten wir uns auf die Suche nach einem geeigneten Cloud-VM-Betreiber.

Der gesamte Prozess des Hochladens des Projekts auf den Server eines Cloud-Betreibers erwies sich als ziemlich knifflige Herausforderung. Zunächst haben wir unsere API über die OpenAPI 3.0-Spezifikation definiert. Anschließend wurde das Python-Modul in einen leicht implementierbaren Docker Container umgewandelt, nur um festzustellen, dass unsere Cloud-Betreiber keine Docker Container unterstützten.

In der Zwischenzeit entwickelten wir ein einfaches, aber funktionales Frontend, dass die definierte API bedient.

Bei der Lösung des Docker Problems haben wir den zweiten Algorithmus implementiert, der ein Inhalts- und ein Stilbild annimmt und diese zu einem Bild zusammenführt. Beide Modelle bieten eine benutzerfreundliche Befehlszeilenschnittstelle, die so einfach wie möglich gestaltet wurde. Auf diese Weise können wir beide Modelle mit den gleichen Parametern aufrufen und müssen den Servercode beim Hinzufügen neuer Funktionen nicht weiter ändern.

Wir haben das Docker-Problem gelöst, indem wir dieses System auf unsere hauseigene Serverlandschaft portiert haben, die Docker perfekt unterstützt. So unterstützt MAI, unsere eigene AI in der Cloud, zwei weitere Funktionen.

Ergebnis

Der größte Erkenntnisgewinn, den wir bei der Durchführung dieses Demo-Projekts erlangten, bestand darin, dass wir uns bei der Bereitstellung unserer Services nicht mehr auf Systeme von Drittanbietern verlassen müssen. Wir haben das Ziel erreicht, ein Web-Interface zu schaffen, das alle Anforderungen erfüllt, und zwar im gewünschten Zeitrahmen. Obwohl wir den Kurs des Projektes mehrmals ändern mussten, haben wir ein Produkt, das tolle Ergebnisse liefert. Da dies lediglich ein erster Test war, müssen wir nun die Ausführung untersuchen, fehlerhafte Prozesse lokalisieren und unser Management aufpolieren.