OCR? Texterkennung....

Anfängerfragen zum Programmieren mit PureBasic.
LifeSux
Beiträge: 32
Registriert: 27.09.2008 22:33

OCR? Texterkennung....

Beitrag 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:
Bild

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?
Benutzeravatar
WPö
Moderator
Beiträge: 669
Registriert: 27.05.2008 12:44
Wohnort: Oberland
Kontaktdaten:

Beitrag 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
Ich glaube nur der Statistik, die ich selbst gefälscht habe!
Meine Netzpräsenz: WPö.de
PB5.31 auf LMDE und Pentium T7200 2,00GHz, 4GB DDR2, ATI X1400.
LifeSux
Beiträge: 32
Registriert: 27.09.2008 22:33

Beitrag 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?...
Benutzeravatar
X360 Andy
Beiträge: 1206
Registriert: 11.05.2008 00:22
Wohnort: Bodensee
Kontaktdaten:

Beitrag 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 ...
LifeSux
Beiträge: 32
Registriert: 27.09.2008 22:33

Beitrag 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 :D
Benutzeravatar
WPö
Moderator
Beiträge: 669
Registriert: 27.05.2008 12:44
Wohnort: Oberland
Kontaktdaten:

Beitrag 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
Ich glaube nur der Statistik, die ich selbst gefälscht habe!
Meine Netzpräsenz: WPö.de
PB5.31 auf LMDE und Pentium T7200 2,00GHz, 4GB DDR2, ATI X1400.
LifeSux
Beiträge: 32
Registriert: 27.09.2008 22:33

Beitrag 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?
Benutzeravatar
WPö
Moderator
Beiträge: 669
Registriert: 27.05.2008 12:44
Wohnort: Oberland
Kontaktdaten:

Beitrag 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
Ich glaube nur der Statistik, die ich selbst gefälscht habe!
Meine Netzpräsenz: WPö.de
PB5.31 auf LMDE und Pentium T7200 2,00GHz, 4GB DDR2, ATI X1400.
LifeSux
Beiträge: 32
Registriert: 27.09.2008 22:33

Beitrag von LifeSux »

Vielen Dank schonmal.... ja vergiss den einen Satz.

Ich hab noch ne Frage... :oops:
Point geht ja von festen X/Y aus, welche ich leider nicht habe...
Benutzeravatar
KeyKon
Beiträge: 1412
Registriert: 10.09.2004 20:51
Computerausstattung: Laptop: i5 2,8 Ghz, 16GB DDR3 RAM, GeForce 555GT 2GB VRAM
PC: i7 4,3 Ghz, 32GB DDR3 RAM, GeForce 680 GTX 4GB VRAM
Win10 x64 Home/Prof
PB 5.30 (64bit)
Wohnort: Ansbach
Kontaktdaten:

Beitrag 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...
(\/) (°,,,°) (\/)
Antworten