Zeichenerkennung in Bildern?



  • Guten Tag, ich habe eine ganz spezielle Frage, undzwar ist es möglich Zeichen zu erkennen in Spielen also Zahlenreinfolgen wie wenn im Spiel mitten auf dem Bildschirm "4567" steht das man dies überprüfen kann und das Programm im Spiel etwas schreibt in den Chat?

    Das heißt in einem Spiel bei mir (GTA San Andreas) kommt manchmal per Zufall ein 4 stelliger Zahlencode der reine Zufallszahlen enthält die ich nicht beeinflussen kann. Ich würde gerne das ein Programm erkennen kann was auf dem Bildschirm dort in der Position für Zahlen sind un diese wiedergibt im Chat (Chat aufmachbar per drücken der Taste "t").

    Wollte Fragen ob das möglich ist, wenn ja mit was das möglich ist und ob mir das jemand machen könnte weiß nicht ob hier Geld verlangt wird bin recht neu deswegen erkundige ich mich lieber erstmal hier bei euch.

    Mfg Niemand 😉

    Screen vom Spiel und dem Code: http://s1.directupload.net/images/101106/rnmuo2oj.png



  • OCR ist ein ziemlich komplexes Thema. Genauso komplex sind die Algotithmen, entsprechend langsam sind solche Programme. Eine Echtzeit-Texterkennung wirst du dir abschminken können. Außer du hast nen Megamonster Rechnerpark, dein Spielerechner macht alle Zehntelsekunde (oder wann halt solche Zahlen auftauchen können) einen Screeny und schickt den zur Auswertung in deinen Park...
    Aber Erfolg wirst du wohl wenig haben, da Zeichenerkennung sicher ordenrlich falsche Ergebnisse liefern wird.



  • also das geg. bild sollte auf jeden fall mit über 95% zu machen sein...



  • Und wer kann mir das machen und was verlangt er dafür?

    @labrador man kann doch machen das dieses Bild nur alle 60Sekunden gesendet wird oder? Und das nur wenn das Programm an ist..



  • _-- schrieb:

    also das geg. bild sollte auf jeden fall mit über 95% zu machen sein...

    Das war Ironie ... da du 99.99% der Bildvorvorabreitung manuell geleistet hast (== alle Pixel die uninteressant sind haste brav auf schwarz gesetzt) ist das bei dem Beispielbild machbarer als bei einem Originalbild das du nicht geliefert hast. Was die Machbarkeit angeht orientier dich lieber an l'abra d'or's Antwort.



  • Praktisch machbar in relativ kurzer Zeit ist es unter folgeden Voraussetzungen:
    1. Du weist wo die Ziffern auftauchen.
    2. Die 4 Ziffern sehen immer exakt gleich aus, d.h. sie werden nicht gestreckt gedreht oder sonst was.

    Wenn die Ziffern nicht immer an der gleichen Stelle auftauchen, dann geht das auch noch, jedoch muss Punkt 2 erfüllt sein.

    Wenn 2. nicht erfüllt ist, dann kannst du es gleich knicken, denn dann ist es absicht und man soll keinen Bot dafür schreiben können 🤡 .



  • Lustiger Zufall, habe gestern noch ein Programm geschrieben um CJ zu steuern (Mein persönliches Multiplayer-Projekt ;)).

    Es gibt inoffizielle Speicheradressen-Spezifikationen für GTA SA. Sag mir einfach was für ein Wert das sein soll (Munition, Geld!?) und ich schreibe dir eben das Programm wenn ich die Adresse finde.



  • Also die 4 Zahlen sind IMMER gleich groß, es gibt nur Zahlen von 0 bis 9 davon 4 Stück die per Zufall kommen also z.B 4564 oder 8974 etc.

    Die Farbe, Größe und Position der 4 Zufallszahlen sind IMMER Indentisch! 😉

    @Kóyaánasqatsi:
    Das bringt nichts, ich scripte selbst für SA:MP in der Pawn Sprache, ich hab aufm Server ein Anti Money Cheat da bringts dir nichts das GTA Geld zu verändern.. das Geld wird auf einer MySQL Datenbank gespeichert vom User in einer Variable und immer abgerufen wenn er Geld ausgibt/einnimmt und wenn er nichts einnimmt trotzdem Geld erhält wird es wieder zurückgesetzt. Das ist aber ein anderes Thema hier rum gehts es garnicht.. und CJ Laufen lassen kann ich auch mit nem Autohotkey Keybinder.. 🙄



  • Sorry wegen Doppelpost:

    @JaykopX:
    Da kann man ruhig nen Bot schreiben bringt einem kein Vorteil. Achja auf dem Screen den ich dort habe im Beitrag genau DORT sind IMMER die Zahlen und genau diese Größe/Farbe etc. das Schwarze ist dann der rest uninteressant den man sieht.. aber genau DA ist es.

    Kann mir wer sowas machen? :p



  • ΨPushen erlaubt?Ψ



  • Ich denke einige hier könnten das lösen, da das Problem schon stark spezialisiert ist. Aber keiner hat Lust das nur für ein Dankeschön von dir zu machen.

    Kannst du Programmieren? Wenn ja, dann zeige uns Ansätze und guten Willen, dann bekommst du bestimmt Hilfe. Wenn nicht, dann musst du diesen Thread ins Projekte-unterforum verlagern und einen Anreiz bieten.

    Zum groben Vorgehen würde ich sagen:
    1. Mache einen Screenshot vom Ziffernbereich.
    2. Erstelle eine Bitmap, mit den Ziffern 1-9, im GTA-Grafikstil.
    3. Vergleiche die einzelnen Ziffern aus dem Screenshot mit denen in Der Bitmap. Da die Ziffern IMMER an derselben stelle stehen und KEINE abweichung haben könntest du sogar 100%tige Übereinstimmungen erreichen. Das ist aber nicht unbedingt notwendig.
    4. Simuliere Tastenanschläge

    Die Winapi-Funktionen werden einem da schon viel Arbeit abnehmen.



  • Du hast nicht gesagt das es sich dabei um SA:MP handelt. Ich habe es so verstanden, dass du den Zahlenwert auslesen möchtest und ihn irgendwo im Chatfenster posten möchtest. Und doch, den Wert kann man selbst im Multiplayer-Modus abändern. Thema dynamische Datenpaketmanipulation.

    Aber jetzt helfe ich dir erst Recht nicht mehr.



  • Und warum nicht, war ich unfreundlich oder irgendwas?

    @ wie kann ich meinen Thread verschieben?

    Würde natürlich was bieten (Geld, PSC what ever) muss nur halt wissen was verlangt wird. Und nein Programmieren kann ich nicht behersche nur die Scriptsprache Pawn mehr nicht, und die hilft hier eher nicht.



  • Junge, junge... ist es so schwer zu antworten? Ich habe ganz normal gefragt was für eine Zuordnung der Betrag hat. Wie dem auch sei, hier bitte:

    #include <iostream>
    #include <windows.h>
    #include <conio.h>
    
    int main()
    {
    	DWORD WindowProcessID;
    	HWND WindowHandle = FindWindow(NULL, L"GTA: San Andreas");
    
    	unsigned int Money(0);
    
    	if(WindowHandle == NULL)
    		std::cout<<"Spiel nicht gefunden!"<<std::endl;
    	else
    	{   
    		GetWindowThreadProcessId(WindowHandle, &WindowProcessID);
    
    		HANDLE Process = OpenProcess(STANDARD_RIGHTS_REQUIRED | PROCESS_ALL_ACCESS | SYNCHRONIZE | 0xFFF, FALSE, WindowProcessID);
    
    		DWORD address = 0xB7CE50;
    		ReadProcessMemory(Process, (LPCVOID)address, &Money, sizeof(Money), 0);
    
    		for(;;)
    		{
    			if(GetAsyncKeyState(VK_F5))
    			{
    				ReadProcessMemory(Process, (LPCVOID)address, &Money, sizeof(Money), 0);
    
    				std::cout<< Money <<std::endl;
    
    				Sleep(500);
    			}
    		}
    	}
    
    	getch();
    }
    


  • Dieser Thread wurde von Moderator/in SeppJ aus dem Forum C++ (auch C++0x) in das Forum WinAPI verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • @Kóyaánasqatsi:
    Sorry ich hab das voll verlesen, deswegen kam so eine dumme Antwort von mir.

    Trotzdem Danke für deine schnelle Antwort.

    Achja, ich verstehe die Frage nicht ganz:

    Ich habe ganz normal gefragt was für eine Zuordnung der Betrag hat. Wie dem auch sei, hier bitte:

    Was meinst du damit? Was für ein Betrag, es geht hier nicht um das Geld oder iwas sondern im Multiplayer das dort eine Zahl eingeblendet wird im Script per TextDrawShowForPlayer. Sorry falls ich dich falsch verstehe...

    Könntest du mir das rein theoretisch machen für eine Gegenleistung kommt drauf an was du verlangst..?



  • Inwiefern soll das Geld im Spiel eingeblendet werden?

    Ich würde es an deiner Stelle eher so machen; es gibt ne (wie bereits gesagt) inoffizelle Liste mit den wichtigsten Memory-function-addresses.

    Oder du debuggst (disassemblierst) das Spiel, gibst Text im Spiel ein und suchst nach dem eingegebenem String im Debugger. Mit etwas Bemühung findest du dann auch die passende Funktion zum Text ausgeben. Dann ist das alles gar kein Problem mehr. Mehr werde ich aber nicht dazu sagen, da es schon unter Game-Hacking fällt... 😉



  • Du verstehst mich falsch, es geht hier NICHT um Geld sondern um eine Zahl (4 Stellig) die im Multiplayer vom Server aus eingeblendet wird, man kann das nicht wie das Geld auslesen das ist einfach nur ein Bild was eingeblendet wird mit Zahlen sozusagen. Doch dafür brauch ich die erkennung der Zahlen, sobald ein Prog. diese erkennt soll das Prog in den Spielchat etwas schreiben wie z.B "tDie Heutige Zufallszahl lautet: %d" das t am Anfang um den Chat zu öffnen und %d für den Charackter Wert der Zahl.

    Nochmal, es geht NICHT um das Geld was man oben in GTA sieht.

    Mit Geld meinte ich lediglich, was du oder jemd. verlangen würde mir so ein Programm zu machen 🙂



  • Niemand² schrieb:

    Mit Geld meinte ich lediglich, was du oder jemd. verlangen würde mir so ein Programm zu machen 🙂

    ich würds für 'n appel und 'n ei machen, kann aber leider keine winapi 😃



  • Achso okay, dann haben wir wohl aneinander vorbeigebabbelt. Man müsste mal gucken wie das Programm mit den Datenpaketen umgeht die vom Server kommen. Wie in den meisten Fällen lässt sich aber selbst dies auslesen. Dürfte kein Problem sein, schreib mir mal ne E-Mail.


Anmelden zum Antworten