OCR? Texterkennung....

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
WPö
Moderator
Beiträge: 669
Registriert: 27.05.2008 12:44
Wohnort: Oberland
Kontaktdaten:

Beitrag von WPö »

Mogggggääänn!

Ja, KeyKon hat schon recht (he, Mann, wann schläfste eigentlich?). Die Position des Textes muß bekannt sein - oder Du mußt ausprobieren.

Wenn das nicht geht, bleibt wirklich nur noch eine Kreuzkorrelation übrig. Da ist es egal, wo der Text steht - nur gekippt/gedreht/gespiegelt oder so darf er nicht sein. Er muß immer in der gleichen Größe vorliegen, aber die Position ist egal - die wird mittels der Kreuzkorrelation errechnet.

Mach dich hierzu in der Wikipedia mal schlau.
Edit 1: http://de.wikipedia.org/wiki/Korrelatio ... rarbeitung

Edit 2: Test auf ganzen Schriftzug als Bildchen. Bei >50% Übereinstimmung haben wir Erfolg:

Code: Alles auswählen

Testtext.s = "Test"
CreateImage(1, 1,1, 1)  ;Tiefe=1 für s/w - reicht ja aus
StartDrawing(ImageOutput(1))
b = TextWidth(Testtext)
h = TextHeight(Testtext)
StopDrawing()           ;ResizeImage() verändert den Bildzeiger, deshalb diesen gleich neu bestimmen
ResizeImage(1, b,h, #PB_Image_Raw)
StartDrawing(ImageOutput(1))
DrawText(0,h, Testtext, $ffffff,$000000)  ;ectl. noch die Basishöhe der Schrift anpassen!

gefunden.l = 0
For y=0 To h-1
  For x=0 To b-1
    If Point(x,y)   ;Schriftfarbe
      ;Diese folgende Zeile anpassen - weiß noch nicht, wie das Bildschirmauslesen am günstigsten gemacht wird.
      If PeekB(*Bildspeicher + y*Bildschirmbreite + x) = #weiß : gefunden + 1 : EndIf
    Else
      ;nix machen, weil Sollhintergrund = weiß
    EndIf
  Next x
Next y

StopDrawing()

If gefunden >= b*h/2
  MessageRequester("Hurra!", "Schriftzug erkannt!")
EndIf
End
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 für die schnelle Antwort und Hilfe!
Ich teste das sehr gerne nachher mal, muss aber zuerst nochmal kurz Wiki befragen ;).
Die Position ändern sich leider :>, da mein Char sich bewegt :P


//EDIT
Ich habe eine Lösung für meine bewegliche Position gefunden. Wenn man das Fenster auf eine bestimmte Breite bringt, bewegt sich zwar die Person und der Hintergrund, der ChatText bleibt aber immer an der gleichen Position (in Relation zum Fenster des Spiels).
Jetzt habe ich die Schriftgröße sehr groß eingestellt und müsste doch nur einen weißen Punkt finden, welcher bei anderen Eingaben nicht dort steht oder?...
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 solltest einfach meherere Weise Punkte suchen...
(\/) (°,,,°) (\/)
LifeSux
Beiträge: 32
Registriert: 27.09.2008 22:33

Beitrag von LifeSux »

Test.l = Point(30,30)
Debug Test.l

Bevor ich das machen kann, muss ich ja noch das StartDrawing festlegen... wie erhalte ich denn von dem kleinen Fenster (dem Spiel) nen Image? O.o
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

:lol: ja, das ist der eigentliche Knackpunkt...

witzig, dass fast zwei Tage rumdiskutiert wird, ohne dass einem das Problem auffällt.

ich wollte ganz am Anfang mal schreiben, warum du nicht versuchst auf den Chatbuffer zuzugreifen,
das wäre auch nicht viel umständlicher als auf den Screen eines fremden Games zuzugreifen.
... aber mir kam dann was dazwischen und wär eh gefrotzelt gewesen...


also, es gibt etliche topics, die sich damit befassen, und es ist immer sehr umständlich.

in deinem konkreten fall, da es sich um ein kleines Fenster handelt,
würde ich anregen einen ScreenShot von diesem einzelnen Fenster
zu machen und den zu bearbeiten.

es gibt eine API-Funktion die dir zu nem Fensterhandle nen Shot zurückliefert, wurde schon mal diskutiert,
und das Handle des Fensters kannst du dir über seinen Namen liefern lassen.

wie genau das geht weiß ich nicht, ist nicht mein Fachgebiet.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
WPö
Moderator
Beiträge: 669
Registriert: 27.05.2008 12:44
Wohnort: Oberland
Kontaktdaten:

Beitrag von WPö »

So. Habe mir gerade die WinAPI-Lib von Ray gezogen. Da stolperte ich gleich über "Screenshot erstellen". Das dürfte auch der nächste Lösungsansatz für dieses Problemchen sein. Siehe http://www.purebasic.fr/german/viewtopi ... &start=100

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.
Antworten