Laden...

Erklärung eines OCR Ansatzes

Erstellt von Regenwurm vor 13 Jahren Letzter Beitrag vor 13 Jahren 2.326 Views
R
Regenwurm Themenstarter:in
295 Beiträge seit 2008
vor 13 Jahren
Erklärung eines OCR Ansatzes

Hallo zusammen,

Ich probiere gerade mir das grundlegende Konzept eines OCR Tools anzueignen.
Ich zitiere mal eine Antwort aus einem Board auf die Frage: "Wie arbeitet ein OCR genau?":

Generally there are two kinds of algorithm (there are more but those are the common one):

  1. The statistic method, used only for reconizing machine printed characters (as far as I know).
    This method take a group of templates for each char it need to recognize and create a probability template for each pixel, e.g. the pixels that appeared in most characters get the highest prob, etc.
    Now when the system get a new character it compares it with each probability template of each char and calculating a grade (+pixel_prob if the pixel appears in the new char, -pix_prob if not).
    The char with the highest grade is accepted.
  2. The neural net method. this method try to seperate groups of chars (the learnig group for each char I metioned in no.1) like seperating points in an N' dimesional space.
    When a new char is accepted the net (that was calibrated with the learning groups) decide to which group (or space - part) the new point belongs.

Kann mir vielleicht jemand die zweite Methode genauer erklären?
Die erste ist mir klar.

Gruss,
Regenwurm

ServiceStack & Angular = =)

458 Beiträge seit 2007
vor 13 Jahren

Methode zwei klingt nach einem neuronalen Netz, das dazulernt.

be the hammer, not the nail!

L
416 Beiträge seit 2008
vor 13 Jahren

Ich versteh das so das damit gemeint ist das die Buchstaben mithilfe eines Abstandsklassifikators zugeordnet werden und neu erkannte Buchstaben mit aufgenommen werden.

49.485 Beiträge seit 2005
vor 13 Jahren

Hallo Regenwurm,

siehe Texterkennung mit Neuronalen Netz.

herbivore

6.911 Beiträge seit 2009
vor 13 Jahren

Hallo,

das grundlegende Konzept eines OCR Tools anzueignen.

Schau mal CiteseerX - Searching for ocr. Dort finden sich meist gute Artikel dazu.

Soweit ich auf dem Stand der Dinge bei OCR ist werden momentan Support Vector Machines (SVM) verwenden oder die Learning Vector Quantization (LVQ) da diese bessere Klassifizierungsergebnisse liefern als die bisher verwendeten Multilayer-Perceptron-Netzwerke (MLP).

Die MLPs werden jedoch nach wie vor gerne erwähnt und verwendet da sie "das" grundlegstente neuronale Netz darstellen und am öftesten behandelt wird/wurde.
Ich finde sie aber für OCR ungeeignet.

Ein wesentlicher Punkt ist aber die Aufarbeitung des Bildes so dass dieser von der Software effizient und genau verarbeitet werden kann.

Ganz grob und kurz hab ich OCR schon mal skizziert:

Zitat von: gfoidl
Nehemen wir hierzu als Beispiel eine einfache Zeichenerkennung welche als Klassifizierung angesehen werden kann. Dazu eignet sich zB die Learning Vector Quantization (LVQ). Dies ist ein Netzwerk das ähnlich einer SOM aufgebaut ist, das Lernverfahren unterscheidet sich jedoch dahingehend dass die SOM unüberwacht ist und die LVQ ein überwachtes Verfahren. Es gibt auch mehrere Varianten der LVQ - relevant sind meiner Meinung nach nur LVQ-I und OLVQ (sowie die Batch-Varianten davon).

Zurück zum Beispiel: Das Bild des zu erkennenden Buchstaben muss zuerst aufbereitet werden indem es "normalisiert" wird. D.h. ausgerichtet, beschnitten, skaliert, etc. Danach wird die Information jedes Pixels - weiß/schwarz - am Netzwerk angelegt, d.h. jedem Eingabeneuron wird der Wert eines Pixel angelegt. Das (tranierte) Netzwerk verarbeitet diese Information und als Ausgabe bekommt man den Index des Siegerneurons. Da mit dieser Ausgabe nicht viel anzufangen ist muss das Netzwerk im Anschluss an das Training kalibriert werden. D.h. alle zu erkennenden Buchstaben werden dem Netz präsentiert und die Zuordnung Buchstabe <-> Siegerneuron gespeichert - in einer Haschtabelle. Somit kann im Einsatz über dieses Zuordnungstabelle vom Siegerneuron auf den erkannten Buchstaben geschlossen werden.

