Reaktiven Script mit Bildauswertung

Du hast eine Idee für ein Projekt?
Antworten
MristerX
User
Beiträge: 9
Registriert: Freitag 29. März 2019, 23:06

Hallo,
mein Name ist Clemens.
Ich würde gerne ein Script schreiben, welches aufgrund eines Bildes ein Szenario erkennt und dann ein von mir vorgegebene Befehle ausführt.
Leider habe ich nur wenig Ahnung von Bilder vergleichen oder änlichen.
Ich würde mich freuen, wenn mir einer Ansätze zeigen könnte.
Schon Mal danke im Voraus
Clemens
__deets__
User
Beiträge: 14543
Registriert: Mittwoch 14. Oktober 2015, 14:29

Da hast du dir ein heiß umkämpftes Gebiet aktueller Forschung und Entwicklung ausgesucht. Nix was so eben aus der lameng zu programmieren ist. Bei fast allen Bilderkennungs-Systemen gilt: sie sind auf das konkrete Problem optimiert, und eines Diskussion ist nur sinnvoll anhand konkreter Bilder. Was also ist dein Szenario, und wie sieht das aus?
Benutzeravatar
ThomasL
User
Beiträge: 1366
Registriert: Montag 14. Mai 2018, 14:44
Wohnort: Kreis Unna NRW

Da kann ich dir Herrn Adrian Rosebrock und seine Webseite
https://www.pyimagesearch.com empfehlen.
Er bietet da jede Menge Wissen rund um Bilderkennung und Verarbeitung an.
Sehr viel kostenlos aber natürlich will er auch seine "paid courses" verkaufen.
In Kürze fängt wieder ein kostenloser Kurs an:
https://www.pyimagesearch.com/free-open ... sh-course/
Ich bin Pazifist und greife niemanden an, auch nicht mit Worten.
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
MristerX
User
Beiträge: 9
Registriert: Freitag 29. März 2019, 23:06

@__deets__
Mein Szenario ist, das ein Körper zufällig in einem T förmigen Raum spawnt. Von diesem Ort soll der Körper dann jeweils zum Ende des T Stiels. Die Bilder sind jeweils ein Ausschnitt dieses Raums, und sollen aufgrund des genauen Randverlaufs (der überall anders ist) erkannt/zugeordnet werden. Von dort soll der Körper dann via Mausklicks zum Ziel Ort gelangen (die clicks geben nur zwischen Ziele an ).


@ThomasL
Danke. Ich werde mir Mal die Seite anschauen.
__deets__
User
Beiträge: 14543
Registriert: Mittwoch 14. Oktober 2015, 14:29

Ist das ein Spiel? Und wie ich schon sagte: Ohne konkrete Bilder ist darüber nicht wirklich gut zu diskutieren.
MristerX
User
Beiträge: 9
Registriert: Freitag 29. März 2019, 23:06

Ja es ist ein Spiel (aber keine AGB verletzung).
Und wie kann ich die Bilder am besten zugänglich machen?
Benutzeravatar
__blackjack__
User
Beiträge: 13113
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@MristerX: Einen externen Bildhoster wie beispielsweise Imgur verwenden und die Bilder dann hier mit dem [ img ]-Tag in den Beitrag einbinden. Bei Imgur gibt's praktischerweise auch eine Funktion wo man den passenden BB-Code zum einbinden des Bildes für phpBB-Foren in die Zwischenablage kopieren kann.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
MristerX
User
Beiträge: 9
Registriert: Freitag 29. März 2019, 23:06

