Belegarbeit im Fach Neuroinformationsverarbeitung
"NumberOCR"

 

Dozent:

Prof. Dr. rer. nat. habil. H. Iwe

 

 

Name:

Maik Zachacker

Studiengang:

Allgemeine Informatik

eMail:

s51317@informatik.htw-dresden.de

 

 

Thema: Zeichenerkennung unter Verwendung einer Self Organizing Map

Einleitung

Aufgabe dieser Belegarbeit war es auf Basis des SOM simulator-Frameworks, von Markus Schubert, die Erkennung von Nummern mittels einer self organizing map zu realisieren. Das Programm NumberOCR wurde daher als PlugIn für diesen konzipiert und entsprechend umgesetzt. Das PlugIn fügt sich nahtlos in den SOM simulator ein und nutzt die damit erstellte Kohonen-Karte.

Das SOM (Kohonen Karte)

Kohonen-Karten (benannt nach dem Erfinder Teuvo Kohonen) oder auch bekannt unter dem Namen self organizing maps (SOM) sind eine Art von neuronalem Netz, welches Nachbarschaftsbeziehungen im Eingaberaum durch Nachbarschaften in den Neuronenbeziehungen ausdrückt. Das heißt, werden ähnliche Eingaben an das Netz angelegt, so reagieren auch benachbarte Neuronen auf diese Eingabe. Die self organizing map besitzt 2 Schichten. Eine Eingabe-Schicht und eine nach dem Entwickler benannte Kohonen-Schicht. Self organizing map's sind in der Lage mehrdimensionale Eingabemuster auf eine zweidimensionale Struktur abzubilden, welche sich durch Wettbewerbslernen (competitive learning) in einem unüberwachten Lernprozess von selbst ausbildet. Anhand folgender Skizze kann man sich eine Vorstellung eines SOM's machen.

Kohonen-Karte

Im Projekt wird wie im Bild zu erkennen eine zweidimensionale Kohonen-Karte verwendet. Jedes der Inputneuronen ist mit allen Neuronen der Karte verbunden, jedoch sind die Inputneuronen voneinander unabhängig. Die Neuronen in der Kohonen-Karte besitzen eine Nachbarschaftsbeziehung, die wichtig ist um ein auseinanderfalten der Karte zu ermöglichen. Die Karte kann dabei geschlossen oder geöffnet sein. Ist die Karte geschlossen, so haben Neuronen am Rand der Karte weniger Nachbarn als die in der Mitte und es erfolgt kein Lernen über die Ränder hinaus, siehe linkes Bild. Bei einer geöffneten Karte haben dagegen alle Neuronen die gleiche Anzahl an Nachbarn und es wird über den Rand der Karte hinaus gelernt, siehe rechtes Bild.

Grafik18
 
Grafik19

Der Lernprozess

Als erstes wir für jedes Zeichen, dass später einmal erkannt werden soll, eine Muster benötigt. Im Beleg werden diese Muster als XML-Datei geliefert, welche für jedes Zeichen eine Matrix mit 5x7 Pixeln beinhaltet, aus welchen die Merkmale extrahiert werden. Prinzipiell überprüft das SOM ob ein bestimmtes Pixel zum Symbol oder zum "weißen" Hintergrund gehört. Dieses wird im Featurevektor entsprechend codiert eingetragen. Der Inputvektor hat folgenden Aufbau:

Inputvektor

Die Neuronen in der Kohonen-Karte werden nun mit den angelegten Mustern verglichen. In der Lernphase erfolgt dabei eine Veränderung der Gewichte der Neuronen der Kohonen Karte. Bei der späteren Erkennung erfolgt nur noch ein Vergleich. Damit überhaupt zulässige Vektoroperationen möglich sind ist es zwingend notwendig, dass die Neuronen der Karte mindestens genauso viele Elemente haben wie Inputneuronen:

Objekt2

Liegen die Eingabevektoren vor, kann das Netz angelernt werden. Im Allgemeinen wird ein SOM mit zufälligen Werten initialisiert. Auch wenn das Netz bereits angelernt ist können neue Eingabemuster angelernt werden.

Beim Lernen werden nun alle Inputneuronen der Reihe nach immer wieder mit allen Kartenneuronen verglichen. Es wird ein Gewinner in der Kohonen-Karte für das angelegte Muster ermittelt. Das Neuron mit dem kleinsten Abstand zwischen den beiden Vektoren ist das so genannte Gewinnerneuron.