Wenn das richtig umgestezt wurde können auch Handschriften erkannt werden (sofern es halbweg schön geschrieben wird).

Noch zur Erklärung deiner Frage: Das ist so ähnlich wie in

dargestellt. (Quelle)

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"

R
Regenwurm Themenstarter:in
295 Beiträge seit 2008
vor 13 Jahren

Hoi,

Vielen Dank für die Antworten von euch 😃
Das ganze scheint viel komplexer als ich es mir wirklich vorgestellt hatte.

Die Methoden wie 'neuronales Netz' oder das Abgleichen mittels einer "Schablone", findet also erst statt, wenn ich die Buchstaben erfolgreich getrennt und aufbereitet (skaliert, gedreht, ...) habe?

Gruss

€: Interessanter Link für handgeschriebenes: Handwriting Recognition Revisited: Kernel Support Vector Machines

ServiceStack & Angular = =)

6.911 Beiträge seit 2009
vor 13 Jahren

Hallo,

Die Methoden wie 'neuronales Netz' oder das Abgleichen mittels einer "Schablone", findet also erst statt, wenn ich die Buchstaben erfolgreich getrennt und aufbereitet (skaliert, gedreht, ...) habe?

Ja - die Bildverarbeitung ist dabei der 1. wichtige Schritt.

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"

R
Regenwurm Themenstarter:in
295 Beiträge seit 2008
vor 13 Jahren

Hi nochmals.

Wie stark aufbereiten sollte man die Buchstaben?
Ist bspw. sowas hier schon leserlich? (Sorry für die kleine Auflösung)

ServiceStack & Angular = =)

6.911 Beiträge seit 2009
vor 13 Jahren

Hallo,

die Aufbereitung des Bildes ist eine eigene Wissenschaft 😉
Wenn du dich damit ernsthaft beschäftigen willst kommst du um eine umfangreiche Literaturrecherche nicht drumherum. Hinweis: Suche gezielt nach Adresserkennung bei Briefen - da wurde viel Wissen und Geld hineingesteckt.

Typischerweise werden folgende Schritte durchlaufen:1.Segementierung: in einzelne Schriftzeichen aufteilen 1.Normalisierung: zB das Bild der Schrift auf eine Referenzhöhe bringen und schräg geschriebenes gerade drehen 1.Downsampling: die Pixel des Schriftzeichen auf kleiner Größe reduzieren - dabei können aus dem schwarz/weißen Ausgangsbild im downgesampleten Bild auch Graustufen auftreten (somit ergibt sich meist ein besseres Ergebnis -> durch Fuzzyfizierung) 1.Zeichenerkennung

Angehängt ein Bild wie ich es bei meinen Versuchen gemacht habe. Das linke Teilbild zeigt den geschriebenen Buchstaben und rechts wie dieser nach der Aufbereitung aussieht.
Durch den Raster kannst du auch die Pixel erkennen bzw. um wieviel downgesamplet wurde. Jedes Pixel des downgesampleten Bildes wurde einen Eingangsneuron der LVQ angelegt. Funktioniert so recht gut denn es kennt meine Schrift und jene von meiner Freundin (und die schreibt nicht so schön wie ich 😉.

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"

R
Regenwurm Themenstarter:in
295 Beiträge seit 2008
vor 13 Jahren

Unter Downsampling muss ich wohl folgendes verstehen:

Sagen wir ich habe eine PictureBox von 100x100.
Ich verkleinere das ganze auf 50x50.
Nun sollten jeweils 4 Pixel zu einem zusammengefasst werden.
Ist dies richtig so?

Wie realisiere ich dann das ganze unter .NET (ohne dass wenn ich das Bild wieder grösser mache, die Pixel aufgeteilt werden)?.

Gruss

ServiceStack & Angular = =)

6.911 Beiträge seit 2009
vor 13 Jahren

Hallo,

bei meinem Demo wurden 10x12 Pixel auf 5x6 Pixel downgesamplet. Bevor dies aber geschieht wird die Freihandeingabe gepixelt.

Die tatsächliche Width/Height der PictureBoxen sind schon größer, aber per Koordinaten-Skalierung wurden 200x240 -> 10x12 umgerechnet.

Wie realisiere ich dann das ganze unter .NET

Das ist die gute Frage. Aber wenn du das selbst machen willst schau dir das Bild genau an und überlege dir wie das gehen könnte. So schwierig ist das nicht. Bitte beachte auch [Hinweis] Wie poste ich richtig? Punkt 4.a,b,c

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"