Laden...

Gute OCR für Text auf Grafiken

Erstellt von Ayke vor 14 Jahren Letzter Beitrag vor 14 Jahren 3.126 Views
Ayke Themenstarter:in
643 Beiträge seit 2006
vor 14 Jahren
Gute OCR für Text auf Grafiken

Hallo Leute,

ich suche nach einer guten OCR Bibliothek. Ich habe bereits paar OCR Bibliotheken wie tesseract ausprobiert, leider mit keinen guten ergebniss.
Ich möchte gerne Text von Buttons eines Programms lesen. Diese konnte bis jetzt keine OCR erkennen obwohl die sehr leicht lesbar sind. Nichtmal normalen Text den ich hier geschrieben habe...

Kennt jemand eine gute OCR die mir weiterhelfen könnte.

L
770 Beiträge seit 2006
vor 14 Jahren

Wenn du Office installiert hast, dann könntest du eventuell das OCR von Office verwenden (Microsoft Office Document Imaging).

Das erkannte zumindest mal dein geschriebenen Text hier, auf Codeproject gibt es dazu etwas zu finden.

Lion

lg Lion

Ayke Themenstarter:in
643 Beiträge seit 2006
vor 14 Jahren

Habe ich schon ausprobiert ist zwar nicht schlecht reicht aber auch nicht aus. Ich habe dort im jeden 2 Satz einen Fehler. Die Buttons erkennt er gar nicht.

Ayke Themenstarter:in
643 Beiträge seit 2006
vor 14 Jahren

Habe etwas passendes gefunden. Asprise OCR API scheint fast alles richtig zu erkennen wenn ich Bilder vergrösser.

1.815 Beiträge seit 2005
vor 14 Jahren

Hallo!

Ist aber auch ein erheblicher Kostenfaktor, alles erst ab 4stelligen Beträgen.

Nobody is perfect. I'm sad, i'm not nobody 🙁

Ayke Themenstarter:in
643 Beiträge seit 2006
vor 14 Jahren

ohaa, die Preise habe ich noch gar nicht gesehen.

F
10.010 Beiträge seit 2004
vor 14 Jahren

Warum holst du dir den Text nicht per API, statt es umständlich per OCR zu versuchen?

Ayke Themenstarter:in
643 Beiträge seit 2006
vor 14 Jahren

Weil der Text leider variabel ist und ich keine lust habe selber eine OCR zu schreiben.

1.815 Beiträge seit 2005
vor 14 Jahren

Hallo!

Zumal eine OCR-Eigenentwicklung ein gewaltiges Projekt ist. Ich hab' alleine eine Woche gebraucht, nur um einen halbwegs brauchbaren Algorithmus für das blobbing zu schreiben. Bei der eigentlichen OCR bin ich dann hängen geblieben und hab' mich hinterher nur noch auf Barcodeerkennung beschränkt.

Nobody is perfect. I'm sad, i'm not nobody 🙁

656 Beiträge seit 2008
vor 14 Jahren

Weil der Text leider variabel ist und ich keine lust habe selber eine OCR zu schreiben.

FZelle meinte, dass du direkt per WinAPI (z.b. SendMessage mit WM_GETTEXT) den Button nach seinem Text befragen sollst; und nicht erst einen Screenshot machen, den du nachher per OCR zerpflückst.
Oder hast du an der Stelle keinen Zugriff auf die Applikation?

Ayke Themenstarter:in
643 Beiträge seit 2006
vor 14 Jahren

Ja ich habe kein Zugriff. Das Programm besteht nur aus custom Classen und diese reagieren auf sowas nicht.

Wenn ich eine Injection mache und Function im den Zielprogramm Hooke dan hab ich die möglichkeit an die Infomationen zu kommen. Dies habe ich auch in der Vergangenheit gemacht.

Jetzt möchte ich aber meine vorgehensweise ändern weil ich das Zielprogramm nicht so stark manipulieren möchte.

309 Beiträge seit 2007
vor 14 Jahren

Mach es wie ich ...

--- ich arbeite gerade an einer Klasse, die aus einem Screenshot die Bilder in Text (zurück)übersetzt.
Insbesondere, da ich nicht (nur) den Text von Controls lese, sondern auch aus Flash-Bildern und ähnlichen Graphiken, die eben nicht per Abfangen der Texte gelesen werden können.

Ich mache aber kein OCR (zu komplex für meine Aufgabe), sondern da ich weis, wo der Text steht, lernt mein Programm jeden Buchstaben anhand der Bitmap.
Die Schwierigkeit liegt darin, das das durch das Antialiasing die Buchstaben nicht alle genau gleiche Bitmuster haben.

1.) Graphikbereich mit dem Text in ein s/w-Bitmuster umwandeln (Dabei wird der Hintergrund ausgefiltert und die Pixel, die zur Schrift gehören hervorgehoben)

2.) Übersetzungsversuch mit bekannten Bitmustern

3.) Neuanlegen von unbekannten Buchstaben-Bitmuster

4.) Einpflegen von bisher unbekannten Bitmustern, d.H. dem Bitmuster einen Buchtaben/Literal zuordnen
(Später ggf. mit Lernfunktion, um die ähnlichsten Bitmuster zu finden und damit den wahrscheinlichsten Buchstaben)

Das kann man nun Allgemein machen (Wird eben eine große Datenbank) oder, wie ich für jede Aufgabe separat, nur mit den Schriften, die ich jeweils brauche.

mfg Hajoseb

P.S. Ich weis, alles was kein echtes OCR ist, ist wahrscheinlich unter eurer Würde g 😁
Aber mir gefällt es so ...