Systemvoraussetzungen

Installation

Installation von Java 2 unter Windows

Laden Sie die Datei „jre-1_5_0_06-windows-i586-p.exe“ von „http://www.java.com/de/download/manual.jsp“ herunter und führen Sie die Datei aus.

Installation von Java 2 unter Linux

Installieren des Programmes SOM simulator

Das Programm SOM simulator liegt als ausführbare Java-Anwendung vor: som.jar Zusätzlich werden folgende Dateien benötigt: Ziffern.xml jai_codec.jar jai_core.jar Die Musterbilder liegen im Verzeichnis: Pattern Eine Installation ist nicht erforderlich, es reicht die Dateien aus dem Archiv zu entpacken.

Installation von Java Advanced Imaging

Kopieren Sie die Dateien „jai_codec.jar“ und „jai_core.jar“ in das Unterverzeichnis „jdk1.5.0_04\lib\ext“ Ihres Java-Installationsverzeichnisses (C:\Programme\Java\jdk1.5.0_06\lib\ext\ oder JAVA_ROOT/lib/ext/).

Einschränkungen

Es werden Eingabebilder der Dimension 300x100 Pixel benötigt, die ausschließlich aus Hintergrund und Text bestehen. Das SOM erkennt kursive Ziffern nur unzureichend. Die Zeichentrennung muss manuell durchgeführt werden, da eine automatische Trennung durch Zeichenüberlappung nicht umsetzbar war.

Das Programm SOM simulator

Der SOM simulator wird mittels des Kommandozeilenbefehles „java -jar som.jar“ im von Ihnen gewählten Verzeichnis oder per Doppelklick auf die Datei „som.jar“ im Explorer gestartet. Nach dem Starten des Programms finden Sie die Oberfläche des SOM simulators vor, wo nur eine leere Arbeitsfläche und eine Menüleiste zu sehen ist. Der SOM Simulator bietet die Möglichkeit ein ein- oder zweidimensionales SOM mit einer beliebigen Anzahl von Inputvektoren zu erzeugen. Außerdem kann das SOM mit verschiedenen Lernfunktionen trainiert werden und bietet mehrere Optionen das Lernverhalten zu beeinflussen. Die zum lernen notwendigen Muster müssen als PatternFile vorliegen, welche in XML verfasst sind und der beiliegenden XML Schema Definition genügen müssen . Als PlugIns werden die Darstellung einer Topologischen Karte des SOM, eine grafische Anzeige für das Handlungsreisenden Problem, eine zweidimensionale Karte und eine Komponentenkarte angeboten. Im Rahmen dieses Beleges wurde das PlugIn NumberOCR hinzugefügt. Dieses dient der Erkennung von Ziffern, die in verschiedenen Schriftarten als 6-stellige Zahl im JPG-Format vorliegen. Die Zeichentrennung wird dabei manuell durch den Nutzer durchgeführt.

Die Musterdatei

Die Musterdatei, auch PatternFile genannt, beinhaltet die Informationen über ein PatternSet. Das PatternSet besteht aus einem Namen, der Anzahl der im Set enthaltenen Muster, der Featurevektorgröße, der Position der einzelnen Featurevektoren in einer zweidimensionalen Karte und natürlich den Mustern (Pattern). Die Musterdatei ist entsprechend einer XML-Notation aufgebaut, welche in der Datei PatternSet.xsd beschrieben ist.

Im PatternFile enthaltene Informationen:

NameOfPatternSet
- Name des Mustersatzes
NumberOfPattern
- Anzahl der Muster
DimensionOfFeatureVector
- benötigte Featurevektorgröße
NameOfData
- Position der Featurevektorelemente im 2D-Raum
Pattern
- Muster
NameOfPattern
- Name des jeweiligen Musters
Data
- Wert des Featurevektors an der jeweiligen Position

Auszug aus dem PatternFile Ziffern.xml:

