Automatische Zahlenerkennung

A Very Stable Genius

Automatische Zahlenerkennung

Auf dieser Seite wird die Mustererkennung mit einem neuronalen Netz zum automatisierten Erkennen von handgeschriebenen Zahlen angewendet. Die Grundlage für das vorliegende Programm bildet ein so genanntes Hopfield-Netz. Die zu erkennenden Muster können bis zu 30 Prozent verrauscht bzw. gestört sein.

Die verschiedenen Ziffern werden beim Aufruf des Mustererkennungsprogramms «gelernt», d.h. bei jedem Drücken der Taste «erkennen». Rechentechnisch handelt es sich also um keine effiziente Umsetzung. Es zeigt aber, wie schnell der Lern-Algorithmus funktionert. Höhere Auflösung, Skalierung und Einmittung ergäben eine bessere Trefferquote erzielen. Alternative, aufwendigere Ansätze – wie zum Beispiel ein «Multilayer-Perceptron» zusammen mit «Supervised Learning» – würden die Erkennung ebenfalls optimieren.

Die Programmierung erfolgte in JavaScript (siehe Atwood's Law: «Any application that can be written in JavaScript, will eventually be written in JavaScript») unter Verwendung des jquery-Bibliothek und des umfangreichen Vektorgraphik-Skripting-Pakets Paper.js («The Swiss Army Knife of Vector Graphics Scripting»). Die eigentliche Filterfunktion ist in PHP programmiert.

    

Alle Programme bzw. Skripte wurden im Atom-Texteditor geschrieben.

Bei allen verwendeten Programmierwerkzeugen und -sprachen handelt es sich um um sog. «open source»-Produkte.

Papierblock und Stift

Bitte hier unter Ausnutzung der vollständigen Fläche eine Ziffer (0, 1, …, 9) schreiben, anschliessend die Taste «erkennen» drücken:



Das karierte Notizpapier oben hat eine Auflösung von binären Feldern (Matrix) bzw. Bildpunkten. Dies erinnert mehr an Facettenaugen von Insekten als an die Netzhaut in den Augen von Wirbeltieren.

Es gibt keine Radiergummi-Funktion. Um die Zeichnung zu löschen, muss entweder der Knopf «löschen» gedrückt oder die Seite neu geladen werden.

Die Empfindlichkeit des Stifts musste – vor allem in der Nähe der grauen Feldlinen, dem Karo-Muster – etwas reduziert werden, um die Ergebnisse bei der Rasterung zu optimieren. Bisweilen wird deshalb ein Strich gezeichnet, ohne dass das überstrichene Feld anspricht. Bei diesem Effekt handelt sich somit nicht um einen Programmierfehler, sondern hängt mit der eingestellten Fehlertoleranz zusammen.

Auswertung

Die eingegebene Zahl:

Die erkannte Zahl: