Forum: PC-Programmierung Bildverarbeitung Fadenkreuz an Ziel ausrichten


von Maxy M. (nixwiss)


Angehängte Dateien:

Lesenswert?

Hallo Zusammen,
kurz zu mir: ich bin 25 Jahre alt und habe Elektrotechnik gelernt und 
kann bischen Mikrocontroller, Arduino programmieren. Was ich vorhabe ist 
eher ein PC Programm glaube ich.

Was möchte ich gerne machen (für mich Mount Everest, für euch vielleicht 
Feldberg):
Mit einer Webcam/PixyCam einen kleinen Bereich meines Monitors 
aufnehmen.
Undzwar den Bereich wo im Spiel der Fadenkreuz ist. Und in diesem 
Bereich soll auch das Ziel gesucht/erkannt werden und dann soll das 
Programm den Maus so bewegen (nicht Hardwaretechnisch sondern 
Softwaretechnisch), dass das Ziel mittig im Fadenkreuz ist und dort 
gehalten werden. Wenn das Ziel nicht erkannt wird, soll der Mensch den 
Fadenkreuz mit der echten Maus bewegen.

Mit der Maus (mit der Hand) richtet man den Fadenkreuz auf das Ziel aus.
Fadenkreuz sieht so aus (Fadenkreuz.png). Hintergrung kann hell sein, 
grell sein, andere Objekte dahinter sein.

Und das Ziel kann so aussehen (Ziel.png), also Rund oder Rechteckig sein 
oder Rauteform sein. Hintergrung kann hell sein, grell sein, andere 
Objekte dahinter sein.

Wie kann man so ein Projekt am einfachsten, schnellsten realisieren, ich 
meine gibt es schon fertige Komponeneten die man benutzten könnte?

Ich hoffe dass ich einiger maßen gut erkären konnte was ich vorhabe.
Auf Antwoten freu ich mich sehr.

Liebe Grüße

von Upps (Gast)


Lesenswert?

Du willst eine Cheat-Ziel-Hilfe bauen, die man nicht aufspüren kann ? 
Muss die immer den Kopf treffen ? :-)

von Jim M. (turboj)


Lesenswert?

Maxy M. schrieb:
> für euch vielleicht Feldberg

Leider eher Olympus Mons (der 22km Vulkan auf dem Mars).

Denn Objekterkennung ist ein nicht-triviales Computer Vision Problem, 
das man nur mit entsprechender Rechenleistung erschlagen könnte. Eine 
Titan V oder 2080Ti wäre da nicht unterfordert im Echtzeitbetrieb.

Es kommt aber auch darauf an wie stark sich Spielfiguren vom Hintergrund 
abheben und wie leicht sie erkennbar sind. Da gibt es extreme 
Unterschiede in verschiedenen Computerspielen.

von Maxy M. (nixwiss)


Lesenswert?

Wow 22km da guck ich dumm aus der wäsch.

Ist die Leistung nicht Abhängig wie groß der Bereich/Bild ist?
Ich dachte so ehr an Raspberry Pi.
Zur Not habe ich einen zweiten Rechner.
Wenn Hintergrund schwarz ist dann kann man es leicht erkenne (siehe 
bitte Bilder)und die Farbe ist immer grün.

von Kaj (Gast)


Lesenswert?

Jim M. schrieb:
> Denn Objekterkennung ist ein nicht-triviales Computer Vision Problem,
> das man nur mit entsprechender Rechenleistung erschlagen könnte. Eine
> Titan V oder 2080Ti wäre da nicht unterfordert im Echtzeitbetrieb.
>
> Es kommt aber auch darauf an wie stark sich Spielfiguren vom Hintergrund
> abheben und wie leicht sie erkennbar sind. Da gibt es extreme
> Unterschiede in verschiedenen Computerspielen.
Schlussendlich haengt es auch von der "Geschwindigkeit" des Spiels ab. 
Quake3 ist was anderes als CS:GO ist was anderes als Battlefield. Soll 
heissen: In Battlefield hab ich potenziell mehr Zeit zum Auswerten, da 
das Spielgeschenen im grossen langsamer ist als in CS oder Quake.

Und es kommt auch noch auf die Aufloesung der Kamera und den 
betrachteten Bildausschnit an. 300x300 Pixel lassen sich schneller 
auswerten als 1000x1000.

