![]() |
|
1.1 Systemvoraussetzungen Das Projekt ist vollständig in C# geschrieben und nutzt das Microsoft .NET Framework Version 1.1. Fremdpakete werden nicht verwendet (Ausnahme ist die Zugriffsklasse für .ini Dateien, die im Netz als Quellcode zur Verfügung steht). Es werden somit die .NET 1.1 Laufzeitbibliotheken benötigt. Das Lesen und Schreiben der .ini Dateien erfolgt mit Hilfe von Kernelbibliotheken. Somit ist die Nutzung auf MS Windows beschränkt, selbst wenn .NET für andere Plattformen zur Verfügung steht. Aufgrund der Bildverarbeitungsroutinen und Trainingsphase des Netzes wird ein "leistungsfähiger" Rechner empfohlen (900 MHz haben mir gereicht). Ein Herantasten von unten an die Anzahl der Lernzyklen ist ratsam (Zeit hängt u.a. von der größe des Netzes, der Größe der Featurevektoren, dem Nachbarschaftsradius ab), wobei bei sorgsam ausgewählten Parametern das Netz nach 1000 Lernzyklen gut entfaltet ist.
1.2 Das Learning Set Die Trainingsmuster bilden den Ausgangspunkt für das Anlernen des Netzes. Deshalb steht eine umfangreiche Bitmapmanipulation für die Eingabesymbole zur Verfügung.
Das Learning Set ist in der Hauptapplikation über den Kartenreiter ganz rechts zu erreichen. Der Sinn des Learning Sets besteht darin, durch manuelle Manipulation der zur Verfügung stehenden Bilder, schon möglichst gute Lernvektoren zu erhalten. Für das Projekt stehen von nahezu allen Symbolen kleine Bitmaps von etwa 20x40 Pixel Größe zur Verfügung. Es ist möglich jedem festen Symbol A bis Z und 0 bis 9 ein anderes Bitmap zuzuordnen. Durch die Flexibilität der Lösung können z.B. auch Kennzeichenalphabete anderer Nationen erkannt werden, oder im realitätsnahen Einsatz die Fotos aus einem spezifischen Kamerawinkel zum Training benutzt werden. Oben links befindet sich die Gruppe Source. Hier kann jedem Symbol ein Bitmap zugeordnet werden (vorzugsweise in der Größe der Bereits vorhandenen Bitmaps). Rechts neben dem Original befindet sich das Graubild. Links unten in der Gruppe Edit sind die eigentlichen Einstellungen vorzunehmen. Der Glättungsradius kann bestimmt werden (bei größerem Radius wird das Bild unschärfer, gleicht aber das Rauschen aus). Außerdem kann der Schwellwert für die Umwandlung in ein schwarzweiß Bild angegeben werden. Ziel ist ein schwarzweißes Bild, das dem wirklichen Symbol am nächsten kommt. Bei horizontalen bzw. vertikalen Kanten sollten Pixelausreißer vermieden werden, da diese sonst beträchtliche Unterschiede in den Ergebnissen verursachen können. Im rechten oberen Bereich wird das beschnittene Bitmap angezeigt, sowie eine skalierte Version. Beim Beschneiden werden alle komplett weißen Zeilen und Spalten des Bildes von außen entfernt (deshalb Pixelausreißer vermeiden). Anschließend wird auf einen 20x20 Bitmap skaliert. Der letzte Schritt zum Erzeugen der Input Vektoren besteht in der Auswahl der charakteristischen Zeilen und Spalten der Bitmaps. Diese sollten mit Bedacht gewählt sein (Randzeilen und -spalten besser vermeiden). Vektoren mit 6 Zeilen und Spalten haben sich als geeignet herausgestellt. Aber auch andere Einstellungen führen zu guten Ergebnissen. Mit zunehmend leistungsfähigeren Rechnern können auch größere Featurevektoren interessant werden. Wichtig ist zu erwähnen, dass die Einstellungen für Glättungsradius und Grauschwellwert für jedes Symbol separat eingestellt werden können. Die Feature Matrix gilt jedoch für alle Symbole gleich. In der Text Box rechts unten kann man für alle Symbole den entsprechenden Feature Vektor sehen. Mit dem Button ganz unten rechts muss man die erzeugten Input Vektoren in das aktuelle SOM übernehmen. Sollten die Größen der Input Vektoren und der Netzneuronen nicht übereinstimmen, kann ein neues Netz erstellt werden. 1.3 Die Lernphase Sind einmal die Inputvektoren erstellt, kann das SOM erstellt werden und trainiert werden.
Die entsprechenden Einstellungen findet man auf der mittleren Karteikarte. Links oben werden die Dimensionen der Karte eingestellt, z.B. 12 mal 12 Neuronen. Die Anzahl der Features und der gewählten Spalten und Zeilen kann im SOM nicht verändert werden. Diese werden festgelegt bei der Zuordnung der Inputvektoren im Learning Set und können auch nur dort verändert werden. Es soll hier schon erwähnt werden, dass die spätere Erkennung der Symbole mit den im SOM festgeschriebenen Werten erfolgt, nicht mit den im im Learning Set stehenden! Somit soll verhindert werden, dass ein Netz zum Vergleich auf Symbole (also Feature Vektoren) benutzt wird, für die es nicht trainiert wurde. Im Bereich Learning Parameters auf der linken Seite werden die Lernparameter eingestellt. Die Lernrate kann zwischen 0 und 1 festgelegt werden, der Nachbarschaftsradius zwischen 0 und 4. Nähere Erklärungen zur Anpassung der Parameter während des Lernens sind hier zu finden. Die Check Box Cumulative Learning gibt an, ob eine Anpassung der Gewichte direkt nach Anlegen der Eingabeneuronen erfolgt, oder ob erst alle Inputs angelegt werden und danach erst eine Anpassung erfolgt ( = Cumulative Learning ein). Im ersten Fall erfolgt ein verstärkter Verdrängungswettbewerb. Gestartet wird die Trainingsphase durch den Learn Button. Mit dem Init Button werden die Netzneuronen neu initialisiert. Über Input kann man die angelegten Inputneuronen überprüfen. Liegt kein Input vor, muss dieser im Learning Set geladen werden. Rechts wird das Netz dargestellt. Die Symbole zeigen die Winnerneuronen derselben an. In Select Map kann derzeit nur die aktuelle Karte ausgewählt werden.
1.4 Die Kennzeichenerkennung Die Erkennung wird in der Karteikarte Verification durchgeführt.
Eine Erkennung wird gestarted, indem eines der Testbilder über den Button Open Image oben rechts geladen wird. Es startet eine automatische Bildverarbeitung, in der versucht wird die Lage des Kennzeichens zu lokalisieren. Dies kann insbesondere bei langsamen Rechnern einige Sekunden dauern. Die gefunden Stelle wird mit einem Rechteck im Bild kenntlich gemacht. Der Ausschnitt ist in der Originalgröße rechts oben zu sehen. In der Gruppe Assumed Target Region können Einstellungen bezüglich der Zielregion, also des Nummernschildes, vorgenommen werden. Eine gute Einschätzung der Größe des Kennzeichens wird zu besseren Ergebnissen beim Auffinden führen. Die mitgelieferten Testbilder sind alle in der selben Entfernung gemacht und sollten in alle etwa 200x40 Pixel groß sein. Weiterhin wird eine Korrektur in X und Y Richtung vornehmen, wobei der Ursprung die linke obere Bildecke ist. Der Kennzeichenrahmen mit entsprechenden Werbetexten führt oft zur Verfälschung der Zielregion. Die Korrekture soll dies Ausgleichen. In der Regel muss einige Pixel negativ korrigiert werden. Bei bestimmten Voraussetzungen wird das Kennzeichen auch komplett verfehlt. Gründe dafür können hier nachgelesen werden. Durch Klicken und Ziehen auf das Auswahlrechteck im Bild, kann die Zielregion per Hand verschoben werden. Folgefehler werden so vermieden. Über den Button 'Reload' kann jederzeit die automatische Erkennung mit den gerade eingestellte Parametern wiederholt werden.
Symboltrennung Nachdem der Bereich des Nummerschildes ermittelt wurde, müssen die Symbole voneinander getrennt werden. Einstellungen dafür werden in der Gruppe Letter Separation vorgenommen. Mit der minimalen Höhe und Breite der Symbole wird verhindert, dass kleine Störungen und Fragmente als Symbol separiert werden. Die Werte geben also vor, wieviele zusammenhängende Pixel ein Symbol haben muss. Zu große Werte führen dazu, dass schmale Symbole eher herausgefiltert werden. Es soll jedoch darauf hingewiesen werden, dass bei der aktuellen Schriftart, entgegen der alten Schreibweise, die Symbole eine ähnliche Breite aufweisen. Rechts neben den Einstellungen für Höhe und Breite befinden sich die Einstellungen für die minimale Zeilen- und Spaltenaktivierung. Die Aktivierung bezieht sich wiederum auf das Gradientenbild (siehe hier). Während die Spaltenaktivierung genutzt wird um die Symbole voneinander zu trennen, soll bei der Zeilenaktivierung der obere und untere Rand abgeschitten werden. Die Bereiche mit Symbolen haben im Gradientenbild eine hohe Aktivierung, da viele Kanten vorhanden sind. Wertet man die Aktierungen spalten- und zeilenweise aus, kann man die Symbole extrahieren. Weiterhin kann eine Anzahl von Defektstellen angegeben werden. Dadurch kann bei Störungen ein Auseinanderreißen der Symbole verhindert werden (die dann durch die geringe Breite oder Höhe ganz aus der Erkennung fallen). Die Werte geben an, wieviele aufeinanderfolgende Zeilen bzw. Spalten die minimale Aktivierung nicht erfüllen müssen, wenn sie von Zeilen bzw. Spalten umgeben werden die diese erfüllen. Das alles hört sich relativ kompliziert an, ist jedoch bei etwas Übung schnell zu bewerkstelligen. Und sauber getrennte Symbole erhöhen die Erkennungsrate dramatisch. Bei neu geladenen Bildern muss die Trennung der Symbole mit dem Button Separate gestartet werden. Eine Änderung der Parameter führt auch ohne drücken dieses Buttons zur Neuberechnung. Mit der Trennung der Symbole ist auch automatisch immer eine Erkennung dieser verbunden. Hinweis: Die getrennten Symbole werden einzeln ausgeschnitten noch einmal als Bitmap angezeigt. Bei niedriegen Aktivierungen und vieler zulässiger Defektstellen kann es passieren, dass 2 Symbole zusammengefasst werden. Dies sieht dann so aus, als ob ein Symbol gänzlich durch die Erkennung gefallen ist. Es kann aber sein , dass dieses einem anderen Symbol anhänglich ist. Da dem Bitmap nur der Platz für ein Symbol zur Verfügung steht ist dieses dann nicht sichtbar. Eine Erkennung des richtigen Symbols ist dann ausgeschlossen oder Zufall. In der Detailansicht kann man jedoch genauer die Symbole überprüfen.
Erkennung Ganz links unten sind die erkannten Symbole aufgeführt. Die Erkennung wird wie schon erwähnt jedesmal durchgeführt, wenn sich die separierten Bitmaps der Symbole ändern. Eine Änderung der Bitmaps tritt auch noch einmal auf, wenn die Glättung oder der Schwellwert für die Grauwerte in der Erkennung (Recognition) links unten verändert wird. Diese Änderung ist nicht in den separierten Bitmaps in der Letter Separation Gruppe ersichtlich! Es empfiehlt eine eher geringe Glättung (entweder 0 oder 1) und ein Schwellwert um die 70. Bei deutlich anderen Belichtungen des Fotos kann aber auch ein deutlich anderer Schwellwert erforderlich sein. Bessere Erkennungsraten deuten auf bessere Werte hin.
Die Statistik Zur Besseren Einschätzung des Ergebnisses befindet sich rechts unten die Gruppe Statistics. Hier wird für das augewählte Symbol ein kleines Diagramm angezeigt. Dieses bezieht sich auf den Hammingabstand der jeweiligen "Symbolneuronen" im Netz zu dem ermittelten Gewinnerneuron. Vollausschlag bedeutet, dass das Winnerneuron übereinstimmt mit dem Neuron das das gelernte Inputneuron anspricht. Erkannt wird immer das Symbol ganz links im Diagramm. Über die Scrollbar kann man sich nun für alle Symbole die Diagramme anzeigen lassen. Hinweis: Bei sehr großen Netzen mit großen Leerbereichen (bezogen auf die Symbolverteilung) kann es vorkommen, dass nur kleine Werte im Diagramm gezeigt werden. Da es sich um absolute Hammingabstände handelt werden Hammingabstände > 4 nicht mehr als Balken angezeigt, die Erkennung an sich wird nicht beeinflußt. Netze mit zu großen Leerräumen sollten schon von vorne herein vermieden werden. Neben der dieser Schnellstatistik kann man über den Button Details eine ausführliche Statistik aufrufen.
Hier kann noch einmal der Transformationsprozess nachvollzogen werden. Eventuell zusammenhängende Symbole kann man spätestens hier erkennen. Außerdem kann man auch die Wirkung der Glättung und des Schwellwert für die schwarzweiß Umwandlung einschätzen. Links unten wird ein Vergleich zwischen dem ermittelten Feature Vektor und dem Vektor des ermittelten Input Symbols durchgeführt. Die Anzahl der Unterschiede ist ablesbar. Sollte nicht das richtige Symbol erkannt werden, besteht die Möglichkeit in der Drop Down List den Vektor des benötigten Input Symbols nachzuladen. Auf der rechten Seite kann man von oben nach unten das ermittelte Symbol, das Winner Neuron und die Hamming Abstände des Winner Neurons zu den "Symbolneuronen" ablesen. Die Hammingabstände sind noch einmal eine ausführliche Statistik zu dem bereits erwähnten Balkendiagramm. Über den Button Show kann man sich das Winner Neuron in der Karte anzeigen lassen und noch einmal eine Einschätzung über das ermittelte Ergebnis gewinnen.
1.4 Das Menu Alle möglichen Optionen zum Laden und Speichern werden über das File Menu aufgerufen.
Im oberen Teil sind die Bereiche für das neuronale Netz zu finden.
Für die Inputmuster gibt es vergleichbar lautende Punkte
Bei den Input Vektoren wird für jedes Symbol die individuelle Bitmapdatei, der Glättungsradius sowie der Schwellwert für die schwarzweiß Transformation gespeichert. Die charakteristischen Zeilen und Spalten die zur Erzeugung der Feature Vektoren herangezogen werden, sind jedoch für das ganze Set gleich. Der Punkt Exit and Save Preferences beendet die Applikation.Die Einstellungen der meisten Parameter werden dabei gesichert. Beim nächsten Start werden das geladene Netz sowie das aktuelle Input Set wieder geladen. Das Netz und Input Set selbst wird jedoch nicht gespeichert. Ist die Sicherung der Daten nicht erwünscht muss die Anwendung über das Kreuz rechts oben beendet werden.
Über den Menüeintrag Tools sind die im folgenden Abschnitt erklärten Hilfsmittel erreichbar.
1.5 Nützliche Tools Mit dem SOMTest ist es möglich die Lernerfolge des neuronalen Netzes zu überprüfen. Ein Netz kann als gut eingeschätzt werden, wenn ähnliche Muster sich in Nachbarschaftsbeziehungen befinden. Bei der Erkennung muss man davon ausgehen, dass nicht genau der Feature Vektor aus dem Bild "herausgelößt" wird, wie der mit dem das Training erfolgte. Deshalb soll mit dem SOMTest eine gestörte Erkennung simuliert werden.
Alle Einstellungen werden im oberen Bereich festgelegt. Jedes Input Symbol ist wählbar. Rechts oben wird die Anzahl der veränderten Elemente im Bezug vom Original Input Vektor zu einem erzeugten eingestellt. Es ist garantiert, dass genau diese Anzahl an Elementen unterschiedlich sein wird. Es ist nicht möglich zu bestimmen welches Element verändert wird (kein Aufwand Nutzen Verhältnis, da nur schwer nachvollziehbar welcher Bildpunkt gerechtfertigterweise verändert wird). Stattdessen wird über den Generate Button jedesmal ein zufällig veränderter Feature Vektor erzeugt. Im unteren Bereich kann man die jeweiligen Hamming Abstände vom Winner zum "Symbolneuronen" ablesen. Bei jedem Generate wird das Winner Neuron in der Karte angezeigt (eventuell das SOMTest Fenster zur Seite schieben).
Das TheoreticNeighbours Tool zeigt die Skalarprodukte zwischen dem jeweils ausgewählten Symbol und allen anderen Symbolen an (immer bezogen auf die vorliegenden Input Vektoren). Mit sich selbst skalar multipliziert wird das Symbol immer den Wert 1 haben. Eine Einschätzung kann mit zur Hilfenahme der Karte erfolgen. Symbole die in der Liste weit oben erscheinen, sollten sich auch auf der Karte in der Nähe befinden, während Symbole mit geringem Skalarprodukt in der Karte einen großen Abstand haben sollten.
1.6 Einschränkungen Die Testbilder unterliegen bestimmten Einschränkungen, hauptsächlich aus Performancegründen sowie der Darstellung in der Anwendung. Die Bilder sind 640x480 Pixel groß. Die Aufnahmen sind alle aus der selben Entfernung gemacht. Deshalb kommt für den Kennzeichenbereich nur ein Bereich in Frage, der etwa 50% des Originalbildes umfasst und sich im Bereich von knapp über der Mitte des Bildes bis nach ganz unten erstreckt. Die automatische Kennzeichendetektion kann somit nur in diesem Bereich etwas finden. Bitmaps die als Lernvorlage genommen werden sollen, müssen im Ordner SourcePics, der sich unterhalb der Hauptanwendung befindet, liegen. Es werden nur Dateinamen bezüglich dieses Ordners gespeichert. Die Buchstaben I, Q und X werden nicht angelernt und somit auch nicht erkannt. Sie liegen jedoch auch nicht in Testbildern vor. Sollten einmal Beispiele mit diesen Buchstaben auftauchen, können sie jedoch problemlos angelernt werden. Das Wichtigste zuletzt. Es kann nur erkannt werden was auch trainiert wurde. Die mitgelieferten Symbole umfassen nur das deutsche Kennzeichenalphabet, das 2003 als aktuellste Version ausgegeben wurde. Weiterhin gültige deutsche Kennzeichen sind nicht mitgeliefert. Ähnliche Symbole können natürlich gemäß der Toleranz des Netzes trotzdem erkannt werden. |
|
![]() |
|
![]() |
|
|
|