Delphi-PRAXiS
Seite 1 von 2  1 2   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi >OCR - Schrifterkennung (https://www.delphipraxis.net/51030-ocr-schrifterkennung.html)

endeffects 4. Aug 2005 18:55


>OCR - Schrifterkennung
 
Hallo,

ich habe ein TImage in ein Array übertragen und
möchte versuchen die enthaltenen Buchstaben/Zahlen
in Text umzuwandeln. Ich habe mir dazu auch schon diverse
OCR Komponenten angesehen, wirklich geholfen hat mir das
allerdings nicht, da oftmals der SourceCode nicht
zugänglich war bzw. nur gegen Bares.

Beispiel:
Zitat:

____________######____
__________#########___
________############__
_______#_______######_
______#_________####__
_____#___________##___
____#_________________
____#_________________
___##_________________
__###_________________
__###________#####____
_####_____###########_
_####_____#____######_
_####____#________####
########__________#####_
########___________####_
#######____________#####
#######____________######
#######____________######
#######____________######
#######____________#####_
_######____________#####_
_######____________#####_
_######____________####__
__#######________#####___
___######________####____
___########___######_____
____#############________
__________#______________
Nunja, nun habe ich mir überlegt
das Array/Bild von Links nach Rechts oder
aber von Oben nach Unten einzulesen
und Vektoren zu ermitteln die typisch
für den jeweiligen Buchstaben sind.

Bis hierhin ist das Ganze ja noch relativ
einfach umzusetzen. Problematisch ist es
allerdings diese Vektoren so weit zu vereinfachen
das diese auch mit anderen Schriftarten/-größen
zurecht kommen. Ein anderes Problem ist momentan auch
der Einstiegspunkt an dem man die Vektoren ermittelt.
Sofern die Buchstaben "tanzen" oder leicht verzerrt sind
ist eine Erkennung problematisch.

Hat Jemand vielleicht eine Idee wie man ein Bild/Array
als Ganzes betrachten kann um zu testen welche
Buchstaben enthalten sein könnten?
Gibt es dabei eine Möglichkeit auf ein neuronales
Netz zu verzichten?

MfG

dizzy 4. Aug 2005 19:29

Re: >OCR - Schrifterkennung
 
Zitat:

Zitat von endeffects
Gibt es dabei eine Möglichkeit auf ein neuronales
Netz zu verzichten?

Ich hatte mich irgendwann mal aus Interesse zu OCR im Netz rumgetrieben, und davon habe ich noch eine Sache ganz besonders im Kopf: Keine der Lösungen kam ohne NN aus. Das ist auch gut nachvollziehbar, da Texterkennung eine reinrassige Mustererkennung ist, und exakt dafür sind NNs geschaffen.
Man könnte über Pixel-Ähnlichkeiten gehen, nur dazu müsstest du jedes Zeichen aus jedem Schriftsatz in jeder Variation in jeder Größe gegen dein Bild testen, und z.B. zählen wie viele Pixel gleich sind. Das ist jedoch nicht nur irre langsam und ineffizient, sondern mehr als Fehleranfällig, und damit schon fast als nicht praktikabel anzusehen :).

supermuckl 4. Aug 2005 20:09

Re: >OCR - Schrifterkennung
 
damals auf meinem atari ST F (1MB ram, 16Mhz)
gab es auch OCR software (für S/W Texte)
die mich immer gefragt hat, wenn sie ein zeichen nicht kannte, was es denn sei.

nach 20-30 mal nachfragen für einen großen text, ging es ziemlich flüssig und gleichzeitig ziemlich schnell für 16Mhz. da denk ich mir doch, haben die das damals ohne NN gemacht? oder wie :wiejetzt:

dizzy 4. Aug 2005 20:28

Re: >OCR - Schrifterkennung
 
Zitat:

Zitat von supermuckl
damals auf meinem atari ST F (1MB ram, 16Mhz)
gab es auch OCR software (für S/W Texte)
die mich immer gefragt hat, wenn sie ein zeichen nicht kannte, was es denn sei.

nach 20-30 mal nachfragen für einen großen text, ging es ziemlich flüssig und gleichzeitig ziemlich schnell für 16Mhz. da denk ich mir doch, haben die das damals ohne NN gemacht? oder wie :wiejetzt:

Aber ganz im Gegenteil. Genau das ist die Arbeitsweise von NNs. Sie müssen im Vorfeld trainiert werden, und man hat dieses damals denke ich sehr gering gehalten bei Auslieferung, damit die Datenmenge nicht zu groß für die damaligen Träger wurde., und/oder um die Kosten gering zu halten. Spracherkennungssoftware arbeitet z.B. nach dem selben Prinzip, und muss auch trainiert werden. Gerade das ist ja das Wesen von NNs ;)

\\Edit: Zu "ziemlich schnell": Ein trainiertes NN ist sehr schnell, da der rechnerische Aufwand je nach zu erkennenden Mustern ziemlich gering ist. Das sind DIE Vorteile von NNs: Völlig flexibel, da trainierbar und sehr schnell. Dafür nimmt man in Kauf dass ein NN auch übertrainiert werden kann, und dass Fehlerkennungen möglich sind.

