%---------------------------------------------------------------------------------------------------
% Design
%---------------------------------------------------------------------------------------------------
\newpage
\chapter{Design}
\label{sec:Design}
Im folgenden Kapitel wird auf Ideen und mögliche Techniken zur Umsetzung eines im Analysekapitel vorgestellten Systems eingegangen. Dabei geht es insbesondere um den Bereich der Erkennung von Handgesten im dreidimensionalen Raum und der sich daraus ergebenen möglichen Interaktionsformen. 
\section{Grundarchitektur}
\label{sec:Grundarchitektur}
%\textit{Darstellung des MVC Pattern und Darstellung, dass die View wegen der Interaktion wichtig ist. Konzentration auf den Controllerteil.}
Für die Softwaregrundarchitektur der Anwendung verwenden wir das Model-View-Controller Pattern.

Das Model-View-Controller Pattern ist ein Architekturmuster zur Unterteilung des Softwaresystems in einen Daten-, einen Steuer- und einen Anzeigeteil, welche lose gekoppelt werden. Abbildung \ref{fig:ModelViewControllerDiagram_svg} zeigt den Aufbau des MVC-Patterns.
\begin{figure}
	\centering
		\includegraphics[width=0.60\textwidth]{grafiken/ModelViewControllerDiagram_svg.png}
	\caption{Model-View-Controller-Pattern}
	\label{fig:ModelViewControllerDiagram_svg}
\end{figure}
Vorteil dieser Vorgehensweise ist die leichte Austauschbarkeit der einzelnen Komponenten. Für das selbe Softwaresystem können Anwender spezifische Komponenten entwickelt werden. Die Entwicklung jeweils einer View für den Entwickler und für den Endbenutzer ist leicht umsetzbar. Nähere Informationen zur Nutzung des MVC-Pattern sind unter \cite{WikipediaMVC} oder in der gängigen Fachliteratur verfügbar. (\cite{Miller2009})


Im Zuge des Ziels die Anwendung mit Gesten zu steuern, liegt der Focus dieser Arbeit nicht auf dem Model, mit den enthaltenen Datenstrukturen für die Wiedergabe der Datenobjekte, sondern auf View und Controller. Wobei der Controller die Gestenerkennung und Programmlogik übernimmt und die View die Daten des Models und das Feedback der Gestensteuerung für den Benutzer anzeigt. View und Controller bilden ganzheitlich betrachtet eine Einheit bei der interaktiven Steuerung der Anwendung durch Gesten, wobei im Controller die hier wichtigere Arbeit, die Gestenerkennung, stattfindet. Im Controllerteil werden die unterschiedlichen Gesten erkannt und Lösen je nach Zustand des Models eine definierte Aktion aus.

Der Controller besteht aus zwei unterschiedlichen Teilen. \\
Der erste Teil ist die Anwendungslogik, welche das Model und die View manipuliert. Dieser Teil führt alle im Abschnitt Anwendungsfälle beschriebenen Aktionen wie das Selektieren, Starten und Stoppen von Datenobjekten durch. Die dahinter liegende Logik soll sich an der Funktion eines normalen Mediaplayers orientieren und wird hier nicht weiter betrachtet. Darüber hinaus manipuliert sie die View so, dass das Feedback der Eingaben des Benutzers dargestellt wird. Die erforderlichen Eingaben des Benutzers kommen vom zweiten Teil der Controllerkomponente.

Der zweite Teil der Controllerkomponente enthält die Eingabe durch den Benutzer. Hier wird die Eingabe aufgenommen und an die Anwendungslogik weitergeleitet. Die Benutzereingabe soll in unserem Szenario mit Hilfe von Gesten erfolgen. Zu diesem Zweck muss dieses Element Funktionen zum Erkennen von Körpergesten bereitstellen. Die dafür nötige Gestenerkennung kann als Spezialisierung der allgemeinen Bildmustererkennung angesehen werden und führt so, wie im nächsten Abschnitt beschrieben, zu einer Architektur, welche der Architektur von klassischen Bildmustererkennungssystemen sehr ähnlich ist.

Beide teile des Controllers sind über eine einheitliche Schnittstelle lose gekoppelt, um die Nutzung anderer Gestenerkennungssysteme oder anderer Eingabekanäle wie Sprache, alternativ oder in Kombination, zu ermöglichen. (Abbildung \ref{fig:Controller})
\begin{figure}
	\centering
		\includegraphics[width=0.60\textwidth]{grafiken/Controller.png}
	\caption{Aufbau Controller}
	\label{fig:Controller}
\end{figure}

