Laden...

Wie suche & finde ich Images auf dem Screen?

Erstellt von Noob6666 vor 6 Jahren Letzter Beitrag vor 6 Jahren 3.655 Views
N
Noob6666 Themenstarter:in
17 Beiträge seit 2018
vor 6 Jahren
Wie suche & finde ich Images auf dem Screen?

Hallo Zusammen,

ganz zu Anfang muss ich sagen, das ich Anfänger bin was das programmieren angeht.
Kann kleine Skripte schreiben und verstehe viele Abläufe,kann Funktionen schreiben, kann Arrays benutzen (Ein und Mehrdimensional)
aber da gibt es noch einiges zu lernen.

Da ich bald eine Umschulung beginnen werde (Fachinformatiker/AE) wo ich auch C# vermittelt bekomme
, würde ich mich gerne schon vorab mit dem Thema beschäftigen, damit mir die Einstiege auch leichter fallen.

Als Übungsbeispiel habe ich mir eine Art SpieleBot ausgesucht, damit ich

A: mich mit dem erstellen einer GUI beschäftigen kann.
B: mich mit Prozessketten/logische Abfolgen beschäftigen kann, die eingehalten werden müssen.

Mit der GUI hab ich aktuell keine Probleme, da gibt es auch super Tuorials auf Youtube etc.
Nur hab ich auch im Forum (oder ich habs ned verstanden) leider keine Biblio gefunden womit ich eine
direkte Image-Search durchführen kann.

Bin für jeden Ratschlag dankbar

LG Noob

C
2.121 Beiträge seit 2010
vor 6 Jahren

Was verstehst du unter Image search?

Weil du einen Rat wolltest. Suche nach Bildern klingt auch ohne genau zu wissen was es ist, nach etwas komplexerem. Dafür nimmt man sicher gerne etwas fertiges. Aber konzentriere dich nicht nur darauf für alles eine Bib. zu suchen die das kann was du brauchst. Vor allem wenns darum geht etwas zu lernen. Programmieren ist mehr als nur Code von anderen so zusammenstellen dass er das tut was man will 😉

N
Noob6666 Themenstarter:in
17 Beiträge seit 2018
vor 6 Jahren

Guten Morgen chilic,

ja da geb ich dir recht, beim Erstellungsprozess ohne Hilfe von aussen, lernt man sehr viel dazu. Vor allem eignet man sich die
Fähigkeit an, schneller Lösungen zu finden oder Ansätze zu verwerfen, weil man weiß, dass man bei gewissen Punkten nicht weiter kommt.
Das ist es eig was mich so fasziniert am programmieren, man lernt wirklich zu denken, auf eine Art die einem vor nicht bekannt war..

Um was eigenes zu erstellen, da fehlt mir im Moment einfach noch zu viel an Wissen in C#.
Einen Beginner erschlägt es Anfangs wirklich, was es an Inhalt zu lernen gibt.

SpieleBot´s sollen ja das verhalten der Spieler nachahmen. Idr klickt man sich durch das Spielgeschehen

Damit der Bot weiß, wo er hinklicken soll, benötigen wir Bildausschnitte der gewünschten Symbole, die in dem Projekt natürlich abrufbar sind.
Mit einer Image-Search oder auch einfach einer Bildersuche, soll der Screen nach dem gewünschtem Ausschnitt abgesucht und die
aktuelle Position ermittelt werden. Wenn es eine Übereinstimmung gibt, soll eben diese Position angeklickt werden.

Das ist es was ich benötige, ich hoffe das war etwas verständlicher

D
985 Beiträge seit 2014
vor 6 Jahren

Wie gut kennst du dich denn mit der Bild-Such-Theorie (abseits der Programmierung) aus?

Um mit der Programmierung zu starten, such dir ein Thema aus, wo du dich schon sehr gut auskennst. Dafür schreibe dann ein Programm.

Es ist wesentlich einfacher mit nur einer Unbekannten (Programmierung in ...) zu arbeiten. Das ist schon komplex genug.

N
Noob6666 Themenstarter:in
17 Beiträge seit 2018
vor 6 Jahren

Abseits der Programmierung?? Weiß nicht mal was du damit meinst, sorry.

Ich brauch nur eine Funktion/einen Weg um ein Bild auf dem ausgewählten Screen zu finden.
Den Rest bekomm ich hin, das sind nur Abfolgen von Klick-Szenarien, die je nach Chapter fest gelegt sind.

16.806 Beiträge seit 2008
vor 6 Jahren

Bilanalyse und damit Dein "Image Search" gehört mit zu den anspruchsvollsten Arten, was man mit Software machen kann.
Bist Du hier mit verschiedenen (zB. mathematischen) Verfahren und Möglichkeiten nicht vertraut, dann ist das kein guter Einstieg, um Software Entwicklung zu lernen.

N
Noob6666 Themenstarter:in
17 Beiträge seit 2018
vor 6 Jahren

mhhhh ok, ehrlich gesagt hatte ich mir das nicht so schwierig vorgestellt

Da es wohl keine Biblio gibt, muss ich wohl nen eigenen Ansatz versuchen. Ansich sollte es doch
von der Logik her funktionieren, dass ich den Screen Pixel zu Pixel absuche ( oben links bis unten recht) und bei jedem Pixel den Ausschnitt vergleiche , mit einer vordefinierten Größe, bis es eine Übereinstimmung gibt.

