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.
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
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.
Habe etwas passendes gefunden. Asprise OCR API scheint fast alles richtig zu erkennen wenn ich Bilder vergrösser.
Hallo!
Ist aber auch ein erheblicher Kostenfaktor, alles erst ab 4stelligen Beträgen.
Nobody is perfect. I'm sad, i'm not nobody 🙁
Warum holst du dir den Text nicht per API, statt es umständlich per OCR zu versuchen?
Weil der Text leider variabel ist und ich keine lust habe selber eine OCR zu schreiben.
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 🙁
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?
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.
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
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
@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.
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
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.
@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
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.
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
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
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
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 🙁
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.