123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212 |
- In diesem Abschnitt der Arbeit werden die Hauptfunktionen der GUI vorgestellt und erklärt.
- Beim Design der GUI wurde besonders darauf geachtet, dass die GUI übersichtlich und leicht zu benutzen ist.
- Daher können verschiedene Funktionen sowohl mit der Tastatur, als auch über Buttons aktiviert werden, je nachdem wie es dem Nutzer am besten gefällt.
- Die GUI wurde zudem so entworfen, dass die Annotation möglichst automatisch erfolgen kann. Der Nutzer muss die automatischen Annotationen dann nur noch leicht anpassen.
- Das ist möglich, da im Prozess des maschinellen Lernens das verwendete unfertig trainierte System recht schnell schon Vorhersagen darüber treffen kann, wo sich auf
- einem neuen Bild vermutlich Objekte befinden. Diese Vorhersagen werden in dieser Arbeit als Vorabannotationen bezeichnet.
- Für diesen Zweck enthält die GUI einen Client, der über ein Netzwerk (z.B. Internet) nach Vorabannotationen fragen kann.
- Dabei wird das Bild an einen Server gesendet, welcher mit dem lernenden System kommuniziert.
- Der Server antwortet schließlich mit einem segmentierten Bild, auf dem alle Pixel mit der gleichen Farbe zu einem erkannten Objekt gehören.
- Aus diesem Bild extrahiert der Client dann die Eckpunkte der Objekte.
- Auf diese Weise muss der Nutzer der GUI nur noch die erkannten Objekte anpassen. Dafür benötigt die GUI also nicht nur Funktionen zur Erstellung von Annotationen,
- sondern auch Funktionen zur nachträglichen Veränderung von Annotationen.
- Um eine leicht benutzbare GUI zu entwerfen, müssen die verschiedenen grafischen Oberflächen gut strukturiert und durchdacht sein.
- Wenn es zum Beispiel zu viele verschiedene Knöpfe oder zu viele verschiedene Oberflächen gibt, dann verliert der Nutzer sehr schnell den Überblick.
- Wenn es aber zu wenig verschiedene Oberflächen gibt, dann ist die Steuerung oft zu kompliziert, da alle Funktionen auf einer Oberfläche angeboten werden müssen.
- Die im Rahmen dieser Arbeit entworfene GUI bietet für folgende Funktionen eigene Oberflächen:
- \begin{compactenum}[(i)]
- \item Das Erstellen und Verändern von annotierten Objekten (Hauptoberfläche \ref{sec:hauptansicht})
- \item Das Erstellen von Masken für die Kameras (Maskenoberfläche \ref{sec:maskenansicht})
- \item Das Zuweisen von Objekt-IDs für dieselben Objekte auf unterschiedlichen Bildern (Objekt-Zuweisungsoberfläche \ref{sec:objektZuweisungsansicht})
- \item Das Verwalten von verschiedenen Objektklassen, welche in einer Sequenz annotiert werden sollen (Klassenoberfläche \ref{sec:klassenAnsicht})
- \end{compactenum}
- In den folgenden Abschnitten wird auf das Design dieser Oberflächen näher eingegangen und es werden ihre Funktionalitäten erläutert.
- \section{Hauptoberfläche}\label{sec:hauptansicht}
- Dies ist die Oberfläche, die der Nutzer beim Starten der Anwendung zu Gesicht bekommt.
- Ihre volle Funktionalität erhält die Oberfläche jedoch erst,
- sobald der Nutzer eine Sequenz zum Annotieren geladen hat.
- Im oberen Bereich befindet sich dafür eine Leiste mit Befehlen, wie zum Beispiel das Laden und Speichern einer Sequenz.
- Auch einige Anzeigeoptionen können über diese Leiste gesteuert werden.
- Die Leiste wurde dort platziert, weil es bei vielen anderen GUIs genauso gemacht wird (zum Beispiel bei den OpenOffice Anwendungen).
- Der Nutzer ist es also schon durch andere Anwendungen gewohnt in diesem Bereich eine solche Leiste vorzufinden.
- Die Oberfläche darunter ist in drei weitere Oberflächen aufgeteilt:
- \begin{compactenum}[(i)]
- \item Eine Arbeitsfläche \ref{sec:arbeitsansicht}
- \item Einen Navigationsbaum \ref{sec:objectBaum}
- \item Ein Hilfstext \ref{sec:hilfstext}
- \item Eine Werkzeugpalette \ref{sec:werkzeuge}
- \end{compactenum}
- Die Arbeitsfläche nimmt den größten Teil der Hauptoberfläche ein, da hier die Bilder angezeigt werden, welche annotiert werden sollen.
- Dabei sollen auch große originale Bilder noch gut erkennbar sein.
- Links oben befindet sich die Werkzeugpalette, damit der Nutzer immer sehen kann welches Werkzeug momentan aktiviert ist und welche Werkzeuge er zur Verfügung hat.
- Links unten befindet sich der Navigationsbaum, mit dem der Nutzer eine Übersicht über alle Bilder und Kameras der geöffneten Sequenz erhält.
- Rechts unten befindet sich ein Hilfstext, der dem Nutzer eine Hilfestellung zum ausgewählten Werkzeug gibt.
- Ein Bild hiervon befindet sich in Abbildung \ref{fig:hauptansicht}.
- \graphicsfigure{bilder/hauptansicht}{Die Hauptansicht der GUI}{fig:hauptansicht}{0.75\textwidth}
- \section{Arbeitsfläche}\label{sec:arbeitsansicht}
- Die Arbeitsfläche ist die Fläche, mit der der Nutzer am meisten interagieren muss, da hier viele Annotationsprozesse stattfinden.
- Je nach dem welches Werkzeug aus der Werkzeugpalette ausgewählt ist, kann der Nutzer hier neue Objekte erstellen,
- einzelne Eckpunkte verschieben oder löschen oder ganze Objekte kopieren.
- Damit der Nutzer das korrekt tun kann, wird hier im Hintergrund das Bild aus der Sequenz angezeigt, welches gerade annotiert wird.
- Auf dem Bild werden die Umrisse und Eckpunkte annotierter Objekte angezeigt.
- Dabei ist es möglich die Eckpunkte einzelner Objekte auf dem Bild auszublenden,
- um einen besseren Überblick über die anderen Objekte zu erhalten.
- Die Interaktion mit der Arbeitsfläche findet überwiegend mit der Maus statt.
- Dabei wird je nach ausgewähltem Werkzeug in grün eine Vorschau angezeigt, damit der Nutzer sehen kann, was er ändern würde.
- Auf diese Weise können viele Fehler, die beim Annotieren auftreten könnten, verhindert werden, wodurch viel Zeit erspart werden kann.
- In Abbildung \ref{fig:arbeitsansicht} ist die Arbeitsfläche mit der Vorschau für das Einfügen eines Objektes zu sehen.
- \graphicsfigure{bilder/arbeitsansicht}{Die Arbeitsfläche der GUI}{fig:arbeitsansicht}{0.50\textwidth}
- \section{Navigationsbaum}\label{sec:objectBaum}
- Der Navigationsbaum dient dazu, dem Nutzer einen Überblick über die gesamte Sequenz zu verschaffen, die er momentan annotiert.
- Dafür wird die Sequenz als aufklappbarer Baum angezeigt. Dadurch weiß der Nutzer, welche Bilder zu welcher Kamera gehöhren.
- Durch einen Klick auf ein Bild kann der Nutzer das Bild in der Arbeitsfläche anzeigen lassen und es anschließend annotieren.
- Das momentan ausgewählte Bild ist in dem Baum markiert und die Objekte auf dem Bild werden in dem Baum angezeigt.
- Des Weiteren zeigt der Objektbaum dem Nutzer an, welche Bilder noch nicht fertig annotiert wurden, und welche Bilder noch nie betrachtet worden sind.
- Bilder, die noch nicht betrachtet wurden, werden mit dunkelgrauem Hintergrund angezeigt.
- Bilder, die noch nicht fertig annotiert sind bekommen auf der linken Seite ein Warndreieck.
- Dabei wird ein Bild von der GUI genau dann als unfertig annotiert betrachtet, wenn noch keine Objekt-IDs vergeben wurden,
- oder wenn die gleiche ID ungewollt mehreren Objekten zugewiesen wurde.
- In Abbildung \ref{fig:objektbaum} ist ein Beispiel mit noch nicht annotierten Bildern und unfertig annotierten Bildern zu sehen.
- \graphicsfigure{bilder/objectbaum}{Der Navigationsbaum der GUI}{fig:objektbaum}{0.50\textwidth}
- Mit Hilfe der rechten Maustaste kann der Nutzer auf dem Navigationsbaum ein Menü erscheinen lassen.
- Dieses Menü zeigt dem Nutzer, je nach dem auf welchem Objekt der Klick erfolgt ist, spezifische Operationen.
- Beim Klicken auf eine Kamera kann der Nutzer die Maskenoberfläche \ref{sec:maskenansicht} aufrufen und so die Maske der Kamera verändern.
- Beim Klicken auf ein Bild kann der Nutzer manuell Vorabannotationen vom Annotationsserver abfragen.
- Beim Klicken auf ein Objekt kann der Nutzer die Objekt-ID und Objektklasse festlegen oder das Objekt löschen.
- \section{Hilfstext}\label{sec:hilfstext}
- Unter der Arbeitsfläche wird in der GUI immer ein Hilfstext eingeblendet,
- der den Nutzer darüber informiert, auf welche Weise er die Arbeitsfläche mit dem ausgewählten Werkzeug bedienen kann.
- Dies erleichtert die Bedienung der GUI für unerfahrene Nutzer.
- Auch kann dadurch Zeit eingespart werden, da die unerfahrenen Nutzer einfach nur lesen müssen und nicht erst einen erfahrenen Nutzer fragen müssen.
- \section{Werkzeugpalette}\label{sec:werkzeuge}
- Die Werkzeugpalette dient dem Nutzer zur Auswahl der verschiedenen Werkzeuge.
- Dabei bietet jedes Werkzeug dem Nutzer eine andere Möglichkeit die Annotation einer Bildsequenz zu bearbeiten order zu erstellen.
- Das momentan ausgewählte Werkzeug wird dabei mit grauem Hintergrund markiert.
- Jedes Werkzeug hat ein Icon, mit dem es dargestellt wird.
- Außerdem hat jedes Werkzeug einen Namen, der erscheint, falls der Nutzer über einen längeren Zeitraum mit der Maus darüber verweilt.
- In Abbildung \ref{fig:werkzeuge} ist ein Bild der Wergzeugpalette.
- Im Folgenden werden die verschiedenen Werkzeuge kurz vorgestellt.
- \graphicsfigure{bilder/werkzeuge}{Werkzeuge der GUI}{fig:werkzeuge}{0.50\textwidth}
-
- \subsection{Vergrößern}\label{subsec:vergroessern}
- Dieses Werkzeug ermöglicht es dem Nutzer das momentan angezeigte Bild in der Arbeitsansicht zu vergrößern,
- so dass bestimmte Details besser erkennbar werden. Dadurch können die Objekte dann viel genauer annotiert werden.
- Der Nutzer kann sich den Bereich, den er vergrößert sehen möchte, dabei selbst aussuchen, indem er diesen Bereich in der Arbeitsfläche mit der linken Maustaste markiert.
- \subsection{Verkleinern}\label{subsec:verkleinern}
- Dies ist das Gegenstück zum Vergrößern. Wenn man das Bild mit dem Vergrößern-Werkzeug vergrößert hat,
- kann man es mit diesem Werkzeug wieder verkleinern. Dabei wird es mit nur einem Klick auf das Werkzeug so verkleinert,
- dass wieder alles komplett sichtbar ist. Dieses Werkzeug bleibt nach der Benutzung nicht aktiviert,
- da der Nutzer das Bild nur einmal verkleinern braucht, damit wieder alles sichtbar ist.
- \subsection{Nächstes Bild}\label{subsec:nächstesBild}
- Dieses Werkzeug erlaubt es, zum nachfolgenden Bild in der Sequenz zu wechseln.
- Genau wie beim Verkleinern-Werkzeug ist dies eine einmalige Operation, so dass das Werkzeug nicht aktiviert bleibt und direkt nach der
- Benutzung wieder das vorherige Werkzeug aktiviert ist.
- \subsection{Vorheriges Bild}\label{subsec:vorherigesBild}
- Mit diesem Werkzeug ist es möglich, zum vorherigen Bild in der Sequenz zu wechseln.
- Die Werkzeuge Nächstes Bild und Vorheriges Bild können auch über die Pfeiltasten aktiviert werden.
- Auch dieses Werkzeug ist eine einmalige Operation.
- \subsection{Objekt zerteilen}\label{subsec:objektZerteilen}
- Durch die Vorabannotationen kann es vorkommen, dass zwei verschiedene Objekte fälschlicherweise als ein einzelnes Objekt erkannt werden.
- In diesem Fall ist es hilfreich, wenn ein Objekt in zwei Objekte zerteilt werden kann.
- Dafür gibt es dieses Werkzeug. Ist dieses Werkzeug ausgewählt, so kann der Nutzer in der Arbeitsfläche zwei
- Eckpunkte eines Objektes auswählen, an denen es zerteilt werden soll.
- \subsection{Löschen}\label{subsec:löschen}
- Mit diesem Werkzeug ist es möglich einzelne Eckpunkte oder ganze Objekte zu löschen.
- Dafür kann man in der Arbeitsfläche einen Bereich markieren, in dem alle Eckpunkte gelöscht werden sollen.
- Entstehen dadurch Objekte mit weniger als 3 Eckpunkten, werden diese Objekte entfernt, da ein Objekt mit nur zwei Ecken kein sinnvolles Objekt darstellt.
- \subsection{Verschieben}\label{subsec:verschieben}
- Mit diesem Werkzeug ist es möglich die Eckpunkte der Objekte in der Arbeitsansicht zu verschieben,
- oder neue Eckpunkte einzufügen. Dabei wird der Eckpunkt, der verschoben wird, grün markiert. Befindet sich die Maus nicht nah genug an einem Eckpunkt,
- so wird an dem nächstgelegenen Randpunkt eines Objektes ein neuer Eckpunkt hinzugefügt, der dann gleich verschoben werden kann.
- \subsection{Neues Objekt}\label{subsec:newObject}
- Dieses Werkzeug dient dazu neue Objekte zu annotieren. Dafür kann der Nutzer jeden Eckpunkt eines Objektes der Reihenfolge nach anklicken.
- Um das neue Objekt zu vollenden kann der Nutzer einmal auf den Startpunkt klicken.
- Während dieses Prozesses wird eine Vorschau des Polygons des neuen Objektes mit grün gestrichelten Linien angezeigt, damit der Nutzer einen Fehler schnell erkennen kann.
- Falls ein Eckpunkt unabsichtlich gesetzt wurde, kann er mit der rechten Maustaste wieder entfernt werden.
- \subsection{Kopieren und Einfügen}\label{subsec:kopyAndPaste}
- Mit diesem Werkzeug können Objekteigenschaften bildübergreifend kopiert und eingefügt werden.
- Dafür kann der Nutzer in der Arbeitsansicht zunächst ein Objekt auswählen, welches kopiert werden soll.
- Auf einem anderen Bild der Sequenz kann der Nutzer dann andere Objekte auswählen,
- die die Eigenschaften des kopierten Objektes übernehmen sollen. So lässt sich einfach die
- Objekt-ID und die Klasse der Objekte auf nachfolgenden Bildern festlegen. Der Nutzer kann auch das gesamte kopierte Objekt in ein
- anderes Bild einfügen, indem er dort auf eine leere Stelle klickt, wo sich das Objekt befinden soll.
- Während dieses Vorgangs kann der Nutzer auch das kopierte Objekt mit der rechten Maustaste drehen und es so den Bewegungen anpassen, die das Objekt in der Bildsequenz macht.
- Durch dieses Werkzeug kann der Nutzer viel Zeit sparen, da nicht jedes Objekt auf jedem Bild neu annotiert werden muss.
- \subsection{Verstecken}\label{subsec:verstecken}
- Mit diesem Werkzeug kann man Objekte verstecken, so dass sie von den anderen Werkzeugen ignoriert werden.
- Außerdem können versteckte Objekte wieder sichtbar gemacht werden.
- Versteckte Objekte werden in der Arbeitsansicht ausgegraut angezeigt.
- Die Eckpunkte von versteckten Objekten werden nicht angezeigt.
- Dieses Werkzeug ist vor allem dann nützlich, wenn sich mehrere Objekte direkt nebeneinander befinden, so dass es schwierig ist die Eckpunkte auseinanderzuhalten.
- \section{Maskenoberfläche}\label{sec:maskenansicht}
- Diese Oberfläche dient dem Nutzer dazu Masken für Kameras zu erstellen.
- Sie kann über den Objektbaum für eine bestimmte Kamera aufgerufen werden.
- In dieser Oberfläche kann der Nutzer schwarze oder weiße Polygone zeichnen,
- wobei in den schwarzen Bereichen später keine Objekte vorkommen dürfen.
- Beim Öffnen der Ansicht, wird die aktuelle Maske der Kamera geladen und angezeigt.
- Existiert noch keine Maske für die ausgewählte Kamera, wird eine komplett weiße Maske erstellt, da standardmäßig überall auf einem Bild Objekte sein könnten.
- Um dem Nutzer das Zeichnen der Maske zu vereinfachen, wird im Hintergrund der Ansicht das erste
- Bild der Kamera aus der Sequenz angezeigt. Der Nutzer braucht also nur noch den Bereich des
- Bildes mit schwarzen Polygonen zu markieren, auf dem sich keine Objekte befinden können.
- Die Angabe von Masken ist vor allem wegen den Vorabannotationen hilfreich.
- Ohne eine Maske müssten auf vielen Bildern immer wieder die gleichen fälschlicherweise erkannten Objekte per Hand gelöscht werden.
- Mit einer Maske geschieht dies meist automatisch und es kann viel Zeit erspart werden.
- In Abbildung \ref{fig:maskenansicht} befindet sich ein Bild der Maskenoberfläche.
- \graphicsfigure{bilder/maskenansicht}{Maskenoberfläche der GUI}{fig:maskenansicht}{0.50\textwidth}
- \section{Objekt-Zuweisungsoberfläche}\label{sec:objektZuweisungsansicht}
- Neben dem \glq Kopieren und Einfügen\grq{ } Werkzeug, kann man die Objekt-ID eines Objektes auch mit der
- Objekt-Zuweisungsoberfläche anpassen. Diese Oberfläche ist notwendig,
- da neu vorkommende Objekte zu Beginn eine ID zugewiesen bekommen müssen und diese nicht von anderen Objekten kopiert werden kann.
- Außerdem erleichtert die Oberfläche das Zuweisen der Objekt-IDs nach einem Kamerawechsel,
- da hier weit auseinanderliegende Bilder einer Sequenz miteinander verglichen werden müssen.
- Die Objekt-Zuweisungoberfläche bietet dem Nutzer daher die Möglichkeit das Objekt mit allen bereits bekannten
- Objekten zu vergleichen und so das passende Objekt zu finden.
- Für diesen Zweck ist die Ansicht in zwei Teile geteilt. Links befindet sich das Objekt,
- dem die richtige ID zugewiesen werden soll und rechts befinden sich andere Objekte aus vorherigen
- Bildern zum Vergleich. Der Nutzer kann rechts ein Objekt auswählen,
- welches er vergleichen will. Dazu gibt es eine Liste mit allen Objekt-IDs.
- Wird eine dieser Objekt-IDs ausgewählt, so wird das Objekt auf dem letzten Bild mit der
- ID zum Vergleich angezeigt.
- Da die Bilder einer Bildsequenz unscharf sein können, kann es vorkommen, dass das Objekt, welches als Vergleich angezeigt wird, nicht gut zu erkennen ist.
- Für diesen Fall gibt es zwei Knöpfe, um durch die Sequenz zu navigieren. Der Eine bewirkt dabei, dass das ausgewählte
- Objekt aus einem Bild weiter vorne in der Sequenz zum Vergleich angezeigt wird.
- Der Andere zeigt das Objekt auf einem Bild weiter hinten in der Sequenz an.
- In Abbildung \ref{fig:objektzuweisung} befindet sich ein Bild der Objekt-Zuweisungsoberfläche.
- \graphicsfigure{bilder/objektzuweisung}{Objekt-Zuweisungsoberfläche der GUI}{fig:objektzuweisung}{0.50\textwidth}
- \section{Klassenoberfläche}\label{sec:klassenAnsicht}
- Diese Oberfläche dient zur Übersicht und zur Bearbeitung der verschiedenen Annotationsklassen, deren Objekte in der Sequenz annotiert werden sollen.
- Sie kann vom Nutzer im Menü der GUI unter der Kategorie Optionen geöffnet werden.
- Die Oberfläche zeigt eine Liste mit allen Klassen an, die in der Sequenz vorkommen.
- Der Nutzer kann eine Klasse umbenennen, neue Klassen hinzufügen oder Klassen löschen.
- Beim Löschen einer Klasse erhalten alle Objekte dieser Klasse automatisch die Klasse zugewiesen, welche sich in der Liste ganz oben befindet.
- \graphicsfigure{bilder/klassenansicht}{Klassenoberfläche der GUI}{fig:klassenAnsicht}{0.50\textwidth}
|