| Autor |
Beitrag |
M0u53
Hält's aus hier
Beiträge: 14
|
Verfasst: Di 23.01.07 16:27
Hallo
Ich habe ein Problem mit Zahlen  Also ich würde gerne Zahlen vom AktiveDesktop einlesen.
Als Beispiel nenne ich jetzt mal die Windoof Uhr die ihr vermutlich alle in der rechten unteren ecke eures desktops seht! Nehmen wir mal an das diese Uhr keine Schnittstelle hätte mit der man den Stand Abfragen kann
Ich möchte gerne die Zahlen direkt einlesen. Allerdings habe ich keinen erfolg bei der Suche nach Mustererkennung oder begriffen wie Grab Numbers from desktop gehabt
Deshalb hoffe ich hier Hilfe zu finden
Mfg und in hoffnung auf baldige "Rettung" M0u53
|
|
Chryzler
      
Beiträge: 1097
Erhaltene Danke: 2
|
Verfasst: Di 23.01.07 16:32
Ich denk mal du meinst den Active Desktop von Windows 98. Ich kenn mich damit nicht so aus, ich weiß nicht ob man da einfach ne WM_GETTEXT Nachricht hinschicken kann. Wenn doch, dann mach das, wenn nicht, dann musst du wohl oder übel OCR nehmen, was durchaus kompliziert und langsam wird.
|
|
Udontknow
      