@__deets__
Hier sind 2 Bilder der Karte. Im 2. Bild habe ich markiert, welche das Spawn und welche die Ziel Area ist.
Da die führ mein Script relevanten Bilder alle nur kleine ausschnitte der Karte währen glaube ich das die erstmal reichen müssten.
Ich hatte mir gedacht, dass es vielleicht möglich ist die Karte nur als Kanten darzustellen
(https://www.pyimagesearch.com/2019/03/0 ... -learning/), um dann diese Linien zu vergleichen. Damit möchte ich dann sozusagen meine Figur in der Ebene finden (kleiner grüner Punkt). Um damit dann weiter arbeiten zu können.
Bild der ganzen Karte:
https://imgur.com/rMQFlKn
Bild der Karte mit den markierten Bereichen:
https://imgur.com/0dhcMPP
Beispiel Bild des Spawnpunktes in der Karte:
https://imgur.com/kUrmaa0



Wie ich mir mein Programm vorstellle:
1. Level starten
2. Bild des Spawns auf der Karte machen
3. Per Bild vergleich rausfinden wo ich bin
4. Über festgelegte Abläufe oder Peilpunkte das Level abschließen

@__Blackjack__ D
Danke für den Hinweis
__deets__
User
Beiträge: 14543
Registriert: Mittwoch 14. Oktober 2015, 14:29

Na da ist ja noch aller möglicher anderer Kram wie Gräben und Brücken im Weg. Und Beleuchtungsvehältbisse die sich ändern.

Ich würde mit sowas beginnen: https://medium.com/nanonets/how-to-do-i ... 73cc5862ef

Adrian’s Kurs (den ich erworben habe) kennt auch noch eine Reihe anderer verfahren, wie farb- oder local binary pattern mit denen man versuchen kann, Bereiche zu klassifizieren. Dank präziser Grafiken kommst du natürlich für bestimmte Objekte auch mit Template matching weiter. Ggf reicht das, um mit Kanten und einem Ähnlichkeitsmass für “ist einfacher Boden” basierend auf zB Histogrammen, LBPs etc zu einer Segmentierung zu kommen.

So oder so - sehr viel Arbeit.
MristerX
User
Beiträge: 9
Registriert: Freitag 29. März 2019, 23:06

Erstmal Danke __deets__. Die Gräben und Brücken sind mir eigentlich erstmal vollkommen egal. Die werden später warscheinlich noch der einfachere Teil sein.
Aber deine Anmerkungen klingen interesant. Ich werde sie mir gerne mal durch lesen.

Und was das Betrifft.:
__deets__ hat geschrieben: Samstag 30. März 2019, 18:16 So oder so - sehr viel Arbeit.
Ja das wird es. Aber das wusste ich schon vorher.

Ich finde es auch richtig toll wie ihr mir helft mein Problem anzugehen.
Also nochmal Danke an alle die mir bis jetzt geholfen haben.
MristerX
User
Beiträge: 9
Registriert: Freitag 29. März 2019, 23:06

Kurze Frage nochmal.
Ich möchte eine Screenshot machen:

#screenshot.py
def screenshot():
import pyscreenshot as ImageGrab
im=ImageGrab.grab(bbox=(1158,42,1276,160))
im.save('b.png')

Wenn ich ihn als einzelne Datei ausführe funktioniert er super.
Wenn ich das jetzt aber in einem Script benutze funktioniert es nicht.
Im Script sieht es ungefähr wie folgt aus:

from screenshot import screenshot
def script():
x=1
if x==1:
screenshot()

script()

Habe auch probiert script() in einem Thread auszuführen.
Klappt auch nicht
Falls mir einer helfen könnte wäre ich sehr dankbar.
__deets__
User
Beiträge: 14543
Registriert: Mittwoch 14. Oktober 2015, 14:29

Bitte Code Tags benuzten. Und “ungefähr” gibt’s nicht bei Computern. Da kommt es auf “genau so” an. Also bitte DEN Code Posten. Nicht etwas ausgedachtes.
MristerX
User
Beiträge: 9
Registriert: Freitag 29. März 2019, 23:06

screenshot.py:
def screenshot():
import pyscreenshot as ImageGrab
import time
time.sleep(1)
im=ImageGrab.grab(bbox=(1158,42,1276,160))
im.save('b.png')

main.py
from screenshot import screenshot

def vergleich():
import (viele hier irrelevante module)
while 1:
while start==1
# start is eine variable um das Programm durch Tasten kürzel zu starten und zu beenden
screenshot()
(und noch viel script hinterher)

Thread(target=vergleich).start()
Sirius3
User
Beiträge: 17754
Registriert: Sonntag 21. Oktober 2012, 17:20

`start` ist nirgends definiert und es fehlt ein :. Das kann also nicht der Code sein, den Du benutzt. Wie soll man da helfen können? Benutze das nächste mal den </> - Knopf.
MristerX
User
Beiträge: 9
Registriert: Freitag 29. März 2019, 23:06

Ich möchte euch nicht meine 200 Zeilen Code anrufen wovon fast nix dafür relevant ist.
Ich möchte nur wissen, welche Art zum Screenshot machen das gleiche kann aber in Threads auch läuft..
__deets__
User
Beiträge: 14543
Registriert: Mittwoch 14. Oktober 2015, 14:29

Gut, das du selbst entscheiden kannst, was relevant ist und was nicht. Dann kannst du ja auch selbst rausfinden, was dein Problem ist.

Falls dem nicht so ist, dann wäre es - ganz vielleicht - eine Idee, denjenigen hier, von deren Erfahrung du profitieren möchtest, auch zuzugestehen, das ihre Wünsche einen Grund haben. Du bist beileibe nicht der erste, der beschreibt, was er glaubt zu tun, aber dann in Wirklichkeit was anderes macht.
MristerX
User
Beiträge: 9
Registriert: Freitag 29. März 2019, 23:06

Ok Problem beseitigt.
Statt das Schreenshot Modul Pyscreenshot zu nutzen habe ich jetzt einfach Pyscreeze benutzt und alles läuft super.
Antworten