Belegarbeit (.pdf - 2.3 MB) - Technische Universität Dresden
Belegarbeit (.pdf - 2.3 MB) - Technische Universität Dresden
Belegarbeit (.pdf - 2.3 MB) - Technische Universität Dresden
Erfolgreiche ePaper selbst erstellen
Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.
9. ABSCHLIESSENDE BETRACHTUNGEN 65<br />
Zukunft müsste also untersucht werden, wie die Steuerung oder Bearbeitung von Objekten via Spracheingabe<br />
realisiert werden kann. Zunächst müsste man natürlich für jedes Objekt die entsprechenden Befehle<br />
in die Grammatik laden. Es ist aber klar, dass der Benutzer das nicht bei jedem neu angelegten Objekt<br />
von Hand erledigen will. Also wird eine Aufgabe darin bestehen, herauszufinden, wie man diese Abläufe<br />
automatisieren kann. Im folgenden werden dazu ein paar Anregungen gegeben.<br />
Als erstes muss man sich überlegen ob man ein Vokabular anlegt in dem alle Befehle zu den vorhandenen<br />
Objekten stehen. Dieses Vokabular muss dann jedes mal umgeschrieben werden wenn man ein<br />
Objekt hinzufügt oder entfernt und im Anschluss daran neu geladen werden. Sollten alle Befehle, die zur<br />
Anwendungssteuerung genutzt werden auch in einem Vokabular stehen, gibt es das Problem, dass keine<br />
zwei Vokabulare gleichzeitig geladen sein können. Dies lässt sich aber umgehen, indem man ein beim<br />
Erstellen eines neuen Projekts, ein neues Vokabular mit alle Menübefehlen erstellt und dieses dann um<br />
die Objektbefehle erweitert. Wenn man kein Vokabular anlegen will, kann man die einzelnen Befehle für<br />
die Objekte auch direkt in die Grammatik laden. Wenn ein Objekt gelöscht wird, wird einfach die alte<br />
Grammatik gelöscht und die Befehle für alle verbleibenden Objekte erneut geladen.<br />
Nach dem man diese Frage für sich geklärt hat, muss man überlegen, wie man die Befehle zur Steuerung<br />
der Objekte zu seinem Vokabular oder direkt zur Grammatik hinzufügen kann. Zunächst ist es vorteilhaft<br />
für jedes Objekt ein Menü anzulegen. Darin werden danach automatisch alle möglichen Sprachbefehle<br />
aufgeführt. Da sich diese Befehle bei mehreren Objekten wiederholen können steht dabei die Frage im<br />
Raum, wie man einen Befehl einem bestimmten Objekt zuordnet. Eine Möglichkeit jederzeit alle ’Objektmenüs’<br />
aktiviert zu lassen. Die Befehle in den Menüs müssten sich dann aus dem Objektnamen und<br />
der auszuführende Aktion zusammensetzen, um eindeutig zu sein. So entstehen Befehle wie ’move Red<br />
Cube to the right’, ’move Red Cube to the left’ und so weiter. Eine andere Möglichkeit ist, zum Beispiel<br />
im Hauptmenü, zu jedem Objekt einen Befehl wie ’take +Objektname’ anzulegen. Wird dieser Befehl für<br />
ein Objekt aufgerufen werden alle folgenden Befehle auf dieses Objekt bezogen, bis ein anderes Objekt<br />
aufgerufen wird. Die Objektnamen müssen in beiden Fällen eindeutig sein.<br />
Zum Ende sollen noch kurz zwei mögliche Erweiterungen der Schnittstelle genannt werden. Einerseits<br />
wäre da die Unterstützung von Callbacks. Im Moment ist der Aufruf der Schnittstellenfunktion<br />
wait_for_event() in einer Schleife in der Hauptanwendung vorgesehen. Für die Zukunft wäre es wünschenswert<br />
wenn diese Funktion in einem extra Thread angesiedelt werden könnte. Dazu kann die<br />
signal-Klasse aus cgv/utils genutzt werden. Man müsste der abstrakten Klasse speech_input ein Signal<br />
als Member hinzufügen. Die Funktion wait_for_event() kann dadurch in einer Schleife, in einem<br />
extra Thread laufen. Wenn eine Spracheingabe erfolgt, wird dann ein Signal an die Hauptanwendung<br />
geschickt, wodurch der Sprachbefehl verarbeitet wird.<br />
Eine weitere Erweiterung wurde dieser Arbeit im Kapitel 6 schon einmal kurz erwähnt. Es handelt sich