Interaktion, Darstellung & Performance

Programmierung der Interaktion

Die letzten Tage war ich damit beschäftigt, dem Programm die Interaktion (Mouseclick -> an / aus der Charaktere) hinzuzufügen. Was darin resultierte, dass ich fast das gesamte visualize.py umgeschrieben habe. Anstatt der vielen draw-Befehle hat nun jedes Element eine Layer-Klasse. Dadurch wird es einfacher, festzustellen, über welchem Element sich die Maus befindet, und was alles abgeschalten wird wenn ein Charakter auf „aus“ gestellt wird (die Relationen sind Child-Layer ihrer jeweiligen Charaktere und werden somit auch ausgeschalten). Außerdem werden nicht mehr alle temporären Charaktere gezeichnet, sondern nur noch die 12 unique characters, die dann jeweils entsprechend umgefärbt werden.

Anpassungen der Darstellung

In der Gesamt-Übersicht werden nun die 5 dominantesten Emotionen mit Prozentangaben dargestellt – dadurch sind die Änderungen beim an/aus schalten ersichtlicher.

In der perLayer-Ansicht wird nach wie vor die erste Condition des Erzählers als Text ausgegeben mit Emotion, die auch die Mitte annimmt. Darunter werden allerdings auch die anderen Emotionen aufgelistet, die in diesem Absatz noch vorkommen.

Performance-Problem

Leider hat die Text()-Funktion in Python bzw. Pyglet ein memory leak. Da ich relativ viel Text in das Fenster schreibe, stürzt mein Programm schon nach etwa einer Minute ab. Trotz intensivem googlen und Bekannte um Lösungen fragen, habe ich bis jetzt noch keine Lösung dafür gefunden.

Screen Shot 2015-11-04 at 8.41.47 amScreen Shot 2015-11-04 at 8.22.19 am Screen Shot 2015-11-04 at 8.21.09 am

Screen Shot 2015-11-04 at 8.08.02 am Screen Shot 2015-11-04 at 8.00.08 am

Advertisements
Interaktion, Darstellung & Performance

Leichter verständliche Darstellung

Der Verständlichkeit und Übersichtlichkeit halber habe ich die dargestellten Informationen reduziert:

  • statt des gesamten Absatzes werden nur noch die relevanten Informationen dargestellt
  • anstatt in der Legende alle Farben darzustellen (bei 16 Farben wird der Platz ohnehin eng), schreibe ich die betreffende Farbe über die betreffende Aussage. Dadurch muss man auch nicht mehr suchen, welche Farbe welche Bedeutung hat

Weitere Forschritte:

  • die Relationen sind nach Emotion coloriert
  • die Relationen werden unter die Condition geschrieben, mit der Info von wen an wen die Relation ist

Dadurch ergibt sich die upgedatete To-Do-Liste:

  • Mittelwert der Emotionen (Conditions) berechnen
  • bei der Gesamtübersicht textlich ausgeben, was die „dominant emotion“ ist
  • anderen Charakteren Emotion zuordnen (aber keine „dominant emotion“ berechnen.. das wäre, denke ich, irreführend)
  • Charaktere klickbar machen

Screen Shot 2015-10-28 at 7.05.18 pm Screen Shot 2015-10-28 at 7.26.36 pm Screen Shot 2015-10-28 at 7.26.46 pm Screen Shot 2015-10-28 at 7.28.22 pm

Leichter verständliche Darstellung

Emotion to Color

Nachdem ich zuerst versucht hatte, die Emotionen-Liste von wefeelfine zu „stehlen“, musste ich feststellen, dass diese Zuteilung irgendwie überhaupt keinen Sinn machte. Sie definiert zwar ganze 108 verschiedene Farben, allerdings werden Begriffe wie „wonderful“ und „terrible“ der gleichen Farbe zugeordnet, was widersprüchlich ist, da diese beiden Adjektive einfach nicht der gleichen Emotion zugeordnet werden können.

Also wieder zurück zu den WNAffect Emotionen. Insgesamt findet das Script 16 verschiede Emotionen des Level 5 aus dem Emotionen-Baum. Anhand eines Color-Wheels habe ich Farben für diese 16 Emotionen definiert:

