Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Gute OCR für Text auf Grafiken
Ayke
myCSharp.de - Member

Avatar #avatar-2293.gif


Dabei seit:
Beiträge: 643
Herkunft: Hamburg

Themenstarter:

Gute OCR für Text auf Grafiken

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers
Lion1984
myCSharp.de - Member



Dabei seit:
Beiträge: 770
Herkunft: Österreich

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
Ayke
myCSharp.de - Member

Avatar #avatar-2293.gif


Dabei seit:
Beiträge: 643
Herkunft: Hamburg

Themenstarter:

beantworten | zitieren | melden

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.
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Ayke am .
private Nachricht | Beiträge des Benutzers
Ayke
myCSharp.de - Member

Avatar #avatar-2293.gif


Dabei seit:
Beiträge: 643
Herkunft: Hamburg

Themenstarter:

beantworten | zitieren | melden

Habe etwas passendes gefunden. Asprise OCR API scheint fast alles richtig zu erkennen wenn ich Bilder vergrösser.
private Nachricht | Beiträge des Benutzers
tom-essen
myCSharp.de - Experte

Avatar #avatar-2140.png


Dabei seit:
Beiträge: 1.815
Herkunft: NRW

beantworten | zitieren | melden

Hallo!

Ist aber auch ein erheblicher Kostenfaktor, alles erst ab 4stelligen Beträgen.
Nobody is perfect. I'm sad, i'm not nobody
private Nachricht | Beiträge des Benutzers
Ayke
myCSharp.de - Member

Avatar #avatar-2293.gif


Dabei seit:
Beiträge: 643
Herkunft: Hamburg

Themenstarter:

beantworten | zitieren | melden

ohaa, die Preise habe ich noch gar nicht gesehen.
private Nachricht | Beiträge des Benutzers
FZelle
myCSharp.de - Experte



Dabei seit:
Beiträge: 9.996

beantworten | zitieren | melden

Warum holst du dir den Text nicht per API, statt es umständlich per OCR zu versuchen?
private Nachricht | Beiträge des Benutzers
Ayke
myCSharp.de - Member

Avatar #avatar-2293.gif


Dabei seit:
Beiträge: 643
Herkunft: Hamburg

Themenstarter:

beantworten | zitieren | melden

Weil der Text leider variabel ist und ich keine lust habe selber eine OCR zu schreiben.
private Nachricht | Beiträge des Benutzers
tom-essen
myCSharp.de - Experte

Avatar #avatar-2140.png


Dabei seit:
Beiträge: 1.815
Herkunft: NRW

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
BhaaL
myCSharp.de - Member

Avatar #erP6yAFiewXrJTqrvg6R.jpg


Dabei seit:
Beiträge: 655

beantworten | zitieren | melden

Zitat von Ayke
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?
private Nachricht | Beiträge des Benutzers
Ayke
myCSharp.de - Member

Avatar #avatar-2293.gif


Dabei seit:
Beiträge: 643
Herkunft: Hamburg

Themenstarter:

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers
Hajoseb
myCSharp.de - Member

Avatar #avatar-2670.jpg


Dabei seit:
Beiträge: 309

beantworten | zitieren | melden

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 ...
Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von Hajoseb am .
"Zufall ist das Pseudonym Gottes, wenn er nicht selbst unterschreiben will.”
Anatole France
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 49.486
Herkunft: Berlin

beantworten | zitieren | melden

Hallo Hajoseb,
Zitat
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
private Nachricht | Beiträge des Benutzers
FZelle
myCSharp.de - Experte



Dabei seit:
Beiträge: 9.996

beantworten | zitieren | melden

@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.
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 49.486
Herkunft: Berlin

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
Ayke
myCSharp.de - Member

Avatar #avatar-2293.gif


Dabei seit:
Beiträge: 643
Herkunft: Hamburg

Themenstarter:

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers
Hajoseb
myCSharp.de - Member

Avatar #avatar-2670.jpg


Dabei seit:
Beiträge: 309

beantworten | zitieren | melden

Zitat von Ayke
@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 :D)

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 ...
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Hajoseb am .
"Zufall ist das Pseudonym Gottes, wenn er nicht selbst unterschreiben will.”
Anatole France
private Nachricht | Beiträge des Benutzers
Ayke
myCSharp.de - Member

Avatar #avatar-2293.gif


Dabei seit:
Beiträge: 643
Herkunft: Hamburg

Themenstarter:

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers
Hajoseb
myCSharp.de - Member

Avatar #avatar-2670.jpg


Dabei seit:
Beiträge: 309

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 49.486
Herkunft: Berlin

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
Hajoseb
myCSharp.de - Member

Avatar #avatar-2670.jpg


Dabei seit:
Beiträge: 309

beantworten | zitieren | melden

Zitat von herbivore
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
private Nachricht | Beiträge des Benutzers
tom-essen
myCSharp.de - Experte

Avatar #avatar-2140.png


Dabei seit:
Beiträge: 1.815
Herkunft: NRW

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
Ayke
myCSharp.de - Member

Avatar #avatar-2293.gif


Dabei seit:
Beiträge: 643
Herkunft: Hamburg

Themenstarter:

beantworten | zitieren | melden

Zitat von herbivore
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.
private Nachricht | Beiträge des Benutzers