\section{Architektur zur Erkennung von Gesten}
\label{sec:ArchitekturZurErkennungVonGesten}
Das hier zu entwickelnde System soll auf Eingaben mittels Körpergesten reagieren. Zu diesem Zweck soll im folgenden Abschnitt eine mögliche Komponente und damit verbundene Architektur zur Erkennung von Handgesten vorgestellt werden. 

Die Erkennung einer oder mehrerer Gesten durch das Computersystem kann auf das Problemfeld der allgemeinen Mustererkennung zurück geführt werden. (\cite{Duda2001}) Wie in der klassischen Bildmustererkennung erfordert auch dieses System zur Gestenerkennung eine Reihe von Verarbeitungsschritten. Diese Schritte beinhalten das Erfassen der Körperbewegungen des Benutzers mittels Sensoren, das Verarbeiten dieser Sensorinformationen und das Zuordnen des Ergebnisses zu einer vorher definierten Gestenklasse.

Johann Heitsch nennt in seiner Arbeit einen guten und einfachen Ansatz für eine mögliche Systemarchitektur zur Erkennung von Gesten. (\cite{Heitsch2008}) Seine beschriebene Architektur besteht aus vier Bereichen:
\begin{enumerate}
	\item Datenquellen
	\item Vorverarbeitung
	\item Feature Extraktion
	\item Klassifikation
\end{enumerate}

Dieser Ansatz wird hier teilweise übernommen. Schritt 1 und 2 werden in unserem System zu einem Schritt zusammengefasst. Bei dem hier verwendeten ART-Tracker System findet intern die aufgeführte Vorverarbeitung bereits im Tracker beim Erfassen der Daten statt.


Als neuer vierter Bereich wird die Schnittstelle zur Anwendungslogik hinzugefügt. Diese Schnittstellenkomponente hat lesenden Zugriff auf die Daten aller wichtigen unteren Bereiche. Dieser Zugriff stellt der Anwendung ein Maximum an Informationen zur Verfügung und macht dadurch die situationsbedingte Interpretation der Geste in der Anwendung möglich.


An die Seite der Merkmalsextraktion und der Datenerhebung wird noch eine Komponente zur Erkennung des Anfangs und Endes einer Geste oder einer Gestenkombination hinzugefügt. 


Die nun erstellte mögliche Architektur besteht aus folgenden fünf Blöcken:
\begin{enumerate}
	\item Erfassen der Körperbewegung mittels Sensoren
	\item Extrahieren von Merkmalen/Features aus den gewonnenen Sensordaten
	\item Klassifikation der Merkmale/Features und Bestimmung der Geste
	\item Reaktion des angeschlossenen Systems auf die erkannte Geste
	\item Start/Stop Erkennung
\end{enumerate}
Abbildung \ref{fig:Architektur_Gestenerkennung} zeigt die daraus resultierende Architektur unseres Systems zur Gestenerkennung.

\begin{figure}[htb]
	\centering
		\includegraphics[width=0.50\textwidth]{grafiken/Architektur_Gestenerkennung.png}
	\caption{Architektur Gestenerkennung}
	\label{fig:Architektur_Gestenerkennung}
\end{figure}

Die einzelnen Komponenten sind hierbei in Ihrer Qualität und Leistungsfähigkeit stark von den unter Ihnen liegenden Komponenten abhängig. Insbesondere Klassifikation und Merkmalsextraktion haben eine starke Wechselwirkung. Beide sind eng verzahnt in Ihrem Verhältnis von möglicher Leistungsfähigkeit und Komplexität. Die Qualität der Klassifikation ist stark von den vom Merkmalsextraktor gelieferten Merkmalen abhängig. Umso mehr "`passende"' Merkmale geliefert werden, umso leichter gelingt eine Klassifikation. Jedoch muss der Aufwand diese Merkmale zu extrahieren im richtigen Verhältnis zum Aufwand stehen. Darüber hinaus ist es nicht sinnvoll Merkmale zu übergeben, welche für die jeweilige Klassifikation nicht relevant sind und völlig umsonst extrahiert wurden. Ähnlich verhält es sich mit der Merkmalsextraktion und der Datenerhebung. Je besser die Datenerhebung durchgeführt wird, umso leichter ist eine Extraktion von sinnvollen Merkmalen möglich.
\subsection{Start/Stop-Erkennung}
\label{sec:StartStopErkennung}
%\textit{Verweis auf das Grundlagenkapitel und Ausklammerung aus dieser Arbeit. }
Das Problem der Start/Stop-Erkennung wurde bereits im Grundlagenkapitel näher erläutert.

