29.01.2014 Aufrufe

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

MEHR ANZEIGEN
WENIGER ANZEIGEN

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

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!