negaH 5. Aug 2005 00:04

Re: >OCR - Schrifterkennung
 
Hier in der DP müsste ein Sourcecode von mir mit einem Neuronalen Netz zu finden sein.

Mit diesem Netz habe ich zwei Arten von OCR's realisiert, experimentell versteht sich. Einmal die Bildorientierten OCR's wie die meisten anderen Lösungen auch. Und dann noch die sogennannten Stroke basierten OCR's wie sie zB. auf den Palm HanldHelds im Grafitti-Bereich üblich sind. Dabei wird die Stiftführung als Relativ-Vektor gescannt.

In jedem Fall müssen für das NN die Eingangsdaten normalisiert werden, sprich grafisch kontrastiert werden, danach der relevante Bildausschitt ausgeschnitten werden, dieser auf eine Einheitsgröße scaliert und dann je nach Verfahren in Vektoren für die Inputs des NN's umgewandelt werden.

Bei der reinen Bilderkennung von Buchstaben scanne ich eine Bitmap mit 16x16 Pixel jeweils horizontal, vertical und diagonal. Bei diesem Scanning werden einfach die Anzahl der dunklen Pixel gezählt. Bei 16x16 Bitmaps ergibt dies 16+16+15+15 = 63 Inputwerte für das Netzwerk, schon ziemlich viele für die ersten Tests.
Mit einzelnen Buchstaben funktioniert beides relativ einfach. Kompliziert wird es erst wenn man OCR Texte erkennen möchte. Dort wird dann meistens mit mehreren verschiedenen Netzen gearbeitet, um Seiten, Zeilen, Wörter, Trennzeichen usw. usw. zu erkennen.

Naja auf alle Fälle hat beides ziemlich gut funktioniert.

Gruß Hagen

negaH 5. Aug 2005 00:08

Re: >OCR - Schrifterkennung
 
@Dizzy:

Zitat:

Zu "ziemlich schnell": Ein trainiertes NN ist sehr schnell, da der rechnerische Aufwand je nach zu erkennenden Mustern ziemlich gering ist. Das sind DIE Vorteile von NNs: Völlig flexibel, da trainierbar und sehr schnell. Dafür nimmt man in Kauf dass ein NN auch übertrainiert werden kann, und dass Fehlerkennungen möglich sind.
Das ist korrekt. Wenn man denn auch ein trainierbares Netzwerk zustande bekommt. Denn das schwierigste bei jedem NN ist es die Eingangsdaten und Trainingsdaten so aufzubereiten das das NN auch lernen kann. Dies ist nicht so einfach wie man denkt.

Eine Überkonditionierung eines Netzwerkes wird im Grunde ständig zu Fehlern führen. So wie ein Fetischist sich nur noch auf eine einzigste Sache konzentrieren kann so verhält es sich bei einem übertrainiertem Netzwerk. Das Ding ist dann im Grunde zu Nichts mehr zu gebrauchen. Selbst umlernen ist bei den meisten NN Typen unmöglich.

Gruß Hagen

dahead 5. Aug 2005 01:05

Re: >OCR - Schrifterkennung
 
@endeffects:

rein interesse halber: meinst du bspw. sowas?

http://www.google.de/search?hl=de&q=...le-Suche&meta=
-> http://www.19.5degs.com/element/222.php (php source)
-> http://www.codeproject.com/aspnet/as...select=1071893 (source)
-> http://www.text-image.com/convert/ascii.html

generic 5. Aug 2005 08:16

Re: >OCR - Schrifterkennung
 
dein ansatz ist schon ganz richtig.
die ocr's wandeln die bitmap in vektoren um.
dann versuchen sie ein einzelnes zeichen zu finden und mit den refernzmustern zu vergleichen.

endeffects 5. Aug 2005 09:58

Re: >OCR - Schrifterkennung
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,

ein recht gutes NN für den Einsatz als OCR,
das sich zudem auch noch selbst trainiert, gibt
es unter http://xpidea.com/Default.aspx?tabid=29
(ich hab es mal ran gehängt).

Bisher habe ich es allerdings noch nicht geschafft
Buchstaben zu erkennen die miteinander z.B. durch
eine Linie verbunden sind.

mschaefer 5. Aug 2005 10:33

Re: >OCR - Schrifterkennung
 
Moin, moin,

vor etlicher Zeit habe ich mal einen Jugend-Forscht Beitrag gesehen wo eine Schrifterkennung programmiert wurde.
Das Prinzip war erst mal eine Datenreduktion. Aus der Fläche wurden die Eckpunkte und die Kreuzungspunkte mit Winkel
ermittelt. Daran wurde dann eine Wahrscheinlichkeitsaussage für einen Buchstaben gegeben.

Grüße // Martin


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:48 Uhr.
Seite 1 von 2  1 2   

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz