Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > AutoIt
You last visited: Today at 04:36

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



ImageSearch von mehreren Bildern

Discussion on ImageSearch von mehreren Bildern within the AutoIt forum part of the Coders Den category.

Reply
 
Old   #1


 
Moneypulation's Avatar
 
elite*gold: 138
Join Date: Apr 2012
Posts: 3,495
Received Thanks: 1,769
ImageSearch von mehreren Bildern

Hallo,

sorry wenn ich das Forum hier mit meinen ImageSearch Problemen vollspamme, aber dafür ist es doch da

Nun frage ich mich wie ich am effizientesten ca. 10-15 Bilder aufm Desktop suchen kann. Mein Problem ist, dass die Bilder die ich suche aus einem sozusagen GIF sind, also praktisch einem sich immer wiederholenden Video. Bei einem ImageSearch in der Endlosschleife klappt das noch ganz gut aber wenn ich eben 10-15 if funktionen hab klappt es nicht mehr:

Code:
   While 1
	  $IS = _ImageSearch("weissgelb.png",1,$outputx,$outputy,40)
	  If $IS = 1 Then
		 MouseClick("left",$outputx,$outputy,1)
		 wartenaufglitzieinsammlung()
	  EndIf
	  $IS = _ImageSearch("gelb.png",1,$outputx,$outputy,40)
	  	  If $IS = 1 Then
		 MouseClick("left",$outputx,$outputy,1)
		 wartenaufglitzieinsammlung()
		 EndIf
	  $IS = _ImageSearch("gruenblau.png",1,$outputx,$outputy,40)
	  	  If $IS = 1 Then
		 MouseClick("left",$outputx,$outputy,1)
		 wartenaufglitzieinsammlung()
		 EndIf
	  $IS = _ImageSearch("orange.png",1,$outputx,$outputy,60)
	  	  If $IS = 1 Then
		 MouseClick("left",$outputx,$outputy,1)
		 wartenaufglitzieinsammlung()
		 EndIf
	  $IS = _ImageSearch("weissgruen.png",1,$outputx,$outputy,40)
	  	  If $IS = 1 Then
		 MouseClick("left",$outputx,$outputy,1)
		 wartenaufglitzieinsammlung()
	  EndIf
	  	  $IS = _ImageSearch("blaugelb.png",1,$outputx,$outputy,40)
	  	  If $IS = 1 Then
		 MouseClick("left",$outputx,$outputy,1)
		 wartenaufglitzieinsammlung()
	  EndIf
	  	  $IS = _ImageSearch("hellblaugelb.png",1,$outputx,$outputy,50)
	  	  If $IS = 1 Then
		 MouseClick("left",$outputx,$outputy,1)
		 wartenaufglitzieinsammlung()
	  EndIf
	    $IS = _ImageSearch("rotlila.png",1,$outputx,$outputy,50)
	  	  If $IS = 1 Then
		 MouseClick("left",$outputx,$outputy,1)
		 wartenaufglitzieinsammlung()
		 EndIf
   WEnd

Meine These ist, dass wenn in einem Moment das passende Bild für Bild 7 angezeigt wird, das Script gerade beim Suchen des Bildes 11 ist.

Die Bilder sind alle ca. 15x15 groß und kleiner bekomm ich sie nicht, da das Script sie sonst garnicht erkennt. Mit ImageSearchArea kann ich den Bereich nur minimal verkleinern also das hilft auch nicht sehr.

Daher meine Frage: Wie kann ich effizienter nach den Bildern suchen? Vielleicht mit einer anderen Funktion?

Danke schon mal im Vorraus
Moneypulation is offline  
Old 07/19/2014, 01:33   #2
 
alpines's Avatar
 
elite*gold: 60
Join Date: Aug 2009
Posts: 2,256
Received Thanks: 815
Nimm nicht die Gifs, sondern lieber die einzelnen Frames als PNG.
Wenn du Pech hast kannst du das Bild sogar nie finden, da du eine Momentaufnahme brauchst.
Des Weiteren sind die If-Abfragen hässlich und Cross-Posting ist auch nicht gerne gesehen.
alpines is offline  
Old 07/19/2014, 03:05   #3


 
Moneypulation's Avatar
 
