OCR Programmieren

  • Hallo, liebe Autoit-Profis.

    Ich stehe vor einem sehr schweren Problem:
    Ein speziell angepasstes Programm sieht folgendermaßen aus:
    autoit.de/wcf/attachment/5321/
    Nun muss der Fehler-Text ausgelesen werden, doch dieser lässt sich nicht markieren.
    Also wollte ich eine OCR schreiben, die aber unbedingt im Hintergrund laufen muss.
    Leider habe ich nicht mal den Hauch einer Idee, wie man das programmiert. ;(

    Die Schriftart habe ich schon herausbekommen: Tahoma

    Ich wäre über Hilfe sehr dankbar!

    Liebe Grüße
    Elodie

    Einmal editiert, zuletzt von Elodie (30. Juni 2009 um 21:04)

  • Nun in die Logdatei werden nicht alle Informationen hineingeschrieben, die ich bräuchte.
    Das Programm zeigt nämlich noch weitere Informationen an, die ich aber aus Sicherheitsgründen ausblenden musste ;)

    GtaSpider :
    Leider ist das Programm auf sehr vielen Computern innerhalb der Firma installiert, so dass es einen enormen Aufwand darstellen würde, ein neues Programm per Hand zu installieren... Auch werden mit dem Programm noch andere Programme gesteuert, also hätte diese Idee leider weniger Sinn.

  • wie wäre es mit pixel get color den rot punkten checken ,oder mit ner schleife warten bis das fenster auftaucht
    dann das ganze mit _ScreenCapture_Capture speichern ,das bid in ein
    ein arrry und dann mit string funktion arbeiten

    Einmal editiert, zuletzt von rewejo (28. Juni 2009 um 16:31)

  • wie wäre es mit pixel get color den rot punkten checken dann das ganze mit _ScreenCapture_Capture speichern ,das bid in ein
    ein arrry und dann mit string funktion arbeiten

    Hi,
    Das Bild in ein Array ist ja das eigentliche OCR. Den schritt überspringst du komplett, aber das wird nicht so einfach funktionieren. String Funktionen funktionieren ja auch nur, wenn du einen String hast ...

  • Die Idee mit den Screenshots ist schon nicht schlecht, aber statt dann ein OCR zu programmieren, würde ich lieber einmalig von allen Fehlermeldungen ein Screenshot machen, diese irgendwo speichern und wenn dann eine Fehlermeldung auftritt, wieder ein Screenshot machen und mit den vorher gespeicherten vergleichen.

    Die Idee finde ich nicht schlecht. Mal davon abgesehen, dass es sehr viele Benutzer und Server gibt. ^^
    Allerdings muss dann die Schrift ohne Hintergrund abgespeichert werden (ist ja nicht schwer), doch dann müsste bei jedem Screenshot ebenfalls der Hintergrund um die Schrift verschwinden, da die Darstellungen bei jedem PC etwas variieren (vor allem der Hintergrund, da das Programm eine Funktion zum Transparent machen des Fensters hat). Oder man vergleicht nur die Pixel an der ganz bestimmten Stelle. Doch da tritt dann das Problem auf, dass durch andere DPI Anzahl und sonstigem die Schrift leicht verschwimmt und sich auch falsche Pixel einschleichen. Folglich müsste man bei dem Vergleich mit pixelgetcolor mit shade-variationen arbeiten oder massenweise Pixelsearches in einer Schleife einbauen.

    Es gibt aber leider auch unerwartete Situationen, die ich gerne auch auslesen und weiterverarbeiten würde.

  • es würde auch anders gehen.
    bei fehler meldunggeht doch ein fenster auf . ist doch richtig dann benutz doch einfach
    ProcessExists ( "process" ) dar würdest du kein probleme mit der farbe bekommen

  • Wenn es dann wirklich nicht anders geht würde ich dann halt OCR nehmen.
    Tesseract lässt sich sehr gut ansprechen und ist auch schon relativ gut umgesetzt.

    http://www.autoitscript.com/forum/index.php?showtopic=89542&hl=tesseract

    /Edit:
    Wenn es aber wirklich kein Bild ist, was man ja leicht rausfinden kann, dann wäre GTAs Vorschlag mein erster Ansatzpunkt. Zum ausprobieren musst du ja nicht auf jedem PC Programme installieren. Aber sniffe einfach mal die Meldung mit irgendeinem Netzwerksniffer mit.

  • danke für den Link :thumbup:

    So muss ich aber dennoch ein Programm auf jedem PC installieren bzw. installieren lassen. Theoretisch brauche ich auch gar nicht so viele Funktionen, wie das tolle Programm kann. Meine OCR müsste ja "nur" den schattierten Tahoma-Text eines Bildes auslesen können, wobei aber die Farbe und die Schriftgröße keine Rolle spielen dürfen...

  • Du musst es ja nicht installieren.
    Du kannst auch einfach die EXE und die DLL mitliefern. Die AutoIt Exe musst du ja auch irgendwie auf die Rechner bekommen, da kannst du auch gleich die 2 Dateien mitliefern.
    Ein OCR Programm, dass du besserer ansprechen kannst als Tesseract wirst du so nicht finden denke ich. Das ist ein Problem, weil die Technik immer noch in den Kinderschuhen steckt, das sind riesige Projekte, so einfach wird das mit AutoIt nicht sein. Was sagst du denn zum Netzwerksniffer, wenn das funktionieren würde, hättest du 100%ige Sicherheit, dass auch das richtige ausgelesen wird.

    /Edit: Kannst du vielleicht mal einen Screenshot mit besserer Qualität hochladen, also komplett unkomprimiert? Hab mich jetzt mal in Tesseract eingelesen, dann könnte man sine eigene Schriftart erstellen und dann müsste es auch klappen.

    2 Mal editiert, zuletzt von anno2008 (28. Juni 2009 um 22:35)

  • Ich habe mit Tesseract bisschen herumexperimentiert und so, wie es jetzt schon läuft ist es so gut wie perfekt ;)
    Die einzigen Zeichen, die etwas Probleme machen sind ä ö ü und vor allem das i, das wie ein l aussieht.

    So, da ich dachte, dass ein Screenshot nicht nur von sich aus verschwommen ist sondern auch nicht alle Zeichen für die Schrift beinhaltet, habe ich mit Photoshop die originale Schrift in originaler Schriftgröße hergestellt.
    autoit.de/wcf/attachment/5313/

    Das mit dem Netzwerksniffer mache ich, wenn die OCR wirklich nicht geht. Das liegt ganz einfach daran, dass ich mit der OCR eher zurecht komme als mit Netzwerken. Sonst müsste ich mich nämlich erst mit der ganzen Thematik beschäftigen und zusätzlich noch alles neu programmieren...

    Ich danke schonmal ganz arg herzlich für die tollen Tipps und hoffe nun, dass die letzten Zeichen auch noch richtig eingebaut werden können. :)

  • Hi,
    ich hab die neue Schriftart in Tesseract eingebaut. Das ist verdammt viel arbeit aber es hat mich auch interessiert.
    Jetzt das Problem: Das Bild, dass du hochgeladen hast hat eine Erkennungsgenauigkeit von 100% jetzt, aaaaber. Probiere ich das ganze jetzt mit dem Screenshot von dir kommt nur Müll raus.
    Das liegt 1. am Schatten und am Hintergrund. Die beiden Schriftarten sind nicht 100% gleich. Wenn du mit 3-4 Screenshots alle Zeichen abdecken könntest, die in der Fehlermeldung vorkommen würde das auch schon reichen.
    Man muss ja nicht alle Zeichen haben, solange man sie nicht einlesen muss. Die Screenshots die du jetzt machst dürfen nicht komprimiert sein (benutz am besten Photoshop nid Paint oder so) und nicht skaliert sein. Dann wird es funktionieren...

    anno2008

  • Hi,
    ja, ok, ich werde morgen mal mein Glück versuchen. Ich denke die Erkennungsraten sind gar kein Problem. Das Problem sehe ich darin, dass eine Meldung auftritt, in der ein Buchstabe ist, der in den Screenshots nicht auftaucht.