Handschrifterkennung



  • Wir habens zwar nicht mit neuralen Netzen gemacht, aber wir haben in der Tat viele, viele Samples erstellt.

    und was habt ihr dann mit den samples gemacht?

    nen mittelwert genommen? das hätte bestimmt nicht gut funktioniert... oder vergleicht ihr einen buchstaben immer mit z.b. 10 soll-a's

    wie genau habt ihr denn nun einen bestimmten buchstaben definiert und wie läuft der vergleich ab?



  • @windalf: im augenblick ist es ein ziemlich billiger next neighbour, und das sample set manuell erstellt (überwachtes lernen 😉
    die merkmalvektoren wurden über pca extrahiert

    werde demnächst für dieses projekt einen bayes klassifikator, sowie eine support vektor maschine einzubauen



  • Hallo!

    Ihr könnt einen fix und fertigen Installshield-Installer bekommen. 1 Stunde ausprobieren, danach Idee verwerfen oder verwenden.

    Keine Bücher notwendig.



  • Habt ihr mal über die Verwendung von Fourier-Deskriptoren nachgedacht?



  • Gregor schrieb:

    Habt ihr mal über die Verwendung von Fourier-Deskriptoren nachgedacht?

    mann, macht ihr viel druck in richtung Fourier und Drehen.

    das paßt aber nicht harmonisch in den rest rein.

    und wenn dir die drehinfos endlich nach wochenlanger arbeit rausgeschmnissen haben, stellen wir fest, daß x und +, 8 und inf, / und \, W und M, E und 3, 5 und S, u und n, p und d, g und 6, 7 und L nicht mehr unterscheidbar sind.

    ich bin dafür, das von vornherein sein zu lassen. es gibt genügend andere sachen zu tun.



  • jop. eher legt man die stichproben so aus, dass drehungen mitreinklassifiziert werden



  • Hallo!

    Während sich hier einige mit Buzzword-Bingo vergnügen (neuronale Netze war auf meiner Liste!) habe ich mal das Programm samt einer kleinen Anleitung online gestellt.

    Ihr findet das ganze unter www.stud.uni-karlsruhe.de/~uzgv.
    Viel Spaß beim Testen.

    Achja, und nein: Ich werde nicht die komplette Struktur des Programmes umwerfen, nur weil irgendjemand mal irgendwo gehört hat, daß man vielleicht mit neuronalen Netzen möglicherweise irgendwas erkennen könnte.

    MfG Jester



  • So, ich hab mal ne Liste gemacht mit dem, was man als nächstes ausprobieren könnte:

    Wir brauchen ein Skript, das Messungen erlaubt. Es sollte nacheinander immer ein Zeichen aus der Datei lesen, versuchen dieses zu erkennen und es danach ins Samples-Set mit aufnehmen.
    Dabei sollte wir verschiedene Messungen machen: Was passiert bei Variation von precision, iprecision, dem pow-Argument vom AddPowerkernel, was bringen andere Kerne?
    Bei jedem Hinzufügen zum Samplesset sollte die Änderung jedes Samples erfaßt werden. Die Summe all dieser Änderungen gibt in jedem schritt an, inwiefern sich noch etwas verändert. Ist die Veränderung klein genug muß nur noch im Klassifikator eingefügt werden. Das geht möglicherweise deutlich schneller.

    Um sowas auch effizient implementieren zu können müssen wir das einlesen in ein eigenes Modul reinsetzen, das unabhängig arbeitet. Wenn ich das recht verstanden habe dann arbeitet Korbinian bereits an sowas.

    Außerdem muß der Klassifikator irgendwelche Logging-Funktionen unterstützen.

    Ich habe inzwischen noch zwei neue Kerne geschrieben die man auch mal testen müßte. Aber ich denke das geht erst wenn wir das Testframework haben.

    Wie sieht's denn jetzt aus, wer hat alles Lust mitzuarbeiten?
    Ihr braucht keine speziellen Vorkenntnisse!

    MfG Jester



  • Ich kann nur kleinere Arbeiten übernehmen, wie z.B. ein wenig Testen und Samples bauen.



  • Achja, und nein: Ich werde nicht die komplette Struktur des Programmes >umwerfen, nur weil irgendjemand mal irgendwo gehört hat, daß man vielleicht >mit neuronalen Netzen möglicherweise irgendwas erkennen könnte.

    musst du doch gar nicht, würde schon reichen wenn du die "klassifikatoren" abkapselst 🙂 und man einfach verschiedene nutzen kann, so wie plugins

    bye

    tt



  • Jester schrieb:

    Gesucht sind Leute, die noch Ideen haben das ganze zu verbessern, was davon implementieren wollen oder zum Beispiel nen TabletPC haben um damit gut zu Testen oder Handschriftsamples zu bauen.

    Jester schrieb:

    Achja, und nein: Ich werde nicht die komplette Struktur des Programmes umwerfen, nur weil irgendjemand mal irgendwo gehört hat, daß man vielleicht mit neuronalen Netzen möglicherweise irgendwas erkennen könnte.

    Erst fragst du nach Ideen bzw. nach Leuten mit Ideen und dann beschwerst du dich praktisch, weil Leute ihre Ideen preisgeben?! 🙄 ...komisches Verhalten!

    Was suchst du denn jetzt wirklich? Tester und Leute, die Material zum Testen erzeugen?



  • @Gregor:

    Testen ist sicher ganz nett. Ideen implementieren oder schöne Vorschläge machen. Aber ein "das kann man doch eh alle mit neuronalen Netzen machen" ist kein ernst zu nehmender Vorschlag sondern klingt für mich eher wie eine leere Worthülse. Da wollte nur jemand demonstrieren, daß er auch Ahnung davon hat.

    Aber da dies kein komplett neues Projekt ist, sondern bereits etwas da ist sollten die Vorschläge auch dazu passen. Ein Vorschlag, der komplett an der aktuellen Technik und dem Entwurf vorbei geht ist wohl eher nicht ernst zu nehmen.

    Was wir brauchen habe ich denke ich recht konkret beschrieben. Ich werde versuchen in den nächsten Tagen noch nen kleinen Artikel zur PCA zu schreiben, damit sich auch da vielleicht jeder ein bißchen was drunter vorstellen kann.
    Im Prinzip extrahiert sie aus einer Menge von Samples(aufgefaßt als Elemente eines Vektorraums) diejenigen Richtungen, in der sich die Samples am stärksten unterscheiden. Dann wird auf diese Richtungen projiziert und die so projizierten Vektoren werden miteinander verglichen.
    Dieses letzte vergleichen der projizierten Klassifikatoren passiert im Klassifikator. Den könnte man jetzt wierum als neuronales Netz implementieren, ist meiner Meinung nach aber unnötig, da dort idealerweise gleiche Buchstaben bereits in affinen Hyperebenen zu liegen kommen. Sieht also eher nach einem Job für eine Support-Vektor-Maschine aus.
    Es wäre auch auf jeden Fall sinnvoll für den Klassifikator mal ne Basisklasse zu entwerfen. Ich glaube für fortgeschrittene Methoden ist die Schnittstelle noch etwas zu schmal.

    Und nochmal zu den neuronalen Netzen:
    Neuronale Netze nimmt man doch eigentlich nur dann, wenn einem nicht besseres einfällt. Sie sind auf kein Problem so richtig gut zugeschnitten und man kann nicht gescheit nachverfolgen warum es jetzt funktioniert... it just works(sometimes).

    Ich verbiete ja niemandem ein neuronales Netz zu bauen. Kann ja auch jeder daheim testen und mit dem restlichen Code verwurschten, der steht schließlich zum runterladen zur Verfügung. Aber ich habe nicht vor den zentralen Baustein (die PCA) durch ein neuronales Netz zu ersetzen.

    MfG Jester



  • Und nochmal zu den neuronalen Netzen:
    Neuronale Netze nimmt man doch eigentlich nur dann, wenn einem nicht besseres >einfällt.

    Nö.

    Sie sind auf kein Problem so richtig gut zugeschnitten und man kann nicht
    gescheit nachverfolgen warum es jetzt funktioniert...

    Doch kann man wenn man die Grundlagen kennt. Dann weiß man auch wo die Stärken und Schwächen liegen. Und um ein Problem wirklich gut zu lösen "muss" man das KNN auf das Problem zuschneiden. Die Theorie der NNs ist nicht, hey wir packen da einfach mal was rein und gucken was raus kommt. 🙂

    Aber im Prinzip hast du recht wenn es was anderes gibt was funktioniert braucht man kein KNN.

    Als Buchempfehlung geb ich immer wieder gerne "Christopher M. Bishop - Neural Networks for Pattern Recognition". Das Buch baut auf Grundlagen der Statistik auf und geht dann weiter wie man bessere Ergebnisse mit KNNs erzielt etc.

    Man sollte aber schon gewisse Grundlagen haben. 🙂

    bye

    tt



  • @jester:
    ich werd bis sonntag hoffentlich das "neue" speichern implementiert haben, dann geht das auch etwas platzsparender.



  • Jester: Grundsätzlich finde ich das Projekt eigentlich wie gesagt verdammt interessant; ich habe zwar momentan viel zu tun, aber nachdem ich gerne auch unter Linux damit herumspielen können würde, könnte ich einfach mal die Kernfunktionalität ein bisschen mehr vom GUI trennen und/ oder ein wxWidgets-Frontend schreiben - falls Interesse besteht...
    (Wäre auch eine gute Gelegenheit mal endlich mit wxWidgets herumzubasteln. 🙂 )

    edit: Aber sagt mir doch einfach wenn eine Version heraußen ist, die featurewise eine Zeit lang unverändert bleibt, das hätte den Vorteil dass niemand irgendwelche Arbeit doppelt machen muss... (Vor allem ich nicht. 😉 )



  • Jo, ich sag bescheid. Eigentlich wollte ich jetzt dann mal diesen Benchmark-Mode bauen... allerdings bin ich über's WE heimgefahren und hab das Netzteil für den Laptop vergessen. Noch 46%, dann ist Sense mit Programmieren. 😞
    Ich denke, die PCA wird vom Interface nur noch erweitert, da wird nicht mehr gestrichen. Ich muß mal schauen, daß ich das Interface vom Klassifikator festgeklopft kriege. Wenn Du Dich dann nur auf die Schnittstelle verläßt sollte alles wunderbar funktionieren.

    MfG Jester



  • @Jester

    Testen ist sicher ganz nett. Ideen implementieren oder schöne Vorschläge machen. Aber ein "das kann man doch eh alle mit neuronalen Netzen machen" ist kein ernst zu nehmender Vorschlag sondern klingt für mich eher wie eine leere Worthülse. Da wollte nur jemand demonstrieren, daß er auch Ahnung davon hat.

    öhm nein ganz so ist das nicht... zum Zeitpunkt meiner frage wusste ich ja noch gar nicht wie ihr das realisiert habt und mir ist da halt ein neuronales netz in den kopf gekommen (weils halt relativ einfach ist)

    Die Idee und das allgemeine Prinzip einer PCA kenn ich zwar, würd aber nicht behaupten jetzt die Mathematik dazu zu kennen (wobei das ja auch mehr oder weniger nur ein abgepinsel aus ner Formelsammelung ist, verstehen ist zwar immer von vorteil aber nicht immer nötig) das mit dem neuronalen netz ist mit deswegen sofort in den kopf gekommen weil ich das mal für ne vokallauterkennung also (a,e,i,o,u) gebastelt habe und das auch so halbwegs gefunzt hat...

    dumme Vorschläge was du anders machen sollst (ohne dein genaues Projekt überhaupt zu kennen) wollte ich bestimmt nicht geben... hast du glaub ich in den falschen Hals bekommen... 😉
    vermutlich lag dir noch mein anderer Thread bezüglich meiner Arbeitseinstellung an der Uni schwer im Magen 😃

    Gruss Windalf



  • [quote="Windalf]
    ... hast du glaub ich in den falschen Hals bekommen... 😉
    [/quote]

    Jo, kann sein.
    Nobody's perfect. 🙂



  • so, hab jetzt die komprmierung eingebaut und aktiviert. aber irgendwie frisst meine version jetzt die großen sampels nicht mehr?

    zur info: es gibt jetz ein unterprojekt "converter", mit dem man die datein aus dem alten format ins neue umwandeln kann.
    schlüssel zum ganzen sind die 2 funktionen stringToBin und binToString, die jeweils aus 8 zeichen eines machen, mit der info der 8 zeichen binär gespeichert und vice versa.
    vielleiht hab ich die sachen nur falsch eingebaut, vlt checkt das einer, der sich mit dem projekt etwas auskennt ;9 die methoden, die ihc dazugebaut habe: SaveNew und LoadNew

    www.faulerhund.net/stuff/ErkennerSourceNeu.zip

    edit: als behelfslösung könnte man ja sonst einfach die datei in ein stringstream "entpacken" und aus dem so auslesen wie aus dem istream vorher



  • Hab gestern nach angefangen den Benchmark zu implementieren, bin aber noch nicht so sehr weit gekommen. Werd mir Deinen Source wohl morgen mal anschaun.


Anmelden zum Antworten