Seite 1 von 2
OCR? Texterkennung....
Verfasst: 15.05.2009 23:51
von LifeSux
Hallo! Ich bins mal wieder... hab natürlich auch gleich ne neue Kleinigkeit mitgebracht... und zwar will ich gerne via OCR auslesen, wie der Chat meines Chars ist und dann darauf reagieren. Die Schriftart etc. bleibt immer gleich. Die Größe kann ich selbst bestimmen. Leider habe ich absolut keine Ahnung wie ich das machen soll... hier im Board sind zwar ein par Vorschläge, die beziehen sich aber häufig auf bereits bestehende Bilder und komplexes endrehen etc....
Hier man ein Beispiel:
Das Programm sollte also alle 0.1 bis 0.3 sek den Screen prüfen, ob dort 'Test' steht... die einzelnen Buchstaben sind immer zu 100% gleich, lediglich der Hintergrund kann sich ändern. Kann mir jemand starthilfe geben?
Verfasst: 16.05.2009 16:14
von WPö
Hallo!
Wenn ich das richtig interpretiere, was Du willst, dann probiere 'mal das:
Anstelle einer richtigen OCR, die richtig heftig Rechenzeit kosten kann, schlage ich vor, Du vergleichst das aktuelle Bild mit einem zwischengespeicherten, das "Test" enthält. Wenn sie gleich sind, hast Du Deine Info.
Sollte die Position etwas schwanken, kannst Du auch eine Kreuzkorrelation versuchen (ebenfalls irre rechenzeitintensiv) oder eine Verknüpfung der Bilder mit XOR. Anschließend das Ergebnis gewichten und entscheiden, ob der Schriftzug vorhanden ist.
Gruß - WPo
Verfasst: 16.05.2009 17:00
von LifeSux
Wie gesagt, das Problem ist, dass sich der Hintergrund ändern kann. Der Text bleibt zu 100% gleich.... :>
Könne ich das nicht über OpenProcess starten und dann auf den RAM zugreifen und die Stelle loggen? (Chat halt)....
/Wobei das vmtl. noch komplizierter ist oder?...
Verfasst: 16.05.2009 17:24
von X360 Andy
Wenn die Größe immer gleich bleibt könnte man das doch über Plot machen ?
Jeden Pixel überprüfen ob er weiß ist ,wenn ja speichern , und wenn das dann dem "Test" Muster enspricht ...
Verfasst: 16.05.2009 21:21
von LifeSux
Also die Fenstergröße und auch die Schriftgröße sind immer gleich. Ich kann auch die Schriftart ändern / vergrößern / verkleiner.... mir fehlt aber irgendwie nen guter 'Startpunkt', wie bei meinem Batch Problem vor einiger Zeit

Verfasst: 16.05.2009 21:48
von WPö
Also gut, nochmal. Alles, was mir auf Anhieb einfällt, ist, daß man eine Maske, bestehend aus dem Schriftzug, über den Bildschirm(ausschnitt) hält. Dies kann man mit einem UND oder einem XODER machen.
Dann kann man die wesentlichen ca. 50 Punkte (z.B. Quadrate mit jeweils 10x10 Pixeln), die zusammen Dein TEST nachbilden, abfragen und dabei sehen, ob sie alle ein Weiß oder was auch immer als Schriftfarbe ergeben. Diese Methode sollte schnell genug sein, um die angestrebten 100ms Zykluszeit einzuhalten.
Vorteile: schnell umzusetzen, vermutlich hohe Ausführungsgeschwindigkeit.
Nachteil: recht aufwendig auf anderen Text zu ändern.
Wenn Du Dich für eine echte OCR entscheidest, wirst Du von Glück reden können, 1s Wiederholrate zu erreichen - vom galaktischen Programmieraufwand ganz zu schweigen.
So, entscheide Dich für eine Methode.
Grüße - WPo
Verfasst: 16.05.2009 22:12
von LifeSux
Deine Methode gefällt mir schon ganz gut... allerdings hab ich halt das Problem mit wechselnden Hintergründen... :>
Und er würde dann ja nur bei 100% 1 setzen oder?
Verfasst: 16.05.2009 22:49
von WPö
LifeSux hat geschrieben:Und er würde dann ja nur bei 100% 1 setzen oder?
Hä? Was meinst Du damit? Wenn Du einen Text vor beliebigem Hintergrund hast und der Zeichenmodus ist nicht gerade XODER oder Du verwendest den Alpha-Kanal (was unwahrscheinlich ist), besteht Dein Testtext nur aus einer Farbe. Ein paar Punkte pro Buchstaben zu prüfen reicht doch aus, um andere als den erwarteten Buchstaben auszuschließen.
Sobald von den z.B. 50 Punkten nur einer nicht vollständig in Zeichenfarbe vorliegt, wurde Dein TEST nicht erkannt. Und wenn Du ausschließen kannst, daß irgendwann ein einziges Pixel des sich ändernden Hintergrundes Schriftfarbe annimmt, Du aber auch nur ein Pixel in dieser Farbe bemerkst, weißt Du, daß ein anderer, unbekannter Text auftauchte.
Als Lesebefehl nutzt Du Point(), am besten aber nicht direkt auf dem Bildschirm, sondern zwischengespeichert. Damit eliminierst Du falschpositive wie falschnegative Erkennungen wegen Bildänderung während der Abfragen.
Hoffe, Dir geholfen zu haben.
So, mir reicht's für heute - gute Nacht!
Grüße - WPo
Verfasst: 16.05.2009 22:55
von LifeSux
Vielen Dank schonmal.... ja vergiss den einen Satz.
Ich hab noch ne Frage...
Point geht ja von festen X/Y aus, welche ich leider nicht habe...
Verfasst: 17.05.2009 01:04
von KeyKon
Du musst logischerweise die positionen durchprobieren

Wenn der Text natürlich auch noch immer an der gleichen stelle steht sollte es wirklich ziemlich einfach sein...