Jump to content

OCR Texterkennung eines Screenshot-Ausschnitts


Recommended Posts

Hallo erstmal,

(vorab: OCR = http://de.wikipedia.org/wiki/Texterkennung)

Ohne lange Umschweife:

Ich möchte ein kleines Programm schreiben, dass automatisch Roulette-Zahlen aus einem Online-Roulette-Spiel einliest. Ich bin angehender Softwareentwickler und Ingenieur, also nicht ganz ahnungslos. Ich beherrsche C# und VB.NET.

Ich suche eine OCR .NET Componente, die diese Aufgabe für mich erledigt, habe aber noch keine Komponente gefunden, die dies schafft.

Ein Beispiel, welches das Modul erkennen muss, ist im Dateianhang!

Ich habe folgende Componenten bereits getestet, leider erfolglos:

http://asprise.com/product/ocr/index.php?lang=csharp

http://www.ocrtools.com/

Ich habe dieses Programm getestet, leider erfolglos:

http://www.brothersoft.com/gocr-windows-frontend-38579.html

Ich habe die Online Scanner getestet, leider erfolglos:

http://www.free-ocr.com/

http://www.newocr.com/

Ich bin für alles offen: Componenten, Programme, Online-Scanner. Hauptsache es funktioniert. Oder hat jemand noch eine ganz andere Idee?? Das wäre echt klasse!

mfg,

Zocker85

post-27450-1287404463_thumb.png

Link zu diesem Kommentar
Auf anderen Seiten teilen

Generell echt keine schlechte Idee, sowas hatte ich mir auch schon gedacht.

Nur müsste ich dann jedes Mal, wenn ich ein Online-Casino testen will,

- die 37 Screenshot-Ausschnitte erzeugen lassen (theoretisch kein Problem), und

- die 37 Ausschnitte den Zahlen zuordnen.

nicht gerade wenig Arbeit.

Ausserdem müsste die Bildaufnahme sehr genau arbeiten, um zwei exakt gleiche Bilder zu erhalten, um sie z.B. nach Dateigröße vergleichen zu können.

Oder gibt es eine andere, einfachere Möglichkeit, Bilder zu vergleichen?

Ich dachte mir mit einem Texterkennungs-Modul könnte ich alle Fliegen mit einer Klappe schlagen.

mfg

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dateigröße wird nicht viel nützen. Der Inhalt muss vergleicht(Anm. geile Stilblüte) verglichen werden. Du nimmst dir den Bildausschnitt wo die Zahl im Spielfenster erscheint. Lässt den Ausschnitt als temp.bmp speichern. Dann 'ne Schleife, die die temp.bmp mit den vorhandenen 0.bmp-36.bmp vergleicht. Wenn keine Übereinstimmung, Dialog zum speichern der temp.bmp als Zahl.bmp, nochmal Scan laufen lassen, Erkennung, pling Zahl erkannt.

Klar muss man das bei jedem OC neu ausrichten. Ist aber nicht die Arbeit, musst ja nur x, y und breite, grösse des Auschnitts anpassen. Die 37 Bilder lassen sich nebenbei einmal speichern, und sind dann ja vorhanden.

Was man noch machen könnte, du scannst die Farbwerte der Pixel, einmal waagerecht lang. Diesen String speicherst als Text. Und lässt dann die Strings abgleichen.

Wie man das mit C# realisiert, ich habe keine Ahnung. Ich programmier mein Zeugs mit Click.exe. Auch wenn einige die Nase rümpfen wie man nur so "billig Baukasten-Zeugs"* nutzen kann, mit 50 Zeilen ist sowas erledigt und lööft. :reindeer:

EDIT: Schreipfeler sind gratiz, Rechtschreib- & Grahmatikschwähche ebensoh. Ich brauch' Kaffee!

*Muss das noch nachträglich in Klammern setzen. Hat mich schliesslich knappe 200€ gekostet. Also doch nicht so billig *g.

bearbeitet von Faustan
Link zu diesem Kommentar
Auf anderen Seiten teilen

Prinzipiell stimme ich dir vollkommen zu!

Aber ich habe immer noch nicht geschnallt, WIE ich den Bildinhalt vergleichen soll.

Sorry.

Was man noch machen könnte, du scannst die Farbwerte der Pixel, einmal waagerecht lang. Diesen String speicherst als Text. Und lässt dann die Strings abgleichen.

Was ist, wenn ich das OC-Fenster z.B. am nächsten Tag nicht wieder Pixelgenau an die selbe Stelle positioniere wie heute?

Dann passen die Strings wieder nicht und ich muss alles wieder von vorne machen? :reindeer:

Link zu diesem Kommentar
Auf anderen Seiten teilen

Wie man den Bildinhalt vergleicht, wenn des mit C# programmierst frag' halt mal google. Alternativ kannst du die Bilddateien ja auch als Hex auswerten, die stimmen dann ja auch 100% überein.

Um die pixelgenaue Erfassung sicherzustellen solltest du mitreinbauen dass das Fenster des Casinos immer an die gleiche Position mit der gleichen Größe gesetzt wird. Wenn's 'ne eigene Casinosoftware ist hat sie ja ihre Grösse, musst dann nur dafür sorgen das es auf dem Bildschirm ausgerichtet wird.

Zu programmierspezifischen Sachen kann ich wie gesagt nix weiter sagen, ich kann nur grob 'nen Lösungsweg vorgeben. Alles andere weiss google :reindeer:

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich werds ausprobieren und berichten!

Würd mich trotzdem noch auf Lösungsmöglichkeiten mit OCR-Software freuen,

vielleicht weiß ja jemand doch noch was.

Ich hab grad eben noch den Online Konverter http://www.onlineocr.net/ getestet.

Das ist der beste bis jetzt. er erkennt immerhin mehr als die Hälfe aller Zahlen, wenn ich den Screenshot-Ausschnitt, den ich hochlade, vorher noch um 500% vergrößere.

Vielleicht gibts ja noch was Besseres ...

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo erstmal,

................

Ohne lange Umschweife:

Ich möchte ein kleines Programm schreiben, dass automatisch Roulette-Zahlen aus einem Online-Roulette-Spiel einliest. Ich bin angehender Softwareentwickler und Ingenieur, also nicht ganz ahnungslos. Ich beherrsche C# und VB.NET.

Ich suche eine OCR .NET Componente, die diese Aufgabe für mich erledigt, habe aber noch keine Komponente gefunden, die dies schafft.

Ein Beispiel, welches das Modul erkennen muss, ist im Dateianhang!

...................................

mfg,

Zocker85

Servus @Zocker85,

"rennschnecke" (Mitglied in diesem Forum) hat vor einiger Zeit ein Programm erstellt, das die gefallenen Zahlen aus einem OC ausliest und dann auch automatisch die Einsätze tätigt. Ich denke, wenn Du mit ihm Kontakt aufnimmst, kann er Dir ja sagen, mit welcher Programmiersprache er das gemacht hat. Ich habe es leider vergessen (jaja, das Alter)

L.G.

suchender

Link zu diesem Kommentar
Auf anderen Seiten teilen

Das hört sich gut an.

Ich darf aber irgendwie keine Nachrichten im Forum schreiben.

Hoffe mal, "rennschnecke" stoßt hier im Thread mit dazu :reindeer:

Servus @Zocker85,

ich habe eine Nachricht an "rennschnecke" geschrieben, vielleicht liest er sie und meldet sich dann, habe auch schon lange nichts mehr von ihm gehört.

L.G.

suchender

Link zu diesem Kommentar
Auf anderen Seiten teilen

Oh ok, alles klar danke.

Hab mich vorhin in Verbindung gesetzt mit paroli, wegen den Nachrichten.

Jetzt wird die rennschecke wohl zweimal informiert :reindeer:

Bin übrigens grad fest am programmieren, bei so ner kleinen Software gibts ja immer ziemlich viel zu schrauben:

was schon funktioniert:

- automatische Screenshots (und Screenshot Ausschnitte)

- die ersten "Systeme" laufen schon.

- Intelligente Maussteuerung funktioniert schon. (MouseMove MouseClick)

- Festlegen der Positionen der Eingabeflächen der OC Software (z.B. wo muss die Maus klicken für "Red", usw.)

- manuelle Zahleneingabe über Nummernschaltfläche

was noch kommt:

- viele viele Systeme

- manuelle Zahleneingabe über Permanenzen/Textdateien

- und natürlich automatische Zahlenerkennung aus der OC-Software-Oberfläche

(wenn alles so funtioniert wie geplant, gibts für interessierte auch gerne ein Demo)

was mich noch interessiert: LongTerm Systeme zum einprogrammieren und testen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Servus @Zocker85,

ich habe eine Nachricht an "rennschnecke" geschrieben, vielleicht liest er sie und meldet sich dann, habe auch schon lange nichts mehr von ihm gehört.

L.G.

suchender

Hi,

here I am! :reindeer:

Also, meine Software nutzt kein OCR - ich habe dem Programm lediglich beigebracht, was rot/schwarz ist! :lachen:

War länger nicht hier und Hinweise, ob Mail vorhanden ist oder nicht bekomme ich nicht.

Den Grund hatte ich hier irgendwo schonmal beschrieben.

lg

Schnecke

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo rennschnecke.

verrätst du mir evtl, wie du das gelößt hast, dass rot/schwarz erkannt wird?

ich hab mich inzwischen auch etwas vom OCR distanziert. Ich probier grad, eine einigermaßen elegante Lösung mit Bildervergleich hinzubekommen, wie Faustan vorgeschlagen hat.

Wahrscheinlich wird der einzige Nachteil sein, dass sich das OC-Fenster immer wieder an genau der selben Stelle aufm Desktop befinden muss. Mit Win7 ist das einigermaßen kompfortabel, wegen dem automatischen Andocken von Fenstern, für WinXP gibts ein kleines Zusatztool (AeroSnap), dass diese Funktionalität simuliert, (oder Vollbildmodus, wenn man wie ich zwei Bildschirme hat :lachen:). Oder ich finde eine Möglichkeit, ein fremdes Fenster an meine Programm-Form anzudocken. Vielleicht hat da jemand ne Idee? (Das alles ist grad in Testphase, ich schreib dann obs geklappt hat.)

Zurück zu rot/schwarz erkennen: wie gesagt, würd mich auch sehr interessieren! please tell me!

Ich muss aber gleich mitm "aber" kommen:

Aber: dass is leider auch keine Dauerlösung für mich, weil:

Die Systemchen, die ich gerade teste, will ich nicht nur auf rouge/noir laufen lassen,

sondern dazu noch parallel Even/Odd und High/Low! --> Dreifache Ausbäute in der gleichen Zeit :reindeer:

(alles, was ich teste sind einfache Chancen, in ferner Zukunft evtl mal noch Dutzende und Colonnen)

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo rennschnecke.

verrätst du mir evtl, wie du das gelößt hast, dass rot/schwarz erkannt wird?

Klar, ganz einfach:

Vor dem eigentlichen Spiel muss man meinem Programm beibringen, wo es einzelne Dinge findet.

U.a. auch das Feld, wo die Farbe zu finden sein wird. Beim Klick messe ich einfach die Koordinate und nach einem Dreh einfach jeweils den Farbwert.

Die Systemchen, die ich gerade teste, will ich nicht nur auf rouge/noir laufen lassen,

sondern dazu noch parallel Even/Odd und High/Low! --> Dreifache Ausbäute in der gleichen Zeit :reindeer:

das ist unsinnig!

Link zu diesem Kommentar
Auf anderen Seiten teilen

Vor dem eigentlichen Spiel muss man meinem Programm beibringen, wo es einzelne Dinge findet.

U.a. auch das Feld, wo die Farbe zu finden sein wird. Beim Klick messe ich einfach die Koordinate und nach einem Dreh einfach jeweils den Farbwert.

alles klar, genau so hab ich das auch gelöst! (eben bis auf die Zahlen)

das ist unsinnig!

warum?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo Zocker85,

Faustan hat eigentlich schon beschrieben, wie man so etwas umsetzten kiann.

Mein Bot macht es prinzipiell ähnlich.

Die einfachste Methode (langsam) an die Farbwerte der einzelnen Bildpunkte zu kommen ist die

Bitmap myBitmap = new Bitmap("Zahl.bmp");

Color pixelColor = myBitmap.GetPixel(50, 50);

Ist aber etwas träge, wenn die Bilder größer werden.

Etwas eleganter bzw. schneller ist ein direkter Zugriff und ein Vergleich mit memcmp.

Für die Ermittlung der gefallenen Zahl sollte es reichen.

LG

Hütchenspieler :reindeer:

bearbeitet von Hütchenspieler
Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo zusammen,

Vor dem eigentlichen Spiel muss man meinem Programm beibringen, wo es einzelne Dinge findet.

U.a. auch das Feld, wo die Farbe zu finden sein wird. Beim Klick messe ich einfach die Koordinate und nach einem Dreh einfach jeweils den Farbwert.

Bitmap myBitmap = new Bitmap("Zahl.bmp");

Color pixelColor = myBitmap.GetPixel(50, 50);

Ist aber etwas träge, wenn die Bilder größer werden.

Eleganter bzw. schneller ist ein direkter Zugriff und ein Vergleich mit memcmp.

Interessant. Sowas wollte ich auch mal haben und habe jemanden gefragt, der sich angeblich in Java gut auskennt. Der meinte aber, dass man keinen Zugriff auf die Maus in einem Java-Fenster bekommt. Das Java-Programm würde die Maus sozusagen stehlen, so dass man sie nicht mehr von außen über ein Programm steuern könne und auch nichts mehr auslesen könne, aus Sicherheitsgründen.

Naja, so ganz kann ich mir das nicht vorstellen. Es muss doch möglich sein, einen normalen Benutzer zu simulieren, der die Maus wirklich herumschiebt, oder?

Funktioniert denn eure Methode mit Java-Programmen, bei DB zum Beispiel, oder hat mein Bekannter recht und es geht nicht?

Danke und Gruss, Optimierer

bearbeitet von Optimierer
Link zu diesem Kommentar
Auf anderen Seiten teilen

@Hütchenspieler:

ich zitier mich mal selber:

ich hab mich inzwischen auch etwas vom OCR distanziert. Ich probier grad, eine einigermaßen elegante Lösung mit Bildervergleich hinzubekommen, wie Faustan vorgeschlagen hat.

bin grad fleißig dran

:reindeer: aber trotzdem danke.

@rennschnecke

das musst du mir schon etwas genauer erklären.

Also ich lasse mit ein und den selben Zahlen mein System "Sys1" mit schwarz durchlaufen, dann mit den selben zahlen mit rot, dann mit odd, usw.

wie man im Screenshot-Anhang (siehe Bild links unten) erkennen kann, ergeben sich bei mir bei jeder einfachen Chance zw. 34 und 41 Einheiten "plus". (Scan mit 100000 random zahlen).

das macht auf mich nen recht konstanten Eindruck.

Gruß Zocker

Link zu diesem Kommentar
Auf anderen Seiten teilen

@Optimierer

Maussteuerung mit .Net-Umgebung ist auf jeden Fall kein großes Ding. Das läuft schon ziemlich gut!

Ansteuerung über "user32.dll"

Hab 2 Funktionen Programmiert: MouseMove(x, y) und MouseClick(), mehr brauch ich nicht :reindeer:

Link zu diesem Kommentar
Auf anderen Seiten teilen

... Ich bin angehender Softwareentwickler und Ingenieur, also nicht ganz ahnungslos. Ich beherrsche C# und VB.NET.

...

Deine Probleme und Fragen stellen diese Aussage doch sehr in Zweifel.

Das Problem der Bildposition auf dem Monitor lässt sich durch eine Transformation von relativen in absolute

Koordinaten umgehen:

Innerhalb des "Casino-Fensters" steht der zu untersuchende Bildausschnitt immer an der selben Stelle.

Man muss also nur die Position des "Casino-Fensters" auslesen und kann so die Position innerhalb des

gesamten ScreenShots berechnen. So lassen sich auch die absoluten Koordinaten für die Maussteuerung

ermitteln.

Ebenso ist es völlig unnötig, ganze Bildbereiche pixelweise zu vergleichen. Man braucht nur für den

gewünschten Bildausschnitt einen Hash-Wert ermitteln und vergleicht diesen mit zuvor gespeicherten Werten.

Link zu diesem Kommentar
Auf anderen Seiten teilen

@rennschnecke

das musst du mir schon etwas genauer erklären.

Also ich lasse mit ein und den selben Zahlen mein System "Sys1" mit schwarz durchlaufen, dann mit den selben zahlen mit rot, dann mit odd, usw.

wie man im Screenshot-Anhang (siehe Bild links unten) erkennen kann, ergeben sich bei mir bei jeder einfachen Chance zw. 34 und 41 Einheiten "plus". (Scan mit 100000 random zahlen).

das macht auf mich nen recht konstanten Eindruck.

Gruß Zocker

Du erhöhst Deine Chancen nicht, indem Du dreimal EC zeitgleich spielst.

Eher im Gegenteil hast Du dann vielleicht zwar weniger Verluste in kurzer Zeit, weil das eine den Verlust vom anderen ausgleicht, aber anders herum gesehen hast Du wahrscheinlich auch nicht so viele hohe Gewinne (aus gleichem Grund).

Link zu diesem Kommentar
Auf anderen Seiten teilen

Wie ist deine Meinung dazu?

Du kannst jetzt schreiben und dich später registrieren. Bereits registrierter Teilnehmer? Dann melde dich jetzt an, um einen Kommentar zu schreiben.
Hinweis: Dein Beitrag wird nicht sofort sichtbar sein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Neu erstellen...