**"Zufall ist das Pseudonym Gottes, wenn er nicht selbst unterschreiben will.” **
Anatole France

49.485 Beiträge seit 2005
vor 14 Jahren

Hallo Hajoseb,

Ich weis, alles was kein echtes OCR ist, ist wahrscheinlich unter eurer Würde

Andersherum: alles was die Zeichen tatsächlich erkennt ist (echtes) OCR. Egal, welche Technik dafür eingesetzt wird.

herbivore

F
10.010 Beiträge seit 2004
vor 14 Jahren

@Ayke:
Was haben Custom Klassen mit deinen aussagen zu tun?
Ein Button ist ein Button, den kann man mit ganz normalen API aufrufen abfragen,
ohne irgendwelche injections.

49.485 Beiträge seit 2005
vor 14 Jahren

Hallo FZelle,

naja, es gibt schon Anwendungen, bei denen das Vorgehen nicht funktioniert, z.B. bei DirectX-Anwendungen oder auch wenn eine Windows-Form-Anwendung die Darstellung selber zeichnet.

herbivore

Ayke Themenstarter:in
643 Beiträge seit 2006
vor 14 Jahren

Wie herbivore schon sagt zeichnet das Programm die Darstellung selber.

@Hajoseb
Hinter deiner Idee steckt ja auch eine menge Arbeit. Ich benutze für bestimmte Schaltflächen auch keine OCR mehr weil es kein 100%'es Ergebniss bringt. Vergleiche bei jeden Buchstaben die anzahl der Farbe Schwarz.

309 Beiträge seit 2007
vor 14 Jahren

@Hajoseb
Hinter deiner Idee steckt ja auch eine menge Arbeit. Ich benutze für bestimmte Schaltflächen auch keine OCR mehr weil es kein 100%'es Ergebniss bringt. Vergleiche bei jeden Buchstaben die anzahl der Farbe Schwarz.

👍 Bin noch in der Testphase (Das Drumherum zum testen fehlt noch 😄)

Ein Grundproblem ist sicher die Unterscheidung zwischen i, I und l. So war es in der ersten Versuches-Version. Habe das Konzept jetzt erst mal umgearbeitet.

Aber ich werde mal sehen. Kann ja dann mal berichten ....

mfg Hajoseb

P.S. Nicht jede Schrift ist Schwarz auf Weiß :evil: => Filter mit delegate

P.S.S Da ich nicht für jede Schrift eine eigene Klasse ableite, wird "delegate" sicher der richtige Weg für den Filter sein und kein Interface, oder ??? Hab noch nicht alle C#-Möglichkeiten ausprobiert ...

**"Zufall ist das Pseudonym Gottes, wenn er nicht selbst unterschreiben will.” **
Anatole France

Ayke Themenstarter:in
643 Beiträge seit 2006
vor 14 Jahren

Ja bei mir ist die Schrift auf verschieden farbigen Hintergrund aber die Schrift ist immer schwarz.

Mich würde auf jeden fall dein Projekt intressieren wenn du fertig bist kanst du es mal posten. Zu deiner Architektur kann ich allerding nicht viel sagen.

309 Beiträge seit 2007
vor 14 Jahren

Kann aber noch etwas dauern.

Ich programmiere im Moment nicht auf "schnelles Ergebnis" sondern auf "C# Möglichkeiten kennen lernen und die Passenden anwenden"

mfg Hajoseb

**"Zufall ist das Pseudonym Gottes, wenn er nicht selbst unterschreiben will.” **
Anatole France

49.485 Beiträge seit 2005
vor 14 Jahren

Hallo Ayke,

wenn du einen Vorverarbeitungsschritt alles was (fast) schwarz ist schwarz (und anthrazit) machst und alles andere weiß, kann es sein, dass die Erkennungsleistung der nachfolgenden Standard-OCR so stark gesteigert wird, dass die Erkennungsraten gut genug sind.

herbivore

309 Beiträge seit 2007
vor 14 Jahren

wenn du einen Vorverarbeitungsschritt alles was (fast) schwarz ist schwarz (und anthrazit) machst und alles andere weiß, kann es sein, dass die Erkennungsleistung der nachfolgenden Standard-OCR so stark gesteigert wird, dass die Erkennungsraten gut genug sind.

Das ist bei mir der Schritt, bei dem ich die Bitmap erst in ein s/w-Bitmuster umwandle ... Könnte man natürlich für eine "normale" OCR auch in der Graphik machen ...

**"Zufall ist das Pseudonym Gottes, wenn er nicht selbst unterschreiben will.” **
Anatole France

1.815 Beiträge seit 2005
vor 14 Jahren

Hallo!

Für OCR/OMR sollte man das Rohmaterial besser immer erstmal in s/w-Material umwandeln, wobei das Problem besteht, dass bei der Umwandlung zuviel verloren geht, wenn man einen falschen Schwellenwert verwendet. Aber bei der späteren Verarbeitung hat man es dann auf jeden Fall einfacher. Eine weitere Rolle für die Erkennung kann der Schwarzanteil eines Buchstabens spielen, ebenso wie die Größe im Vergleich zu den anderen Buchstaben.

Nobody is perfect. I'm sad, i'm not nobody 🙁

Ayke Themenstarter:in
643 Beiträge seit 2006
vor 14 Jahren

wenn du einen Vorverarbeitungsschritt alles was (fast) schwarz ist schwarz (und anthrazit) machst und alles andere weiß, kann es sein, dass die Erkennungsleistung der nachfolgenden Standard-OCR so stark gesteigert wird, dass die Erkennungsraten gut genug sind.

Werde ich mal testen, danke für den Tip.