Beiträge: 2596
Win7
D2006 WIN32, .NET (C#)
|
Verfasst: Di 23.01.07 16:32
Hi!
Du erwartest nicht wirklich eine Funktion FindeZahlenAufBitmap, oder? Das Thema Mustererkennung ist dermaßen groß und komplex, daß es schon sehr viel Programmier-Aufwand erfordert. Delphi liefert meines Wissens nach nichts dafür mit.
Wofür brauchst du es denn jetzt genau? Zahlen vom Active-Desktop einlesen? Welche Zahlen? Warum der Aufwand?
Cu,
Udontknow
|
|
M0u53 
Hält's aus hier
Beiträge: 14
|
Verfasst: Di 23.01.07 16:35
Die systemuhr war nur ein beispiel ich meine sie in keinerlei hinsicht ^^ hab sie nur genannt, da man die zahlen nicht markieren und kopieren kann also
stell dir ein Bild vor wo an einem bestimmten Pixelwert Zahlen stehen.
es gibt keinen weg direkt die zahlen abzufragen.
Also müssen sie eingelesen werden...
Es wäre schön wenns so einfach wäre! Und bei allen sachen, die ich bezüglich Mustererkennung gefunden habe würden zuviele ressorcen verbraucht, da das programm im hintergrund laufen soll während andere programme im vordergrund laufen
Jetzt mal ein bisschen detailreicher
Also es geht nicht um eine "Suche" oder ähnliches. Die Zahlen sind in einem Festen Pixelfeld und sollen ausgelesen werden. Leider bietet mir das programm aus dem sie ausgelesen werden (silkroad für alle dies kennen) keine schnittstelle auf die ich zugreifen könnte. Deshalb muss ich diese zahlen auf diese umständliche weise "einlesen"
Zuletzt bearbeitet von M0u53 am Di 23.01.07 16:39, insgesamt 1-mal bearbeitet
|
|
Chryzler
      
Beiträge: 1097
Erhaltene Danke: 2
|
Verfasst: Di 23.01.07 16:38
M0u53 hat folgendes geschrieben: | Die systemuhr war nur ein beispiel ich meine sie in keinerlei hinsicht ^^ hab sie nur genannt, da man die zahlen nicht markieren und kopieren kann also
stell dir ein Bild vor wo an einem bestimmten Pixelwert Zahlen stehen.
es gibt keinen weg direkt die zahlen abzufragen.
Also müssen sie eingelesen werden...
Es wäre schön wenns so einfach wäre! Und bei allen sachen, die ich bezüglich Mustererkennung gefunden habe würden zuviele ressorcen verbraucht, da das programm im hintergrund laufen soll während andere programme im vordergrund laufen |
Es wäre auch schön, wenn du auf unsere Fragen eingehen würdest
Wird auf dem Desktop eine Webseite angezeigt, von der du die zahlen auslesen möchstest? Dann geht das auch einfacher, nämlich über HTTP. Du musst schon etwas mehr Info liefern.
|
|
M0u53 
Hält's aus hier
Beiträge: 14
|
Verfasst: Di 23.01.07 16:46
Sorry dein eintrag kam zu spät
hab mal beispiel angehängt
Einloggen, um Attachments anzusehen!
|
|
M0u53 
Hält's aus hier
Beiträge: 14
|
Verfasst: Di 23.01.07 16:49
M0u53 hat folgendes geschrieben: | Sorry dein eintrag kam zu spät
hab mal beispiel angehängt |
Prob beschreibung wurde oben eingefügt
|
|
Chryzler
      
Beiträge: 1097
Erhaltene Danke: 2
|
Verfasst: Di 23.01.07 16:52
Wenn die beiden Zahlen immer an exakt der gleichen Stelle stehen und du nur die beiden Zahlen auslesen möchtest, müsste das machbar sein.
|
|
M0u53 
Hält's aus hier
Beiträge: 14
|
Verfasst: Di 23.01.07 16:54
Machbar ja... nur wie... habe keine idee mehr... hatte gehofft das jemand schomal ein problem in die richtung hatte und mir tipps geben könnte
|
|
Chryzler
      
Beiträge: 1097
Erhaltene Danke: 2
|
Verfasst: Di 23.01.07 17:00
Hmm, würde das so machen: Jede einzelne Ziffer aus dem Bild nehmen und von diesem Ausschnitt einen kleinen Hash nehmen. Und dann kannst du jeden Hash mit einer internen Liste vergleichen und kriegst so die Ziffern. Das heißt du musst erstmal 10 Screenshots machen, sodass du von jeder Ziffer 0-9 einen kleinen Bildschirmausschnitt hast. Die tust du dann hashen und intern ins Programm schreiben. So würds ich machen.
|
|
Robinator
      
Beiträge: 275
WinXP
BDS 2006
|
Verfasst: Di 23.01.07 17:03
Ich will euch ja nicht enttäuschen, aber OCR ist schon nen ziehmlich komplexes Thema. Sobald jemand ne andere Schriftart, ne andere Hintergrundfarbe oder auch ne andere Auflösung benutzt, wird das ganze konzept gewaltig ins schwanken geraten.
Sinnvoller wäre es IMHO den Speicher des Programms, welches die Zahlen darstellt auszulesen.
gruss
|
|
wdbee
      
Beiträge: 628
Erhaltene Danke: 1
|
Verfasst: Di 23.01.07 17:06
Mit der folgenden Funktion lässt sich so etwas sogar dann machen, wenn die genaue Lage nur ungefähr bekannt ist.
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110:
| function ScaledConvolution (Bits: PByte; DIBWidth, DIBHeight, DX, DY, Step: Integer; MaxR: Double): Double; var I, J, N, Left, Top: Integer; L, T: Integer; Pixel: PByte; SumI, SumI2, SumIM: Double; R: Double; MinX, MinY, MaxX, MaxY: Integer; Muster: Byte; begin N := oPSize * oWidth * oHeight; R := 0; Result := R; MinX := oLeft - DX; MaxX := oLeft + DX; MinY := oTop - DY; MaxY := oTop + DY; if MinX < 0 then MinX := 0; if MinY < 0 then MinY := 0; if MaxX > DibWidth - oWidth then MaxX := DibWidth - oWidth; if MaxY > DibHeight - oHeight then MaxY := DibHeight - oHeight;
T := MinY; while T <= MaxY do begin L := MinX; while L <= MaxX do begin SumI := 0.0; SumI2 := 0.0; SumIM := 0.0;
Pixel := Bits; Inc(Pixel, oPSize*(L+ (DIBHeight-T-oHeight)*DIBWidth)); for I := 0 to oHeight - 1 do begin for J := 0 to oPSize*oWidth - 1 do begin Muster := oBitBuffer[oPSize*I*oWidth+J]; if Muster > 0 then begin SumI := SumI + Pixel^; SumI2 := SumI2 + Pixel^ * Pixel^; SumIM := SumIM + Pixel^ * Muster; end; Inc(Pixel); end; R := (SumIM - (SumI * oSumM) / N); Inc(Pixel,oPSize*(DIBWidth-oWidth)); end;
try R := R*R /((SumI2 - SumI * SumI / N) * oSumMFaktor); except R := 0.0; end;
if R > Result then begin Result := R; oBestMatchLeft := L; oBestMatchTop := T; end; Inc(L,Step); end; Inc(T,Step); if Result > MaxR then break; end; end; |
|
|
Chryzler
      
Beiträge: 1097
Erhaltene Danke: 2
|
Verfasst: Di 23.01.07 17:07
Robinator hat folgendes geschrieben: | Ich will euch ja nicht enttäuschen, aber OCR ist schon nen ziehmlich komplexes Thema. Sobald jemand ne andere Schriftart, ne andere Hintergrundfarbe oder auch ne andere Auflösung benutzt, wird das ganze konzept gewaltig ins schwanken geraten.
Sinnvoller wäre es IMHO den Speicher des Programms, welches die Zahlen darstellt auszulesen.
gruss |
Du hast schon Recht. Ich hoffe mal, dass das Prog nur für ihn ist, d.h. Auflösung und so bleibt alles gleich.
|
|
Jetstream
      
Beiträge: 222
|
Verfasst: Di 23.01.07 17:11
Silkroad hat die Zahlen doch im Speicher, wie jedes andere Spiel.
Wenn du beim Programmstart nach den Adressen im Speicher suchst, solltest du fündig werden. Es gibt ne Menge Topics dazu bei Elitepvpers
_________________ Die folgenden Klangbeispiele sind Ergänzungen zum methodischen Aufbau der Textbeilage und dürfen nicht losgelöst von dieser behandelt werden.
|
|
M0u53 
Hält's aus hier
Beiträge: 14
|
Verfasst: Di 23.01.07 17:16
Das Programm ist erstmal nur für mich gedacht bis ich alle funktionen einwandfrei am laufen haben sollte...
Mal zu dem Quellcode oben Wenn ichs richtig verstanden habe sucht er nur in dem Bild nach einem ihm bekannten Bild (auch wenn ich ihn an sich nahezu garnicht verstanden habe  ) Wie hilft mir der eine Mehrstellige zahl auszulesen, welche auch noch dauernd ihren wert ändert
|
|
Robinator
      
Beiträge: 275
WinXP
BDS 2006
|
Verfasst: Di 23.01.07 17:16
Mein Reden 
|
|
Robinator
      
Beiträge: 275
WinXP
BDS 2006
|
Verfasst: Di 23.01.07 17:18
M0u53 hat folgendes geschrieben: | Das Programm ist erstmal nur für mich gedacht bis ich alle funktionen einwandfrei am laufen haben sollte...
Mal zu dem Quellcode oben Wenn ichs richtig verstanden habe sucht er nur in dem Bild nach einem ihm bekannten Bild (auch wenn ich ihn an sich nahezu garnicht verstanden habe ) Wie hilft mir der eine Mehrstellige zahl auszulesen, welche auch noch dauernd ihren wert ändert |
Der code vergleicht zwei Bilder unterschiedlicher Grösse. Du könntest also (auch wenn ich dir davon, wie schon vorher gesagt, stark abrate) Referenzbilder für alle Zahlen [0..9] erstellen, und diese mit den dargestellten vergleichen.
Guck dir lieber mal an wie du das ausm Speicher ausliest!
Gruss, Rob
|
|
wdbee
      
Beiträge: 628
Erhaltene Danke: 1
|
Verfasst: Di 23.01.07 17:20
Ist doch klar: Ein Muster für jedes vorkommende Zeichen (macht 10 Stück bei Zahlen)
Die Position ist die ja bekannt, also vergleichst du jede möglich Position mit jedem Muster. Das Muster, dass die höchste Übereinstimmung liefert nimmst du für die jeweilige Stelle.
Alle Stellen zusammen liefern die Info über die Zahl.
|
|
Chryzler
      
Beiträge: 1097
Erhaltene Danke: 2
|
Verfasst: Di 23.01.07 18:13
M0u53, welche Anwendung ist das jetzt genau, wo der Text angezeigt wird? Vielleicht lassen sich die beiden Zahlen wirklich einfach so aus dem Speicher auslesen, wenn du Glück hast. Mit TSEARCH die Adressen der beiden Zahlen suchen, und dann im Programm auslesen.
|
|
hathor
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Di 23.01.07 22:40
OCR with Microsoft® Office
www.codeproject.com/csharp/modi.asp
Unter <Search> kannst Du mal "ocr" eingeben...
|
|