elite*gold: 138
Join Date: Apr 2012
Posts: 3,495
Received Thanks: 1,769
Quote:
Originally Posted by alpines View Post
Nimm nicht die Gifs, sondern lieber die einzelnen Frames als PNG.
Wenn du Pech hast kannst du das Bild sogar nie finden, da du eine Momentaufnahme brauchst.
Des Weiteren sind die If-Abfragen hässlich und Cross-Posting ist auch nicht gerne gesehen.
Ich hab auch nur ein einzelnes Frame pro GIF gespeichert. Was meinst du mit die if Abfragen sind hässlich?
Moneypulation is offline  
Old 07/19/2014, 09:42   #4
 
elite*gold: 0
Join Date: Mar 2009
Posts: 7,260
Received Thanks: 33,147
Ziemlich viel redundanter Code... Für so etwas solltest du auf jeden Fall Arrays verwenden, bei 15 Bildern würde es ja noch schlimmer aussehen.

ImageSearch() dürfte dafür aber zu langsam sein. Ich weiß jetzt natürlich nicht, wie schnell sich die "Bilder" wechseln, die einzige Möglichkeit die ich hier noch sehe ist den Suchbereich auf exakt die 15x15 Pixel zu beschränken. Du kannst auch absolute Koordinaten eines relativen Fensters benutzen (siehe AutoItSetOption()), sofern die Bilder tatsächlich immer an der selben Stelle sind.
Wieso verwendest du nicht einfach ein Bild statt allen? Das scheint doch zu funktionieren.
KDeluxe is offline  
Thanks
1 User
Old 07/19/2014, 11:36   #5
 
flumio's Avatar
 
elite*gold: 50
Join Date: Feb 2009
Posts: 765
Received Thanks: 927
Quote:
wartenaufglitzieinsammlung()
Des weiteren startet er immer wieder eine neue Funktion ohne die momentane zu Beenden, ob das damit zu tun hat, kann ich aber nicht bestätigen.

ImageSearch() ist nur dann praktisch, wenn das gesuchte Bild stehst zu sehen ist.
Wenn man es nur kurz sieht, wird er es so gut wie nie finden, da er immer von oben links nach unten rechts sucht.

Ansonsten musst du ImageSearchArea verwenden und den Bereich einschränken, das er schneller seine Suche findet.

Hab schon viel mit ImageSearch gemacht, man kann damit so gut wie fast alles handeln.
Aber den Befehl ImageSearch() für ein stehst schnell verändertest "gesuchtes" Bild auf den kompletten Desktop, ist wie ein Nagel im Heu zu suchen.
flumio is offline  
Thanks
1 User
Old 07/19/2014, 13:26   #6
 
YatoDev's Avatar
 
elite*gold: 50
Join Date: Sep 2012
Posts: 3,841
Received Thanks: 1,462

glitzie sind das net die dinger von seafight?

Pixelsearch wär besser. und das dann mit der FastFind.dll
YatoDev is offline  
Thanks
1 User
Old 07/19/2014, 13:58   #7
 
alpines's Avatar
 
elite*gold: 60
Join Date: Aug 2009
Posts: 2,256
Received Thanks: 815
Redundanter Code im Sinne des Stils, FlutterShy hats einigermaßen korrigiert.
Man könnte sogar folgendes machen.

Code:
Global $outputx, $outputy
Global $images[8][2] = [["weissgelb.png", 40], ["gelb.png", 40], ["gruenblau.png", 40], ["orange.png", 60], _
    ["weissgruen.png", 40], ["blaugelb.png", 40], ["hellblaugelb.png", 50], ["rotlila.png", 50]] ;...

While 1
    For $i = 0 To UBound($images) -1
        If  _ImageSearch($images[$i][0], 1, $outputx, $outputy, $images[$i][2]) Then MouseClick("primary", $outputx, $outputy, 1 + wartenaufglitzieseinsammlung())        
    Next
WEnd
alpines is offline  
Thanks
1 User
Old 07/19/2014, 20:24   #8


 
Moneypulation's Avatar
 
elite*gold: 138
Join Date: Apr 2012
Posts: 3,495
Received Thanks: 1,769
Quote:
Originally Posted by KDeluxe View Post
Ziemlich viel redundanter Code... Für so etwas solltest du auf jeden Fall Arrays verwenden, bei 15 Bildern würde es ja noch schlimmer aussehen.

