Handschrifterkennung
-
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?
-
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
-
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 MagenGruss 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 LoadNewwww.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.
-
Korbinian: Könntest Du vielleicht auch Binaries hochladen?
Ich habe kein Windows und kein Visual Studio um den aktuellen Stand der Dinge anzusehen...
(Aber mit Binaries könnte ich probieren ob das Ding vielleicht mit Wine läuft. )
-
hm, ich hab natüclih wieder nur ein dynamisch gelinktes teil wenn ich nicht in 6 stunden nach greece aufbrechen würd, würd ich dir eins machen
-
*g* Schon in Ordnung, viel Spaß im Urlaub!
-
Hallo mal wieder!
Ich wollt mich nur mal kurz melden. Hab leider im Moment sehr viel zu tun, da ich bald Klausur schreibe. Komme wahrscheinlich erst danach dazu richtig was am Projekt zu tun.
-
Ich spiele jetzt gerade ein bisschen herum; ich möchte die Erkennung gerne noch ein bisschen weiter vom GUI wegbekommen, ich glaube das wäre sinnvoll bevor ich es auf wxwidgets portiere.
-
Ich glaub ich baue auch gleich was ein damit eingegebene Buchstaben aus einer temporären Datei ausgelesen werden, das hätte den Vorteil dass das Testen vereinfacht wäre und die Erkennung selbst zu einem komplett von der GUI unabhängigen Standard-C++ Programm ohne plattformspezifischen Code gemacht werden könnte.
-
Uh, irgendwie hat sich das jetzt ein wenig verselbständigt was ich begonnen habe...
Nur so eine Überlegung meinerseits noch:
Ich will hier wirklich niemandem ans Bein pinkeln, aber eigentlich fand ich das alte Sample-Format gar nicht so schlecht, Klartext ist viel besser wartbar usw. und meines Erachtens wäre es schöner wenn wir die Kompression einem externem Programm/ irgendeiner Library überlassen würden.
Fändet Ihr es sehr schlimm wenn ich dahingehend was unternehmen würde? (Die Frage geht vor allem an Korbinian der das aktuelle Format implementiert hat und Jester dessen "Baby" das Projekt ja im Grunde ist.)edit: Zu später Stunde wiederhole ich mich...