Screen Shot 2015-10-26 at 8.48.45 pm

und mich dabei im Großen und Ganzen an Erkenntnisse aus der Farbpsychologie gehalten, siehe z.B.

Screen Shot 2015-10-26 at 8.09.28 pm

Emotion to Color

Theoretische Fragestellungen

Fragen, die in der theoretischen Arbeit beantwortet werden können:

  • Wie verändert die visuelle Repräsentation die Aussage? welchen EInfluss hat sie auf den Wert für den User?
  • Welche Visualisierungsgesetze werden beachtet?
  • Warum spielt Interaktion so eine große Rolle?
  • Warum Emotionen anhand von Farben darstellen?
  • Wahl der Repräsentationen.. Relation als Linien, Charaktere als Formen, das gesamte Bild kreisförmig angeordnet..

Außerdem ist mir noch aufgefallen: schon während der Erstellung der Visualisierung habe ich Erkenntnisse aus visuellen Repräsentationen gewonnen. Die Visualisierung selbst zB hat es mir einfacher gemacht, Fehler in meiner Analysierung zu erkennen. Aber auch die Ausgabe der NLTK Trees und verschiedenste selbst geschriebene „print“ Funktionen haben geholfen, das Script überhaupt zu schreiben und zu verstehen und zu überprüfen.

Theoretische Fragestellungen

Up Next

Aus dem gestrigen Gespräch haben sich folgende weitere Must-Have-Kriterien herausgebildet:

  • Interaktionsmöglichkeit: Figuren und Geschichten ein- und ausblenden -> dadurch wird ersichtlich, wie sich der „durchschnittliche“ Zustand des Erzählers je nach Person verändert
  • Protokollebene: „Momentaufnahmen“ müssen gespeichert und nebeneinander angezeigt werden können, damit man verschiedene Zustände miteinander vergleichen kann

Aus meinen heutigen Versuchen heraus ergibt sich außerdem:

  • klären: Farben der Relations
  • berechnen der „Durchschnittsfarbe“: nicht addieren der einzelnen Farben, sondern berechnen, welche am häufigsten vorkommt, sodass ein klarer Zustand angezeigt wird
  • was tun mit Zuständen, die keine Emotion sind, wie zB sick, pain, suffer,…? -> Idee: anstatt der Emotions Library die Emotionen-Liste von wefeelfine verwenden: http://wefeelfine.org/data/files/feelings.txt
Up Next

Neue Sichtweisen

Das erste Update nach dem Gespräch mit Hubert: Einige Dinge sind klarer geworden, manche müssen sich noch durch Experimentieren klären.

Das erste, was ich heute gemacht habe, war, die „femaleColor“ und „maleColor“ durch Formen (Quadrat/Kreis) zu ersetzen. Damit stehen mir wieder alle Farben zur Verfügung.

Die Relations habe ich dann auf 2 Farben reduziert (Narrator-to-Figure, Figure-to-Narrator), wobei die momentan gewählten Farben nicht die endgültigen sein werden, sondern wahllos zugewiesen wurden.

Dann habe ich die Conditions wieder so umgeschrieben, dass die genaueren Beschreibungen der Emotionen gespeichert werden, d.h. nicht nur „positive“, „negative“, usw., sondern die erste klarer definierte Emotion ( entspricht Level 5, was man gut in dieser Grafik sehen kann: https://www.gsi.dit.upm.es/ontologies/wnaffect/img/wnaffect.svg)

Nun wird pro Emotion der gesamte Narrator-Kreis eingefärbt. Wird keine Emotion gefunden, bleibt der Kreis leer. Auf der Gesamt-Übersicht addieren sich alle Emotionen übereinander.

Zum Schluss habe ich noch eine schnelle Legende gebastelt, damit das alles ein wenig verständlicher wird.

Screen Shot 2015-10-22 at 11.37.12 AMScreen Shot 2015-10-22 at 1.42.58 PMScreen Shot 2015-10-22 at 1.41.55 PMScreen Shot 2015-10-22 at 1.42.10 PMScreen Shot 2015-10-22 at 1.57.57 PM

Neue Sichtweisen