ImageSearch() dürfte dafür aber zu langsam sein. Ich weiß jetzt natürlich nicht, wie schnell sich die "Bilder" wechseln, die einzige Möglichkeit die ich hier noch sehe ist den Suchbereich auf exakt die 15x15 Pixel zu beschränken. Du kannst auch absolute Koordinaten eines relativen Fensters benutzen (siehe AutoItSetOption()), sofern die Bilder tatsächlich immer an der selben Stelle sind.
Wieso verwendest du nicht einfach ein Bild statt allen? Das scheint doch zu funktionieren.
Wie hier jemand schon bemerkt hat, geht es um das Spiel Seafight. Und da gibt es eben diese items "glitzis" und es gibt sie in 10-15 Variationen, immer mit anderen Farben. Deswegen hab ich Probleme mit meinem Script. Falls ein Glitzi in der Nähe ist, wird auf der Minimap draufgeklickt. Und es ist eben nicht genau in der Mitte des Spielfensters, da das auf der Minimap 2x2 kleine Bilder sind, daher kann der bot nicht genau in die Mitte klicken und so bleibt die Area vom ImageSearch relativ groß.

Naja, ich schätze mal das ist nahezu unmöglich ohne die Glitzis zu manipulieren, sodass alle z.b. einen einheitlichen Farbton haben. Aber dafür müssten die Nutzer vom Bot weitere Programme downloaden und das will ich nicht.

Ich bedanke mich an allen, die mir geholfen haben. Bin auf jedenfall durch euch etwas besser in AutoIt geworden.

Falls jemand noch Ideen hat kann er das posten aber ich glaube um das Problem zu lösen muss man Programme wie Fiddler benutzen
Moneypulation is offline  
Old 07/19/2014, 21:58   #9
 
YatoDev's Avatar
 
elite*gold: 50
Join Date: Sep 2012
Posts: 3,841
Received Thanks: 1,462
benutz die .Net api von fiddler und replace die bilder. musst aber auch da weiteren antibot mechanismen aus dem weg gehen. das trau ich dir aber nicht zu

benutz pixelsearch^^

@alpines:
was macht der wenn da kein return drinne ist oder wenn da ein return als bool oder string kommt?
YatoDev is offline  
Thanks
1 User
Old 07/19/2014, 21:58   #10
 
alpines's Avatar
 
elite*gold: 60
Join Date: Aug 2009
Posts: 2,256
Received Thanks: 815
Du kannst doch einfach einen Screenshot vom Desktop mit Browsergame machen und anschließend in einer GUI darstellen, dann kannst du ImageSearch durchlaufen lassen und wenn der das findet schließt du die GUI und klickst drauf.

@FlutterShy, im selben Moment gepostet - kommt auch nicht immer vor.
Was ich mache wenn da ein Bool oder String kommt? Na das ist einfach, so wie er die Funktion verwendet nehme ich an, das er keinen Return-Wert definiert hat und der Std-Return von AutoIt 0 ist.
alpines is offline  
Thanks
1 User
Old 07/19/2014, 22:17   #11


 
Moneypulation's Avatar
 
elite*gold: 138
Join Date: Apr 2012
Posts: 3,495
Received Thanks: 1,769
Quote:
Originally Posted by alpines View Post
Du kannst doch einfach einen Screenshot vom Desktop mit Browsergame machen und anschließend in einer GUI darstellen, dann kannst du ImageSearch durchlaufen lassen und wenn der das findet schließt du die GUI und klickst drauf.

@FlutterShy, im selben Moment gepostet - kommt auch nicht immer vor.
Was ich mache wenn da ein Bool oder String kommt? Na das ist einfach, so wie er die Funktion verwendet nehme ich an, das er keinen Return-Wert definiert hat und der Std-Return von AutoIt 0 ist.
Also wenn der script einen glitzi auf der minimap findet soll der draufklicken und dann ein screenshot schießen und auf einem GUI abbilden wo dann mein script nach dem glitzi sucht und wenn es es gefunden hat, ausrechnen soll wo der glitzi am spielfenster ist, hab ich das richtig verstanden? Wenn ja, hört sich das ziemlich kompliziert an aber schon logisch nachvollziehbar
Moneypulation is offline  
Old 07/19/2014, 22:38   #12
 
alpines's Avatar
 
