Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Zeichen von einem Bild erkennen?


jackie05 - Sa 06.12.08 16:56
Titel: Zeichen von einem Bild erkennen?
Hallo,
gibt es eine möglichkeit z.B. Zeichen die ich in Paint gemalt habe, in Delphi herauszufinden?

z.B. Male ich in Paint ein paar Buchstaben und das Bild lade ich dann in Delphi, gibt es eine Möglichkeit über die Pixeln herauszufinden, welche Buchstaben in diesem Bild drinne stecken?

Ich danke euch schonmal für die Hilfe.

MfG


Karlson - Sa 06.12.08 16:59

Zu deutsch: Captchas erkennen?

Ja, gibt Möglichkeiten, aber meines Wissens nicht out of the Box, zumindest nicht solche die du mit Delphi sinnvoll ansprechen kannst.

Natürlich kannst du soetwas selbst schreiben, ist aber mit Sicherheit nicht einfach. Wird wohl sehr viel Mathematik dahinterstecken.


platzwart - Sa 06.12.08 17:02

Die Lösung hast du doch schon bereits gegeben ;) Natürlich geht das, du musst es bloß selbst per Hand machen. Ich verwende eine solche Methode, um Positionsmarken auf Bildern zu identifizieren.

Wenn du allerdings noch nichts in diese Richtung gemacht hast, solltest du nicht gerade mit Texterkennung beginnen. Versuch doch einfach mal, auf einem Bild mit Rechtecken, Kreisen und Geraden erstmal alle Rechtecke zu finden. Dann kannst du nach und nach an komplexere Aufgaben herangehen ;)


jackie05 - Sa 06.12.08 18:09

Danke euch.

Das problem ist, ich habe noch nie wirklich mit Pixel in Delphi gearbeitet, gibt es vieleicht Tutorials darüber?

MfG


freedy - Sa 06.12.08 18:34

Die Pixel sind wirklich das kleinste Problem. Sie lassen sich ja alle ansprechen (Canvas.Pixel[]). Die Mustererkennung halte ich für viel schwieriger. Hast du da schon irgendwelche Bibliotheken, Klassen, Methoden? Mein Kollege hat da mal eine ganze Reihe von gebraucht. Rausgeben darf ich sie verständlicher Weise nicht. Wäre ja Diebstahl aus der Firma...

Es gibt einige gute Skripte von Unis, die dort abstrakt einige Algorithmen erklären und herleiten. Vielleicht hilft das.


Delete - Sa 06.12.08 23:12

Wäre das nicht die perfekte Aufgabe für Neuronalenetze?


arj - So 07.12.08 10:07

Jein, es geht damit. Allerdings ist eine SVM [http://de.wikipedia.org/wiki/Support_Vector_Machine]
meist wesentlich besser. Allerdings auch bisschen komplizierter.

Wie sehen denn diese Bildchen aus? Kann man da relativ einfach die einzelnen Zeichen
trennen, d.h. sind beispielsweise je 2 vollständige vertikale weisse Linien zwischen den Zeichen o.ä.?

Dann kann man schon mal einzelne Zeichen auseinanderhalten.
Wenn das geht kann man ggf. mit Summierung von Pixeln schon einiges machen
(siehe PDF, ab Seite 32 [http://lmb.informatik.uni-freiburg.de/lectures/mustererkennung/Englische_Folien/05_a_ME_en.pdf])

Informationen zur Mustererkennung (auch mit neuronalen Netzwerken und SVMs) gibts
hier Vorlesungsfolien [http://lmb.informatik.uni-freiburg.de/lectures/mustererkennung/Englische_Folien/index.html]
allerdings sollte man schon mathematisch Sattelfest sein.


BenBE - Mo 08.12.08 15:29

@Luckie: OCR wäre hier der bessere Ansatz; auch wenn das früher häufig mit ANNs gemacht wurde, gibt es doch meist effizientere Möglichkeiten.