Das automatische Erkennen von Start und Ende einer Geste ist überaus komplex und soll in dieser Arbeit nicht eingehend untersucht werden. Der Block der Start/Stop Erkennung wird hier einfach als vorhanden und funktionstüchtig angesehen. Falls nötig bedienen wir uns einfacher technischer Hilfsmittel und Vereinbarungen, um das Problem zu kompensieren bzw. zu umgehen. Die Benutzung eines einfachen Schalters oder Tasters, welcher angibt, ob eine Gesteneingabe läuft ist eine Möglichkeit. Eine andere Möglichkeit ist, bestimmte eindeutige Start und Stop Gesten zu definieren, welche die eigentliche Geste umschließen und klar von ihr unterschieden werden können. Ein Beispiel währe eine Ruhephase, welche vor und nach jeder Geste eingehalten wird um die Gesten voneinander zu Trennen. Dieses sind einige Möglichkeiten, auf die konkrete Umsetzung soll in dieser Arbeit jedoch nicht eingegangen werden.

Im Folgenden werden nun die vier in der Architektur beschriebenen Hauptbereiche der Gestenerkennung näher erläutert.
\begin{enumerate}
	\item Datenerhebung
	\item Merkmalsextraktion
	\item Klassifikation
	\item Anwendungsschnittstelle
\end{enumerate}
\subsection{Datenerhebung}
\label{sec:Datenerhebung}
%\textit{Beschreibung der Anforderungen an die Datenerhebung. Darstellung der Unterschiede von Erfassungssystemen.}
Im ersten Schritt der Gestenerkennung werden die Bewegungen des Benutzers vom System erfasst. Das Trackingsystem erfasst die Daten und sendet sie an die Datenerhebungskomponente. Die Datenerhebungskomponente bereitet diese Daten einheitlich auf und gibt sie an die oberen Schichten weiter. Wie bereits im Grundlagenkapitel \ref{sec:TrackingVonKörperbewegungen} erwähnt, gibt es eine Vielzahl von Verfahren und Systemen um die Position und Bewegung des Körpers zu erfassen, daher soll die lose Kopplung von Trackingsystem und Datenerhebung es ermöglichen die Eingabedaten von unterschiedlichen Trackingsystemen zu verarbeiten.

Da die Bewegung von Körperteilen des Menschen, wie zum Beispiel seiner Hand, mit all Ihren Muskeln und Möglichkeiten, im Detail für die meisten Anwendungen zu komplex ist, findet in allen Fällen schon bei der Datenerfassung eine Reduktion der Informationen statt. Es wird für das System ein Modell des Körperteils entwickelt. Je nachdem welche Daten zur Erfassung ausgewählt werden und wie diese erfasst werden, führt dieses zu einem mehr oder weniger hohem Messumfang und daraus resultierender Messgenauigkeit der eigentlichen Bewegung. Als Beispiel für Systeme mit geringem Messumpfang sei hier der Eingabestick der Entertainment Konsole Nintendo Wii genannt. Der Eingabestick wird in der Hand gehalten und misst über Beschleunigungssensoren die ungefähre Beschleunigung der Hand des Nutzers. Diese Beschleunigungswerte sind für das Modell der meisten Wii-Spiele ausreichend. Arbeiten zum Thema "`Gestenerkennung und Interaktion mit dem Wii-Kontroller"' werden unter \cite{1639620} sowie \cite{1347395} vorgestellt.

Viele der professionell eingesetzten Techniken liefern die genauen Positionen bestimmter Marker bzw. Bodys am Körper zu einem bestimmten Zeitpunkt. Eine dieser Technologien soll auch für diese Arbeit verwendet werden. Das an der Hochschule für Angewandte Wissenschaften vorhandene System, erfasst einzelne markante Messpunkte der Hand. Durch die zeitliche Verknüpfung der einzelnen Messwerte entsteht so eine stetige Bewegung der Punkte im Raum. 

Die Qualität der eigentlichen Erfassung ist stark von der Präzision der Sensoren, der Aufnahmegeräte, der Anzahl der Messpunkte und dem verwendeten Messintervall abhängig. Umso mehr Informationen über die Körperbewegung erfasst werden, umso höher ist die Wahrscheinlichkeit, dass die Geste richtig erkannt und zugeordnet werden kann. Dadurch erhöht sich auch die Komplexität des dahinter liegenden Modells stark. Daher sollte bei der Auswahl der Sensordaten immer zwischen Nutzen und Aufwand abgewogen werden.
\subsubsection{Art der Daten und Abbildung im Datenraum}
\label{sec:ArtDerDatenUndAbbildungImDatenraum}
%\textit{Beschreibung der Art der Daten und der Abbildung dieser.}
Für diese Arbeit verwenden wir zur Datenerfassung den im Labor der Hochschule für angewandte Wissenschaften vorhandenen ART-Tracker. Ein optisches Trackingsystem, welches bereits im Grundlagenkapitel \ref{sec:ARTTracker} vorgestellt wurde. \\
Dieses erfüllt die im Analysekapitel \ref{sec:AnforderungenAnDieDatenerfassung}, beschriebenen Anforderungen an die Datenerfassung. Neben einer hohen Präzision und kleinem Messintervall, bietet uns dieses System die Möglichkeit zwei Arten von Elementen zu erfassen. Zum einen erfassen wir die Positionsdaten von einzelnen unabhängigen Messpunkten (hier genannt Marker) und zum anderen Erfassen wir jeweils die Positionsdaten und darüber hinaus die Orientierung von vorher definierten Messpunktgebilden (hier genannt Body). Die Messdaten der einzelnen Elemente werden, zusammen mit Ihrer ID und dem Zeitpunkt der Messung in einem mehrdimensionalen Datenraum abgelegt.

Zur Veranschauung eines solchen Datenraums ist in Grafik 
\begin{figure}
	\centering
		\includegraphics[width=0.50\textwidth]{grafiken/Erfassungsraum.png}
	\caption{2D-Datenraum}
	\label{fig:Erfassungsraum}
\end{figure}
\ref{fig:Erfassungsraum} ein beispielhafter zweidimensionaler Datenraum mit einem Messpunkt abgebildet. Die horizontale  Achse stellt dabei die vergangene Zeit t dar und die vertikale Achse die gemessene Höhe eines Messpunktes h, welcher unregelmäßig in seiner horizontalen Position verändert wurde.

Die vergangene Zeit t könnte dabei theoretisch unendlich sein. Um die Werte besser verarbeiten zu können, wird das Maximum jedoch durch zwei Faktoren eingeschränkt. Zum einen tritt die jeweilige Geste nur in einem endlichen Zeitabschnitt auf, welcher durch die Start-Stop-Erkennungskomponete ermittelt wird. Zusätzlich wird, zur Vereinfachung der Gestenerkennung, in der entwickelten Anwendung die Größe des Intervalls welches betrachtet wird auf ein Maximum begrenzt. (z.B. maximal 10 Sec.) Ältere Daten werden für die Gestenerkennung nicht mehr heran gezogen und verworfen. Dadurch werden die Gesten jedoch auf eine maximale Dauer beschränkt. Eine Erkennung von Gesten welche länger als t dauern ist dadurch nicht mehr möglich. Bei der Interaktion sollen vor allem kurze prägnante Gesten eingesetzt werden, daher trit ein Problem mit der Begrenzung auf ein Zeitmaximum nur in seltenen Fällen auf.

Für das Tracking werden bei dem von uns eingesetzten ART-Tracker System Marker an allen zu erfassenden Positionen der Hand benötigt. Zu diesem Zweck wurde ein einfacher Handschuh entwickelt, welcher sechs einzelne Punkte der Hand erfasst. Zum einen wird an jeder Fingerspitze jeweils eine aktive Infrarot-LED befestigt (im weiteren Verlauf als Marker oder Fingermarker bezeichnet.), welche über eine im Handschuh integrierte 9V Blockbatterie gespeist wird. Als zweites ist ein Konstrukt aus passiven Markern (im weiteren Verlauf als Body bzw. Handbody bezeichnet.) am Handrücken befestigt. Die aktiven LED's dienen zur Erfassung der Position der einzelnen Fingerspitzen, der Handbody dient zur Erfassung des Drehsinns und der Position der kompletten Hand. Abbildung \ref{fig:Hand_mit_Body} zeigt den entwickelten Handschuh mit Marker IR-LED's und Handbody.  

\textit{Der Handbody könnte dabei auch mittels genaueren aktiven IR-LED's realisiert werden, jedoch wurde, in der prototypischen Umsetzung, zur Arbeitserleichterung auf ein Standardbody der Firma A.R.T GmbH zurück gegriffen.}
\begin{figure}
	\centering
		\includegraphics[width=0.50\textwidth]{grafiken/Hand_mit_Body.JPG}
	\caption{Sensorhandschuh}
	\label{fig:Hand_mit_Body}
\end{figure}

Das ART-Tracker System erfasst die Marker der Finger und den Body der Hand. Das System liefert dabei für die Marker am Finger die Messpunkt ID, den Messzeitpunkt und die Position im dreidimensionalen Raum. (ID, i, x, y, z ) Beim Body liefert das System die ID, den Messzeitpunkt, die Position im Raum und die Drehorientierung des Bodys (ID, i, x, y, z, u, v, w). Das für den Drehsinn des Handbodys definierte Koordinatensystem, relativ zur Hand, zeigt Abbildung \ref{fig:Hand_koord}. 
\begin{figure}
	\centering
		\includegraphics[width=0.50\textwidth]{grafiken/Hand_koord.png}
	\caption{Koordinatensystem des Bodys}
	\label{fig:Hand_koord}
\end{figure}
Die Informationen von Fingermarkern und Handbody werden vom Trackingsystem an die Datenerfassungskomponente geliefert. Die Datenerfassungskomponente trägt die neuen Informationen in den Datenraum ein und reicht diesen an die Merkmalsextraktion zur Auswertung weiter.
\subsection{Merkmalsextraktion}
\label{sec:Merkmalsextraktion}
%\textit{Was ist Merkmalsextraktion? Warum ist es für unser System wichtig? Welche Merkmale haben wir wie Identifiziert?}
Die Merkmalsextraktion ist eines der wichtigsten Bestandteile des Systems. Hierbei werden die aus der Datenerfassung erhobenen Daten für eine Klassifikation aufbereitet, zusammengefasst und transformiert. Die wichtigen Informationen, welche für die spätere Klassifikation der Gesten von Bedeutung sind, werden als Feature extrahiert.

Wir suchen bei der Merkmalsextraktion zu unserem Modell der Hand passende Features. (Modellbildung für Bildmustererkennung siehe \cite{Duda2001}) Gesucht werden vor allem Features, welche bei unterschiedlich durchgeführten Gesten der selben Gestenklasse gleich sind. Ein Beispiel hierbei ist die Erkennung der Handbewegung in eine bestimmte Richtung. Die genaue Position des Messpunktes relativ zum Koordinatenursprung ist bei dieser Geste nicht von Interesse, sondern nur die jeweilige Bewegungsrichtung der Hand. Aus den jeweiligen von der Datenerfassung gelieferten absoluten Positionsdaten wird deshalb die relative Positionsveränderung extrahiert. Dieses Feature ist invariant für alle Gesten dieser Gestenklasse. Das Feature liefert dieselben Informationen an die Klassifikation, egal ob links unten oder rechts oben im Raum die Hand in die gleiche Richtung bewegt wird. Für uns wichtige Invarianten sind hierbei die Translationsinvarianz, die Rotationsinvarianz, die Scalierungsinvarianz und in einigen Fällen die Zeitinvarianz. Ziel der Merkmalsextraktion ist es nun, unterschiedliche Bewegungen derselben Geste auf jeweils dieselben Features zu reduzieren.
Darüber hinaus sollten die Features unseres Modells so gewählt werden, dass dessen Werte für die Gesten der gemeinsamen Gestenklasse möglichst gleich sind und sich von anderen Gestenklassen möglichst unterscheiden.

Mit Hilfe der extrahierten Features entsteht so ein Merkmalsvektor, er beinhaltet alle bei einer Messung aufgenommenen Features. Dieser Vektor wird dem jeweiligen Klassifikator zur Klassifikation übergeben. Alle möglichen Merkmalsvektoren des Systems zusammen werden als Merkmalsraum bezeichnet und bilden so alle, für die Klassifikation möglichen Eingabewerte ab.

Eine gute Merkmalsextraktion und damit verbunden, eine starke Reduktion und Aufbereitung der Informationen sorgt dafür, dass der jeweilige Klassifikator recht simpel aufgebaut werden kann. Während eine oberflächliche Merkmalsextration es erforderlich macht, dass der anschließende Klassifikator komplex aufgebaut wird, um das Modell korrekt abzubilden. (\cite{Duda2001}; \cite{Bishop2006})

Für die Auswahl der richtigen Features müssen erst einmal die Gestenklassen beschrieben werden, welche unser System erkennen soll. Daraus leiten wir die jeweiligen Features und ihre Invarianten ab. Die Auswahl der richtigen Features unseres Modells ist nicht trivial, Kriterium hierbei ist jedoch, dass sie leicht aus den Daten zu extrahieren, robust gegen Messfehler und gut zum Unterscheiden von unterschiedlichen Gestenklassen sind. Zur Veranschaulichung werden im Abschnitt \ref{sec:Zeigergeste} die Features für eine beispielhafte Geste ausgewählt und die Klassifikationsstrategie beschrieben. Im Anhang \ref{sec:Gestenbeschreibung} wird eine komplette Übersicht über alle hier verwendeten Gesten, deren Features und der, für diese Geste zugrunde liegenden Klassifikationsstrategie dargestellt.
\subsection{Klassifikation}
\label{sec:Klassifikation}
%\textit{Wofür Klassifikation? Welcher Klassifikator soll verwendet werden?}
Die Klassifikation ist bei guter Informationslage relativ einfach. Wenn für jeden Merkmalsvektor im Vektorraum seine Klassenzugehörigkeit bekannt ist, ist es leicht auf die Klassenzugehörigkeit zu schließen. In der Praxis ist die Abbildungsfunktion jedoch gar nicht bzw. nur unvollständig bekannt oder zu komplex um eine exakte Zuordnung durchführen zu können. Daher bedient man sich unterschiedlichster Klassifikationsverfahren, um bei zu geringer Informationslage oder zu komplexen Abbildungsfunktionen trotzdem zu einem brauchbaren Resultat zu gelangen. Eine Liste gängiger Klassifikationsverfahren und Ihrer Eigenschaften finden Sie unter \cite{Meisel2010} sowie unter \cite{Bishop2006}.

Wichtig ist hier nur, dass die einzelnen Klassifikationsverfahren einen Wahrscheinlichkeitsraum für jede Gestenklasse aufbauen und aufgrund diesem den eingehenden Merkmalsvektor der Wahrscheinlichkeit der jeweiligen Gestenklasse zuordnen.

Ein gängiges und auch hier genutztes Verfahren ist, dass vorher einzelne Merkmalsvektoren ermittelt werden, welche der jeweiligen Klasse zugehören. Diese bilden die Referenzvektoren der Gestenklasse. Mittels einer Abstandsfunktion wird der Abstand des zu prüfenden Merkmalsvektor zu diesen Referenzvektoren bestimmt. Die Wahrscheinlichkeit der Klassenzugehörigkeit sinkt nun je größer der Abstand zu den Referenzvektoren wird. 

\begin{figure}
	\centering
		\includegraphics[width=0.50\textwidth]{grafiken/Gauss.png}
	\caption{Wahrscheinlichkeitsverteilung Gaußfunktion}
	\label{fig:Gauss}
\end{figure}
Abbildung \ref{fig:Gauss} zeigt einen solchen Wahrscheinlichkeitsraum mit 6 Repräsentanten der Gestenklasse und der Nutzung der Gaußfunktion um ein sanftes Abfallen der Wahrscheinlichkeit zu erreichen.

Für unsere Anwendung bedienen wir uns eines solchen Klassifikationsverfahrens, welches mittels definierten Stützvektoren und daran knüpfenden Wahrscheinlichkeitsfunktionen eine Aussage über die Zugehörigkeit eines Merkmalsvektors zu einer Gestenklasse trifft. Dieses soll in folgendem Abschnitt anhand eines Beispiels veranschaulicht werden. Es wird stellvertretend eine in unserer Anwendung verwendete Geste genommen und an dieser das Verfahren der Klassifikation gezeigt. Die in unser Anwendung darüber hinaus verwendeten Gesten und ihre Klassifikationsstrategie wird im Anhang \ref{sec:Gestenbeschreibung} erläutert.
\subsubsection{Zeigergeste}
\label{sec:Zeigergeste}
Die Funktion der Zeigergeste innerhalb der Anwendung wird im Abschnitt \ref{sec:DragAndDrop} Drag-and-Drop Interaktionstechniken genauer beschrieben. In diesem Abschnitt werden die genutzten Features und das verwendete Klassifikationsverfahren genauer beschrieben.

Als Feature werden für diese Geste die Länge $l_i$ des Abstandsvektors zwischen Handbody und jedes erkannten Fingermarkers ermittelt. Zusätzlich wird der dazugehörige Winkel $\alpha_i$ zwischen der Z-Achse des Handbodys und des jeweiligen Abstandsvektors bestimmt. Diese Features dienen als Ausgangsbasis zur Bestimmung des Wahrscheinlichkeitswertes ob maximal ein Finger nach vorne gerichtet ist und so die Zeigergestenhaltung eingenommen wurde. Abbildung \ref{fig:zeige_hand} zeigt die Zeigergestenhaltung mit dem Handbodykoordinatensystem und einem Abstandsvektor.

\textit{Die prototypische Umsetzung hat gezeigt, dass der Handbody auf der Handoberseite nicht mittig, sondern etwas versetzt liegt und dieses die Berechnung des Abstandsvektors etwas verfälscht. Daher wird vor der Berechnung des Abstandvektors die Position des Handbodys um einen konstanten, vorher mittels Kalibrierung bestimmten Vektor verschoben.}
\begin{figure}
	\centering
		\includegraphics[width=0.70\textwidth]{grafiken/Abstandsvektor.png}
	\caption{Abbildung der Zeigergeste}
	\label{fig:zeige_hand}
\end{figure}

Die zusammen gehörenden Features werden nun zu einem Merkmalsvektor $M_i(l_i;\alpha_i)$ zusammen gefasst und mit den Referenzvektoren verglichen.

Die zu der Gestenklasse dazu gehörenden Referenzvektoren werden bei unserem Klassifikator vorher manuell festgelegt. Alle Vektoren, bei welcher die Länge des Abstandsvektors $l_i$ über der Länge $l_{min}$ liegt und der Winkel $\alpha$ genau 0 Grad beträgt, stellen unsere Referenzvektoren dar. Bei diesen Vektoren wird die Wahrscheinlichkeit, dass es sich um die gesuchte Geste handelt, auf hundert Prozent gesetzt.


Die Anzahl der hier vorher definierten Referenzvektoren ist für die Erkennung relativ gering. Sie führen zu einer geringen Erkennungsquote und zu einem starken Gefälle bei der Wahrscheinlichkeitsbestimmung. (Es gibt nur 0\% oder 100\% Zugehörigkeit zur Gestenklasse.) Der Benutzer müsste genau eine der Längen und genau den Winkel treffen, damit die Geste akzeptiert wird. Das ist in der Praxis nur schwer möglich. Darüber hinaus unterliegt unser Modell, unsere Berechnungsmethode, sowie die eigentliche Messung einer gewissen Ungenauigkeit, was zusätzlich zu einer geringeren Erkennungsquote führt. Um diese Punkte einzubeziehen und eine gewisse Toleranz bei der Eingabe durch den Benutzer zu erlauben, wird angenommen, dass die Wahrscheinlichkeit im Umkreis der Referenzvektoren nicht abrupt auf Null fällt, sondern kontinuierlich mit steigendem Abstand zu den Referenzvektoren abnimmt.

Einige Klassifikatoren gestalten diese Abnahme linear. (Fuzzy-Klassifikator Abbildung \ref{fig:fuzzy_number}) Andere verteilen die Wahrscheinlichkeit mittels einer Gauß-Glockenkurve (Abbildung \ref{fig:gauss_number}), um eine sanftere Abstufung zu erreichen.

\begin{figure}[h]
  \centering
  \begin{minipage}[b]{6 cm}
    \includegraphics[width=0.80\textwidth]{grafiken/fuzzy_number.png} 
    \caption{Fuzzy-Funktion}
    \label{fig:fuzzy_number}
  \end{minipage}
  \begin{minipage}[b]{6 cm}
    \includegraphics[width=0.80\textwidth]{grafiken/gauss_number.png}  
    \caption{Gauß-Funktion}
    \label{fig:gauss_number}
  \end{minipage}
\end{figure}
Jede dieser Klassifikationssysteme hat Ihre spezifischen Vor- und Nachteile. Jedoch haben sie alle gemeinsam, dass der harte Wechsel zwischen 0\% und 100\% mittels einer Funktion abgeschwächt wird. In unserem Klassifikator nutzen wir eine Funktion auf Basis von quadratischen Gleichungen, um eine nicht lineare Abnahme zu erreichen. Diese ist für unsere Zwecke ausreichend und leicht umzusetzten. Wir erhöhen also mit unserer Funktion die Erkennungswahrscheinlichkeit in der Umgebung unserer Referenzvektoren. Je nachdem wie tolerant die Anwendung ist, akzeptiert Sie mit dieser Technik auch in der Nähe liegende Merkmalsvektoren als die gesuchte Geste.

Folgende Funktion dient zur Berechnung der Wahrscheinlichkeit für unsere Zeigergeste:

\begin{center}
	\includegraphics[width=0.80\textwidth]{grafiken/Zeiger_Wahr_Funktion.png}
\end{center}
$l_{min}$ ist hierbei ein Stellparameter welcher die Mindestlänge des akzeptierten Abstandsvektors festlegt. \\
$\alpha_{max}$ ist ein Stellparameter, welcher den maximalen Winkel angibt, welcher noch zu einem Wahrscheinlichkeitswert größer Null führt.

Die Werte für $l_{min}$ und $\alpha_{max}$ werden in unserem System mittels Schätzen und Training auf den Benutzer und die gewünschte Toleranz angepasst.
Ein möglicher resultierender Funktionsgraph mit $l_{min}$ = 100 und $\alpha_{max}$ = 15 Grad wird in Abbildung \ref{fig:Zeiger_Gebirge}
\begin{figure}
	\centering
		\includegraphics[width=0.70\textwidth]{grafiken/Zeiger_Gebirge.png}
	\caption{Wahrscheinlichkeitsverteilung Zeigergeste}
	\label{fig:Zeiger_Gebirge}
\end{figure}
 dargestellt.

Die Berechnung der Wahrscheinlichkeit findet für alle fünf Finger statt.

Da in unserem Modell der Zeigergeste nur ein Finger gestreckt sein soll, wird als zusätzliche Bedingung überprüft, dass nur ein Wahrheitswert über einem vorher definiertem Schwellwert $f_{min}$ liegt. Sollte keiner oder mehr ein Wahrheitswert $f_i$ über diesem Wert liegen, wird die Wahrscheinlichkeit auf 0 gesetzt. Wenn nur ein Wahrheistwert darüber liegt, wird dieser einzelne Wahrscheinlichkeitswert an die Anwendungschnittstelle als Ergebnis der jeweiligen Klassifikation weitergeleitet. Da wir nicht messen können, welcher Marker an welchem Finger befestigt ist, wird die Geste immer erkannt wenn maximal ein Finger zur selben Zeit gestreckt ist. Das Zeigen ist also auch beispielsweise mit dem Mittelfinger möglich. Dieses wird hier akzeptiert, da diese Form der Eingabe durch den Benutzer ungewöhnlich ist, jedoch das Endergebnis, nämlich das Zeigen auf die Powerwall, nicht beeinträchtigt.

Die Darstellung des Klassifikationsalgorithmus für die Zeigergeste soll hierbei das Grundprinzip unseres Klassifikationverfahrens veranschaulichen. Weitere Informationen über die verwendeten Features und Klassifikationsstrategien der anderen Gesten finden sie im Anhang \ref{sec:Gestenbeschreibung}.
\subsection{Anwendungsschnittstelle}
\label{sec:Anwendungsschnittstelle}
Die Anwendungsschnittstelle dient der Kommunikation zwischen Gestenerkennungssystem und der Anwendung. Sie bietet zur jeweiligen Anwendung hin eine einheitliche Schnittstelle an. Diese Schnittstelle macht die Komponente der Gestenerkennung austauschbar. Dadurch ist die Nutzung eines alternativen Gestenerkennungssystem in der Anwendung möglich oder die Nutzung des hier entwickelten Erkennungssystem in anderen Anwendungen.

Die Realisierung einer eindeutigen und verlässlichen Gestenerkennung ist meistens zu langsam oder zu komplex, daher beschränken sich die gängigen Klassifikationssysteme auf die Gewinnung der Aussage über die Wahrscheinlichkeit, ob eine bestimmte Geste auftritt. Sie wandeln diese über einen einfachen Schwellwert in eine Ja-/Nein-Aussage um (z.B. Wahrscheinlichkeit >80\% Ja, <=80\% Nein) und liefern diese Aussage an die Anwendung. In dieser Arbeit soll eine andere Vorgehensweise verwendet werden.

Die hier realisierte Schnittstelle liefert keine reine Ja/Nein Aussage, sondern die in der Klassifikation errechnete Wahrscheinlichkeit an die Anwendung. Dadurch ist es der Anwendung möglich unter Einbeziehung seines eigenen internen Zustandes die Klassifikation zu bewerten. Ein Beispiel ist hier die Durchführung einer Drag-and-Drop Aktion. Die Anwendung erwartet als erstes eine Zeigergeste. Wenn die Gestenerkennung eine Zeigergeste mit einer niedrigen Wahrscheinlichkeit (z.B. 60\%) erkennen, so akzeptiert die Anwendung diese vielleicht trotzdem, auch wenn andere Gesten eine höhere Wahrscheinlichkeit besitzen. Die Anwendung hebt dafür die Wahrscheinlichkeit für erwartete Geste an und senkt die Wahrscheinlichkeit aller anderen Gesten ab. Dieses Verfahren soll die Qualität der Erkennung in der Praxis erhöhen und eine differenziertere Aussage über die Qualität der Gestenerkennung ermöglichen.

Wenn die Anwendung die Geste akzeptiert, meldet Sie dieses an die Anwendungsschnittstelle zurück. Diese liefert dann der Anwendung, zur Geste gehörende spezifische Attribute. Auf Attribute wurde bereits im Grundlagenkapitel \ref{sec:AttributeeinerGeste} eingegangen. Das Attribut der Zeigergeste ist in unserer Anwendung zum Beispiel die X-Y-Koordinate auf einem virtuellen Abbild der Powerwall, auf welche der Benutzer mit der Zeigergeste zeigt.
\section{Abschluss 50\%}
\label{sec:Abschluss}
Im Designkapitel wurde die allgemeine Architektur der Software und im speziellen die Architektur und Umsetzungsmöglichkeit der Gestenerkennung vorgestellt. Es wurde Anhand der "`Zeigergeste"' eine mögliche Variante der Merkmalsextraktion und dazugehöriger Klassifikation aufgezeigt.

Die konsequente Nutzung des MVC-Patterns macht es dabei möglich, flexibel einzelne Komponenten auszutauschen.

Innerhalb des Controllers, wurde die Programmlogik, für die Funktionen des Katalogs und des Mediaplayer, dabei klar von der Komponente der eigentlichen Benutzereingabe getrennt. Diese Trennung ermöglicht eine flexible Nutzung von unterschiedlichen Systemen zur Eingabe. Neben der hier verwendeten Eingabe mittels Gesten, könnte auch die Eingabe durch Sprache oder der klassischen Tastatur genutzt werden. Das System erlaubt es so, die Gestenerkennung neben anderen Eingabeformen zu betreiben.