elite*gold: 60
Join Date: Aug 2009
Posts: 2,256
Received Thanks: 815
Ich dachte du suchst nach diesem Stoff und klickst drauf wenn du ihn gefunden hast?
Einfach Screenshot mit _ScreenCapture und deinen @Desktop Boundarie schießen und anschließend anzeigen und mit ImageSearch durchgehen, wenn du es gefunden hast GUI ausblenden und dahin klicken. Das ist alles andere als kompliziert...
alpines is offline  
Old 07/19/2014, 23:10   #13


 
Moneypulation's Avatar
 
elite*gold: 138
Join Date: Apr 2012
Posts: 3,495
Received Thanks: 1,769
Quote:
Originally Posted by alpines View Post
Ich dachte du suchst nach diesem Stoff und klickst drauf wenn du ihn gefunden hast?
Einfach Screenshot mit _ScreenCapture und deinen @Desktop Boundarie schießen und anschließend anzeigen und mit ImageSearch durchgehen, wenn du es gefunden hast GUI ausblenden und dahin klicken. Das ist alles andere als kompliziert...
Ach, so meinst du das. Das klappt leider nicht wirklich weil ich pro "glitzi" nur 1 bild davon hab. Und wenn es beim screenshot gerade bei einem anderen war( denn es ist ja eine art GIF), dann wird er es auch nicht finden. Ansonsten müsste ich ja hunderte bilder absuchen lassen
Moneypulation is offline  
Old 07/19/2014, 23:14   #14
 
alpines's Avatar
 
elite*gold: 60
Join Date: Aug 2009
Posts: 2,256
Received Thanks: 815
Dann nimm einen Screenshot und such die Pixel raus die sich bei jedem Frame ändern und scan das in einem Array durch. Du wirst mit PixelSearch schneller durch sein als mit ImageSearch.
alpines is offline  
Thanks
1 User
Old 07/19/2014, 23:39   #15
 
YatoDev's Avatar
 
elite*gold: 50
Join Date: Sep 2012
Posts: 3,841
Received Thanks: 1,462
Quote:
Originally Posted by alpines View Post
Dann nimm einen Screenshot und such die Pixel raus die sich bei jedem Frame ändern und scan das in einem Array durch. Du wirst mit PixelSearch schneller durch sein als mit ImageSearch.
das sag ich schon die ganze zeit

du musst bedenken das das schiff weiterfährt ansonsten wär das mit der gui ne schöne idee gewesen
YatoDev is offline  
Thanks
1 User
Reply


Similar Threads Similar Threads
[HELP] Imagesearch
12/26/2011 - AutoIt - 2 Replies
Hallo, ich möcht fragen ob man sowas erstellen kann: Es sucht nach einem Bild, dann sucht es in diesem Bild ein Bild und macht linksklick. Wenn das gehen würde wie müste ich das coden? Freuntliche Grüsse Ramon
Zusammenschnitte aus mehreren Bildern?
08/11/2011 - General Art - 3 Replies
Hey, sagt mal, könt ihr mir erklären, wie ich 1 Bild, aus mehreren Teilen verschiedener anderen Bilder mache? Es geht um ein Spiel und die K/D's, die ich gerne zusammen fügen möchte, aber da sind halt nur bestimmte Ausschnitte aus einem Bild, die ich mit anderen Ausschnitten von anderen Bildern zu einem Bild zusammenfügen möchte... wie geht des? ^^
Imagesearch mit Transparenten Bildern?
06/12/2011 - AutoIt - 5 Replies
Hey Leute, Ich habe jetz vor 2 Tagen mit Autoit angefangen und wollte mal etwas mit Imagesearch machen. Ich habe bemerkt es funktioniert nur mit Nicht Transparenten Bildern?! Weis einer wie ich das mit Transparenten bildern machen kann?
imagesearch
06/05/2011 - AutoIt - 4 Replies
Hallo, ich arbeite gerade mit imagesearch... Wenn er ein Bild gefunden hat, dann geht er ja immer in die linke obere ecke davon. Jetzt möchte ich aber das er von der oberen linken ecke, von dem gefundenen Bild, etwas nach rechts und etwas nach unten klickt, wie geht das?
ImageSearch?
01/11/2010 - AutoIt - 4 Replies
Hey, kann einer von euch, einfach für einen Anfänger erklären, wie man mit Autoit die Funktion "ImageSearch" benutzt? Thx für eure Antworten!



All times are GMT +2. The time now is 04:36.


Powered by vBulletin®
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2024 elitepvpers All Rights Reserved.