Aber ja, das groesste Problem duerfte sein wie stark sich das Ziel vom 
Hintergrund unterscheidet. Gerade bei CS:GO koennte das spannend werden, 
wenn ein CT (dunkle Klamotten) in einer dunklen Ecke sitzt. Oder der 
helle T in Dust2 vor einer sandfarbenen Wand steht.

Ebenso darf nicht vergessen werden, das die Kamera in einem bestimmten 
Winkel auf den Monitor schaut, wodurch die Farben (die die Kamera sieht) 
auch noch mal schlechter werden koennen. Das haengt dann an Kamera und 
Monitor.

Der TO sollte sich mal OpenCV anschauen. Das ist mMn die schnellste und 
effektivste Anlaufstelle um seine Objekterkennung zum laufen zu 
bekommen.

Der Umweg ueber die Kamera ist aber relativ unnoetig, da das eigentliche 
Tool, was das Zielen und Steuern der Maus uebernimmt ja immernoch auf 
dem Rechner laufen muss. Da kann man dann auch einfach Screenshots 
machen und darin suchen. Das abgreifen der Bilddaten ist ja am Ende 
nicht von einer Streamingsoftware wie OBS zu unterscheiden. Und mit den 
Screenshots entfaellt dann auch das Problem des Blinkwinkels und der 
Farbverfaelschung der Kamera. Und die Kamera bringt ja noch zusaetzliche 
Latenzen (USB) ins spiel.

Statt der Kamera koennte man auch eine Capture-Card nutzen (machen viele 
professionelle Streamer. Auf PC 1 lauft das Spiel, und mit PC 2 wird das 
Bild ueber die Capture-Card gestream/aufgezeichnet. So gibt es nahezu 
keinen Leistungsverlust (FPS) im Spiel.). Gibt es sowohl intern als auch 
extern (USB 3).

Maxy M. schrieb:
> Wenn Hintergrund schwarz ist dann kann man es leicht erkenne (siehe
> bitte Bilder)und die Farbe ist immer grün.
Ist das Ziel immer dieser gruene Kreis? Ist der Hintergrund immer 
schwarz? Wie du aus diesem posting entnehmen kannst, gibt es viele Arten 
von Spielen und Zielen...

Je genauer deine Spezifikation ist, desto eher kann man dir helfen.

Beispiel:
Du hast einfach nur einen weissen Bildschirm, und da ist irgendwo ein 
schwarzes Quadrat drauf. Dann kannst du im einfachsten Falle einfach ein 
referenz Screenshot von dem Quadrat machen. Dann machst du einen 
Screenshot vom Monitor und solltest die Position des Quadrates mit einem 
recht einfachen vergleich finden koennen.

von Maxy M. (nixwiss)


Angehängte Dateien:

Lesenswert?

Wow so viel geschrieben, vielen dank für eure Hilfe und Infos.

Fadenkreuz und Ziel ist immer grün und Form des Ziels kann Kreis, 
Quadrat oder Raute sein.

Hintergrund kann schwarz, weiß, grell hell sein, wobei bei weiß oder 
grell hell erkennt man das Ziel schlechter, aber das ist nicht so 
schlimm, weil wenn es nicht erkannt wird, muss ich eine bessere Position 
annehmen, so dass das Programm das Ziel erkennt und den Fadenkreuz mit 
Hilfe der Mausbewegung (softwaretechnisch) in Richtung Ziel bewegt und 
das Ziel mittig im Fadenkreuz hält, bis das Ziel weg huscht oder 
zerstört ist.

Das mit dem Screenshots finde ich sehr gut. Kamera fällt dann weg.
Ich würde gerne erstmal alles (Spiel, Bildverarbeitung,...) auf einem 
Rechner versuchen.
Im Anhang habe ich zwei Bilder angehängt mit heller Hintergrund.
Ist schon schlechter erkennbar.

Das Fadenkreuz ist nicht starr im Mittelpunkt, wenn ich mich bewege, 
bewegt sich es auch.

Also Screenshots macht, Bild umwandelt, nachdem Fadenkreuzmuster und 
Zielmuster sucht und dann den Fadenkreuz zum Ziel bewegen indem man die 
Stoftwaremaus bewegt.

Habe ich irgend etwas vergessen?

Gibt es Tools die teilweise oder als ganzes all diese Teilbereiche kann, 
ich denke nicht, oder?

Wie kann ich, mit meinem bischen MC Wissen, die ganze sache jetzt 
anpacken?

Gruß

von bingo (Gast)


Lesenswert?