<?xml version="1.0" encoding="UTF-8"?>
<PatternSet>
	<NameOfPatternSet>Ziffern in 5x7 Matrix</NameOfPatternSet>
	<NumberOfPattern>10</NumberOfPattern>
	<DimensionOfFeatureVector>35</DimensionOfFeatureVector>
	<NameOfData>0-0</NameOfData>
	<NameOfData>1-0</NameOfData>
	<NameOfData>2-0</NameOfData>
	<NameOfData>3-0</NameOfData>
	<NameOfData>4-0</NameOfData>
	<NameOfData>0-1</NameOfData>
	<NameOfData>1-1</NameOfData>
	<NameOfData>2-1</NameOfData>
	<NameOfData>3-1</NameOfData>
	<NameOfData>4-1</NameOfData>
	<NameOfData>0-2</NameOfData>
	<NameOfData>1-2</NameOfData>
	<NameOfData>2-2</NameOfData>
	<NameOfData>3-2</NameOfData>
	<NameOfData>4-2</NameOfData>
	<NameOfData>0-3</NameOfData>
	<NameOfData>1-3</NameOfData>
	<NameOfData>2-3</NameOfData>
	<NameOfData>3-3</NameOfData>
	<NameOfData>4-3</NameOfData>
	<NameOfData>0-4</NameOfData>
	<NameOfData>1-4</NameOfData>
	<NameOfData>2-4</NameOfData>
	<NameOfData>3-4</NameOfData>
	<NameOfData>4-4</NameOfData>
	<NameOfData>0-5</NameOfData>
	<NameOfData>1-5</NameOfData>
	<NameOfData>2-5</NameOfData>
	<NameOfData>3-5</NameOfData>
	<NameOfData>4-5</NameOfData>
	<NameOfData>0-6</NameOfData>
	<NameOfData>1-6</NameOfData>
	<NameOfData>2-6</NameOfData>
	<NameOfData>3-6</NameOfData>
	<NameOfData>4-6</NameOfData>
	<Pattern>
		<NameOfPattern>0</NameOfPattern>
		<Data>0</Data>
		<Data>1</Data>
		<Data>1</Data>
		<Data>1</Data>
		<Data>0</Data>
		<Data>1</Data>
		<Data>0</Data>
		<Data>0</Data>
		<Data>0</Data>
		<Data>1</Data>
		<Data>1</Data>
		<Data>0</Data>
		<Data>0</Data>
		<Data>0</Data>
		<Data>1</Data>
		<Data>1</Data>
		<Data>0</Data>
		<Data>0</Data>
		<Data>0</Data>
		<Data>1</Data>
		<Data>1</Data>
		<Data>0</Data>
		<Data>0</Data>
		<Data>0</Data>
		<Data>1</Data>
		<Data>1</Data>
		<Data>0</Data>
		<Data>0</Data>
		<Data>0</Data>
		<Data>1</Data>
		<Data>1</Data>
		<Data>1</Data>
		<Data>1</Data>
		<Data>1</Data>
		<Data>1</Data>
	</Pattern>
	...
	<Pattern>
		<Data>...
			...</Data>
	</Pattern>
</PatternSet>

Das Plugin NumberOCR

Das Programm NumberOCR wurde entwickelt um Ziffern verschiedener Schriftarten zu erkennen. In den letzten Jahren wurden einige Websites mit einem Zugangsschutz für Bots ausgerüstet, dies wird über eine Grafik erreicht, welche Buchstaben oder Zahlen, teilweise auch beides enthält. Durch die Verwendung verschiedenster Schriftarten wird eine Erkennung durch Bots umgangen, selbst der Mensch hat oft Probleme die Zeichen zu erkennen. Dies war die Inspiration für dieses PlugIn, welches die Erkennung der Ziffern ermöglichen soll. Eine automatische Zeichentrennung ist leider noch nicht implementiert, daher gibt es die Möglichkeit die Zeichen selbst zu trennen. Das PlugIn NumberOCR besteht aus mehreren Bereichen. Im linken oberen Bereich befinden sich die Buttons zum öffnen eines Verzeichnisses, in welchem sich die zu Erkennenden Bilder befinden, sowie zum Invertieren des Bildes, Leeren des Anzeigebereiches und zum Auffinden der Randpixel der Zahl. Darunter befinden sich vier Schieberegler, mit denen Sie die vier Grenzen (oben, unten, links und rechts) der Ziffern einstellen können. Die rechte Seite unterteilt sich in den Anzeigebereich der Zahl, sowie 6 Anzeigeelementen für die getrennten Ziffern und den Ausgabebereich, wo das Ergebnis ausgegeben wird. Links und rechts des Anzeigebereiches sind Buttons zum Wechseln des Bildes positioniert. Die Buttons darunter sorgen für die Übertragung des markierten Bereiches in das darunter befindliche Anzeigeelement. Der Inhalt des markierten Bildausschnittes wird dabei auf eine Größe von 5x7 Pixel heruntergerechnet.

NumberOCR Plugin

Downloads