Python im Blind Audio Tactile Mapping System
Einleitung
Das Blind Audio Tactile Mapping System (BATS) zielt darauf ab, blinden und sehbehinderten Menschen Zugang zu Karten zu ermöglichen. Unser Ziel ist es, Wege zu entwickeln, um traditionell visuelle Informationen an die anderen Sinne des Benutzers zu vermitteln. Die Notwendigkeit dieses Projekts wurde deutlich, als Jason Morris an die University of North Carolina at Chapel Hill kam, um Klassische Philologie zu studieren. Morris arbeitet am Ancient World Mapping Center (AWMC), einer Stiftung, die sich der Weiterentwicklung des Bereichs der Altertumswissenschaften durch den Einsatz von Kartografie und Geoinformationswissenschaft widmet. Morris, der seit seiner frühen Kindheit blind ist, hat sich sein Leben lang mit der Verweigerung des Zugangs zu Informationen auseinandergesetzt, die für seine Studienwahl entscheidend sind. Mit seiner Arbeit am AWMC schwor er, eine Lösung zu schaffen.
Morris' zufällige Begegnung mit Gary Bishop, außerordentlicher Professor für Informatik, brachte das Projekt ins Rollen. Bishop hatte nach Nutzern gesucht, die von der Entwicklung maßgeschneiderter unterstützender Werkzeuge profitieren könnten. Zum Zeitpunkt ihrer Begegnung gab es keine Karten der antiken Welt in einem für Sehbehinderte zugänglichen Format. Nach ihrem ersten Gespräch schuf Dr. Bishop die Möglichkeit für ein Team von Bachelorstudenten, eine Lösung in einem semesterlangen Software-Engineering-Kurs umzusetzen. Wir hatten das Glück, Teil des Fünf-Personen-Teams zu sein, das an diesem spannenden Projekt arbeitete.
Ziel des Software-Engineering-Kurses, der von Professor Kye Hedlund geleitet wurde, war es, den Studenten die Zusammenarbeit, die Zielsetzung und die Einhaltung von Fristen beizubringen. Unser Team begann mit Besprechungen mit unseren drei Beratern, um über anfängliche Designentscheidungen zu sprechen. Professor Bishop legte uns Dr. Dan Jacobsons Arbeit Navigating maps with little or no sight: An audio-tactile approach als Grundlage für die Entwicklung eines Werkzeugs vor, das Zugang zu räumlichen Informationen über Ton und Berührung bietet. Die Kernkomponenten unseres Systems waren ein Pentium III-Computer mit Windows 2000, ein Touchpad als primäres Eingabegerät und das Microsoft Speech SDK 5.1 zur Kommunikation von Informationen mit einer synthetisierten Stimme.
Wahl von Python
Angesichts der gewaltigen Aufgabe, ein Programm mit wenig Vorbild zu programmieren, war die erste wichtige Designentscheidung, die unser Team treffen musste, die Wahl einer Programmiersprache. Unsere anfänglichen Gedanken waren, entweder C++ oder Java zu verwenden, da jeder in der Gruppe beide beherrschte. Ein Gruppenmitglied hatte in einem früheren Kurs Python kennengelernt und war von der Leistungsfähigkeit und Benutzerfreundlichkeit beeindruckt. Die Tatsache, dass die anderen vier Mitglieder keine Erfahrung mit der Sprache hatten, hinderte uns glücklicherweise nicht daran, die kluge Entscheidung zu treffen, Python zu verwenden.
Sehr früh in der Entwicklung benötigten wir ein einfaches Programm, um zu testen, wie das Touchpad mit dem Betriebssystem interagiert. Dies erwies sich als unglaublich einfach mit wxPython, einem Python-Wrapper für das leistungsstarke wxWindows GUI-Toolkit. Das Einrichten eines Frames zur vollständigen Steuerung des Bildschirms war sehr unkompliziert und erforderte minimalen Code.
Angesichts unserer strengen Zeitvorgaben war eine Sprache, die eine schnelle Entwicklung ermöglichte, wie diese, ein großer Vorteil. Niemand in der Gruppe hatte zu dieser Zeit eine wirkliche Vorstellung davon, in welchem Umfang wir Python in dem Projekt einsetzen könnten. Als wir jedoch die umfangreiche Sammlung von Bibliotheken und Modulen entdeckten, die für uns verfügbar waren, entschieden wir uns, dass Python ausschließlich verwendet werden könnte.
Implementierung
Unsere nächsten Treffen waren mit Tom Elliott, dem Direktor des Ancient World Mapping Center, der praktischerweise einen Bachelor-Abschluss in Informatik hat. Er stellte uns den Barrington Atlas vor, ein zwölfjähriges Unterfangen, das mit den ersten umfassenden Karten der antiken griechischen und römischen Zivilisationen seit 1874 gipfelte. Das Ancient World Mapping Center digitalisiert nun alle Informationen dieses Atlas und macht die darin enthaltenen Informationen zu einem noch reichhaltigeren Lehrmittel. Die Britischen Inseln wurden als Prototypkarte ausgewählt. Unsere Diskussionen konzentrierten sich auf die Übersetzung der visuellen Darstellung des Bildes und der zugrunde liegenden Datenbankinformationen in ein Format, das unser Programm verwenden konnte.
Testkarte für das BATS-System Vergrößern
Elliott lieferte die ersten beiden Datendateien für BATS unter Verwendung von ArcView, einem leistungsstarken Werkzeug für die Arbeit mit Karten. Zwei ASCII-Textdateien wurden erstellt, die den Oberflächentyp und die Höhe unserer Karte angeben. Die Informationen waren als ein Raster von 1024 Spalten und 768 Zeilen formatiert, um der Auflösung unseres Displays und Touchpads zu entsprechen. Wir entschieden uns, dieses Raster von Zahlen in Numeric-Arrays in Python zu lesen.
Ursprünglich war einiges an Vorverarbeitung erforderlich, um die Daten für unser internes Modell zu skalieren. Wir wollten den Lese- und Skalierungsprozess nicht jedes Mal durchlaufen, wenn das Programm gestartet wurde, da dies ziemlich zeitaufwendig war. Stattdessen konnten wir die Daten einmal lesen und skalieren und dann die interne Struktur in eine komprimierte Datei "pickeln". Nun musste das Programm die Daten nur noch dekomprimieren und direkt in die entsprechende Datenstruktur laden, was zu einer erheblichen Reduzierung der Startzeit führte.
Das geladene Raster ermöglichte eine Eins-zu-eins-Entsprechung zwischen einem Pixel in unserem Bild und einem Wert in der Textdatei. Wir stellten uns vor, dass der Benutzer über das Audiogerät ein ständiges Feedback über seine aktuelle Position auf der Karte erhält, indem Geräusche mit Oberflächentypen verknüpft werden. Unsere nächste Sorge war, ob Python die Informationen schnell genug aus der Datenstruktur abrufen konnte, um ein reaktionsschnelles Feedback an unseren Endbenutzer zu geben. Python war jedoch in der Lage, diese Operationen reibungslos auszuführen und ermöglichte es uns, sofortiges akustisches Feedback über den Oberflächentyp zu geben. Als wir den Cursor des Benutzers auf dem Bildschirm beobachteten, sahen wir, dass beim Betreten des Ozeanbereichs die Soundausgabe des Programms sofort auf das Rauschen von Wellen umgeschaltet wurde und beim Wiedereintritt in Land das Geräusch ohne Verzögerung wieder wechselte. Der Benutzer hatte seine erste digitale Erkundung der Landform der Britischen Inseln begonnen. Auch die Höhe konnte für jeden Punkt auf der Karte ohne rechnerische Pausen ausgelesen werden.
Unser System besteht aus zwei Hauptkomponenten: einer grafischen Benutzeroberfläche und einem Datenmanager. Die Benutzeroberfläche interagiert über den Datenmanager mit den Daten. Unsere Benutzeroberfläche verwendet nur ein Touchpad und eine Tastatur, um sehbehinderten Menschen mit minimalen Computerkenntnissen zu helfen. Wenn sich der Benutzer über das Touchpad bewegt, löst das wxPython Mouse Motion Event eine Abfrage der Oberflächentypentabelle und der Stadtdatenbank aus. Python ermöglichte es uns, Kombinationen von Tastatur- und Mausereignissen schnell neu zuzuweisen und zu testen.
Die Benutzeroberfläche umfasst das Touchpad, die Tastatur und einen Sprachsynthesizer zur Rückmeldung. Die Maus- und Tastenereignisse wurden von wxPython behandelt, aber wir mussten auch die Speech API von Microsoft aufrufen. Dies taten wir mit dem win32com-Modul von Mark Hammond, das es uns ermöglichte, eine Stimme zu erstellen und Sprache in nur drei Codezeilen zu erzeugen.
Der Datenmanager verwaltet die Daten in drei Numeric-Arrays und einer ODBC-Datenbankverbindung, die mit dem win32all-Paket erstellt wurde. Die drei Arrays werden verwendet, um die Höhe, den Landtyp und einen Datenbankschlüsselwert zu speichern. Die Entscheidung, die Microsoft Access-Datenbank direkt von BATS abzufragen, fiel sehr nah an unserer Projektfrist. Wieder einmal ermöglichte Python unserem Team, die Idee schnell und erfolgreich umzusetzen. Abfragen an die Access-Datenbank erfolgen über eine ODBC-Verbindung, wobei der Wert aus dem Datenbankschlüsselarray verwendet wird, um zu bestimmen, welche Stadtinformationen mit einem bestimmten Standort verbunden sind. Die Möglichkeit, Abfragen an die Datenbank durchzuführen, erweiterte den Bildungsnutzen dieses Werkzeugs erheblich, indem sie die dynamische Erstellung von Karten ermöglichte.
Ergebnisse
Am Ende unseres Semesters hatten wir ein Werkzeug geschaffen, das die Erkundung komplexer Karteninformationen ermöglichte. Alle Informationen, die durch das Betrachten der Karte hätten gewonnen werden können, konnten nun auf ähnliche Weise durch das Hören einer synthetisierten Stimme und von Sound-Icons gewonnen werden. Unsere Karte bot auch die sofortige Übermittlung von Entfernungen zwischen zwei beliebigen Orten, ohne auf eine Tabelle für Berechnungen zurückgreifen zu müssen. Die Möglichkeit, die Existenzperioden, den Typ und den Namen von Siedlungen zu hören, erweiterte die Nutzung der Karte über das hinaus, was in einer rein visuellen Darstellung verfügbar ist. Morris konnte unser Projekt als Ressource für das Schreiben einer Abschlussarbeit für die Abteilung für Klassische Philologie nutzen.
Jason Morris (links) arbeitet mit BATS mit Tom Elliott (Mitte) und Thomas Logan (rechts) Vergrößern
Python ermöglichte es uns zu beweisen, dass diese Art der Datenmanipulation für Karten möglich ist, und schuf eine aussagekräftige Demonstration, um andere für das Projekt zu begeistern. Wir hatten die Gelegenheit, unsere Software während Präsentationen im Laufe des Semesters zu demonstrieren. Während der Vorbereitungen kurz vor einer Präsentation erschien unweigerlich ein zuvor unbemerkter Fehler. Wir stellten fest, dass diese Fehler mit Python sehr schnell gefunden und behoben werden konnten, da es die Zeilennummer und den Stack-Trace bis zu dem Punkt meldet, an dem der Fehler aufgetreten ist. Es ist nicht nötig, Code zu kompilieren oder komplexe Verbindungen zwischen Bibliotheken einzurichten. Da alles zur Laufzeit interpretiert wird, konnten wir die schnelle Entwicklung fortsetzen, ohne durch komplexe syntaktische Probleme belastet oder durch Kompilierzeiten verlangsamt zu werden.
Die Möglichkeit, eine Demonstration für ein bestimmtes Publikum schnell anzupassen, war ebenfalls ein Vorteil von Python. Als wir unser Projekt einer Gruppe von Orientierungs- und Mobilitätslehrern und ihren sehbehinderten Schülern vorstellten, konnten wir schnell eine Karte von North Carolina erstellen, die vertrauter war als die des antiken Englands. Sobald wir verstanden hatten, wie alle Teile zusammenpassen sollten, bot Python eine Umgebung, um das Programm einfach zusammenzufügen. Die von uns produzierten Demos halfen uns, ein Microsoft Research Grant zur Weiterentwicklung des Projekts zu erhalten. Diese Demonstrationen haben auch das Interesse der Medien geweckt, was dazu beiträgt, die Notwendigkeit von Karten für Blinde bekannt zu machen.
Python machte es auch sehr einfach, Module anderer Programmierer in unseren Code zu integrieren. Wir experimentieren mit der Python Imaging Library, pyXML und Numeric und tun dies weiterhin. Professor Bishop und der Doktorand Peter Parente ermöglichten die Nutzung der OpenAL-Bibliothek für räumlichen Ton und der Immersion-Bibliothek für haptisches Feedback aus Python. Dies geschah mit SWIG, das die automatische Entwicklung von Python-Sprach-Bindings für C- und C++-Code ermöglicht.
Das BATS-Team arbeitet nun daran, Aspekte des Programms an lokale High Schools weiterzugeben. Wir glauben, dass es einfach sein wird, die Konzepte des zugänglichen Designs anhand des leicht lesbaren Python-Codes zu veranschaulichen. Wir hoffen, viele Studenten für die Möglichkeiten assistiver Technologie zu begeistern und eine Gemeinschaft von Menschen zu fördern, die an Open-Source-Lösungen arbeiten. Wenn Sie sich beteiligen möchten, besuchen Sie die Website für Assistive Technologies unter http://www.cs.unc.edu/assist.
Über die Autoren
Chad Haynes lebt in New York City und arbeitet als Research Programmer an der Rockefeller University.
Thomas Logan lebt derzeit in Seattle, Washington, und arbeitet für die Microsoft Corporation als Program Manager in der Accessible Technologies Group.