schau Dir mal den Squirrel-Tracker an: 
http://thomaspfeifer.net/fpga_dsp_bildverarbeitung.htm

von wirddochnix (Gast)


Lesenswert?

> Wie kann ich, mit meinem bischen MC Wissen, die ganze sache jetzt
> anpacken?
>
> Gruß

Gar nicht. Das Projekt ist zum scheitern verurteilt, weil du viel zu 
wenig Knowhow hast, sorry!

Fang an dir Bücher zu kaufen und lerne programmieren - richtig. 
Anschließend fängst du mit kleinen Projekten an und erarbeitest dir über 
Jahre das Knowhow - ja,  JAHRE.

von BV (Gast)


Lesenswert?

bingo schrieb:
> schau Dir mal den Squirrel-Tracker an:
> http://thomaspfeifer.net/fpga_dsp_bildverarbeitung.htm

viel zu komplex als beispiel ausserdem nicht dokumentiert
zum lernen völligj ungeeignet

wirddochnix schrieb:
> Gar nicht. Das Projekt ist zum scheitern verurteilt, weil du viel zu
> wenig Knowhow hast, sorry!
sehe ich nicht so
ein fadenkreuz ist so ziemlich das einfachste was man detektieren können 
muss

das ist so einfach, dass man es aus gewonnenen bilddaten herausrechnen 
kann

von Maxy M. (nixwiss)


Lesenswert?

wirddochnix: Danke für deine ehrlichen Worte. Wegen Burnout kann ich es 
leider nicht. Das würde bei mir Jahrzehnte dauern.

bingo: danke für den Link. Wie "Kaj" geschrieben hat ist besser mit den 
screenshots zu arbeiten, wodurch die Kamera wegfällt.

Es gibt doch bestimmt fertige Open Source Tools, die man dann stück für 
zusammen bauen könnte, oder?

Kennt ihr erfahrere Programmierer in diesem Bereich, die so etwas für 
"relativ kleines Geld" programmieren würde?

Gruß

von Selbst (Gast)


Lesenswert?

OpenCV, template matching

von grundschüler (Gast)


Lesenswert?

Alles viel zu kompliziert. stm32f4-disvovery-board  mit dcmi und 
Speicher.
-Bild in Speicher
-pixel ablaufen, bis Farbe erkannt wird - oberer Rand des Rings
-verifizieren, dass dort tatsächlich der Ring ist

Vorraussetzung ist im Prinzip nur, dass du dcmi anwenden kannst.

von Framulestigo (Gast)


Lesenswert?


von Dirk (Gast)


Lesenswert?

Hi, hier ist ein gutes Beispiel für Python. Die KI kannst du ignorieren, 
aber in dem Videotutorial wird beschrieben wie du das Bild analysiert.

Falls das ganze auf einem anderen PC (z.b. Intel NUC) laufen soll und 
dein Betriebssystem Windows 10 ist kannst du Bildmirrorfunktion auf dem 
Host nehmen und das Bild per TCP an den Client senden. Microsoft bietet 
dafür fertige VC++ Projekte. Die Bildverarbeitung und Steuerung kannst 
du dann auf dem Client machen. Ich denke solch ein Bot wird recht 
schwierig gefunden.

von Mike J. (linuxmint_user)


Lesenswert?

So kompliziert ist das nicht.

Wenn man davon ausgehen kann dass sich die Farbe nicht all zu drastisch 
verändert und immer grünlich bleibt, dann muss man doch nur einen Kreis 
finden der eine fixe Größe hat.

Das ist vollkommen machbar.

Ich würde das aber auch besser ohne Webcam machen.
Bei einer ganz einfachen Methode haben die das ganz ohne Rand-suchen 
gemacht. In deinem Fall sucht man Bereiche mit grünen Punkten und legt 
dann dort das Muster deines Kreises hoch und vergleicht die Anzahl der 
übereinstimmenden Punkte. Man bewegt dieses Muster dann systematisch 
über diesen Bereich, vergleicht die Punkte und kann somit die Stelle mit 
der größten Übereinstimmung finden.

Das ist zwar nicht intelligent oder ideal, aber eben einfach.
Das könntest du recht schnell hinbekommen.

von Sebastian L. (sebastian_l72)


Lesenswert?

Maxy M. schrieb:
> Wie kann man so ein Projekt am einfachsten, schnellsten realisieren, ich
> meine gibt es schon fertige Komponeneten die man benutzten könnte?

Kongsberg hat das fertig. Ist im Kongsberg Protector mit drin.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.