Sprich:

Screengröße ermitteln
for Schleife laufen lassen bis ich das gesuchte Image gefunden habe

mal schauen was mir noch so einfällt, danke dennoch für die antworten 👍

16.806 Beiträge seit 2008
vor 6 Jahren

mhhhh ok, ehrlich gesagt hatte ich mir das nicht so schwierig vorgestellt

Dann hast Du Dich sehr, wirklich sehr getäuscht.

Da es wohl keine Biblio gibt, muss ich wohl nen eigenen Ansatz versuchen.

Hat niemand gesagt aber..
a) kennt niemand alle existierende Bibliotheken
b) werden wir nicht unbedingt für Dich die Google Suche übernehmen, ist auch nicht die Aufgabe eines Forums (siehe [Hinweis] Wie poste ich richtig? Punkt 4.2 "Wälzt nicht eure Aufgaben auf uns ab" )

Die Wahrscheinlich einer Frage wie "geht XYZ" kann immer mit "Ja" beantwortet werden - es kommt nur auf den Aufwand an.
Und Fragen wie "gibt ex XYZ" können auch immer mit "Vielleicht" beantwortet werden; wer weiß das schon?

Ansich sollte es doch von der Logik her funktionieren, dass ich den Screen Pixel zu Pixel absuche ( oben links bis unten recht) und bei jedem Pixel den Ausschnitt vergleiche , mit einer vordefinierten Größe, bis es eine Übereinstimmung gibt.

  • Was machst Du, wenn der Monitor ganz andere Maße hat?
  • Was machst Du, wenn die Farben etwas abweichen?
  • Was wenn das Image eine bisschen andere Position hat und eben die 1:1 Relation von Pixeln nicht mehr passt?
  • Wie willst Du eine ordentliche Performance erreichen, bei Screens mit 4096 × 2160 Pixeln (4K => 8.847.360 Pixel)?
    -.. und weitere Dinge, um nur mal beim Offensichtlichsten zu bleiben.

Ich kann Dir an dieser Stelle nur viel Erfolg wünschen; fürchte aber, dass das bei dieser Herangehensweise mit ganz viel Frust statt mit einem ordentlichen Resultat enden wird.

T
50 Beiträge seit 2014
vor 6 Jahren

das ist zwar alt, aber das beinhaltet tipps für dich..

BotSuite

N
Noob6666 Themenstarter:in
17 Beiträge seit 2018
vor 6 Jahren

b) werden wir nicht unbedingt für Dich die Google Suche übernehmen, ist auch nicht die Aufgabe eines Forums (siehe [Hinweis] Wie poste ich richtig? Punkt 4.2 "Wälzt nicht eure Aufgaben auf uns ab" )

das erwarte ich nie 😉 , dafür habe ich den Beitrag auch ned gepostet. War privat verhindert und konnte
das ganze erst jetzt weiter führen. Die Fragen nach Performance etc. sind natürlich berechtigt.

Ich befasse mich tatsächlich zum ersten mal mit diesem Thema. Nach meinen Google-Ergebnissen und Verständnissen dazu, ist das ganze wohl doch recht schwierig für eine Laien.
Ein Bild besteht ja auch nur aus 1000enden Pixeln, die bei einer Suche ja auch abgeglichen werden müssen um eine Komplett-Übereinstimmung in einer gewissen Toleranz zu ermöglichen, wenn ich das einigermaßen richtig interpretiert habe 🤔

Will ned gleich aufgeben. Die Performance kann man etwas verbessern, in dem man einen Suchpixel bestimmt und diesen mit einer gewissen Toleranz erstmal absucht, so bleiben alle einige Bereiche erste mal ausgeschlossen und die Performance leidet nicht so sehr darunter. So der Grundgedanke ob das klappt oder nicht, werd ich wohl sehen.

Danke für den Link Torni , werd mich gleich mal durchforsten. Schauen wir mal wie weit ich komme, oder eben doch umschwenken muss.

Danke euch für eure antworten.

5.657 Beiträge seit 2006
vor 6 Jahren

Hi Noob6666,

versuche doch ersteinmal, deine Anforderungen zu definieren. Sonst kann man dir nämlich auch nicht weiterhelfen, denn wir wissen nicht, was du vor hast, und eine Glaskugel haben wir auch nicht.

Also, was bedeutet beispielsweise:

einen Suchpixel bestimmt und diesen mit einer gewissen Toleranz erstmal absucht

Welche Toleranz meinst du? Die Farbe des Pixels? Die Position der Pixel zueinander? Kann das Bild, das du suchst, auf dem Bildschirm evtl. skaliert oder rotiert oder anders verzerrt dargestellt sein?

Wenn nicht, dann kannst du das gleiche Prinzip verwenden, mit dem man einen Teil-String in einem langen Text sucht. Das funktioniert ja auch, wenn der Text nicht genau übereinstimmt, z.B. durch abweichende Groß- und Kleinschreibung. Siehe dazu String-Matching-Algorithmus.

Wenn das nicht ausreicht (je nach Anforderungen, die wir ja nicht kennen), mußt du halt mal nach Object Recognition etc. suchen, dafür gibt es dann auch schon fertige Bibliotheken, wie AForge.NET.

Weeks of programming can save you hours of planning