dont_panic Posted May 2, 2016 Posted May 2, 2016 20 minutes ago, dont_panic said: Link for ImageSearch15.au3 is not working! Additionally, the ImageSearch2015.au3 has a lot of problems... In Win 7 64bit it says it needs 32 bit. But no matter if I put the 32 bit dll or the 64 bit dll or both in the folder, it is not working.
Lasker Posted May 16, 2016 Posted May 16, 2016 I have made my own solution for image searching. I would like to share here. Im from spain (if someone of you can notice a bad grammar, etc): My idea is to make an aproximation to the problem, its not perfect but its usefull if you take 1 or 2 tips while using my system: a] You should try to detect images with the upper left corner in a pixel that not has the same color in the background or in big areas (this is for speed reasons). b] Sometimes, in order to set a] tip properly, a trick is to detect an image, lets name it "AUX", that "AUX" verify a] tip, and then, when you get the coordinates of that image with my image detection system, the only thing you need is to apply an offset to that point, exactly the offset to transform that point into the right one, this is, the coordinates of original "TARGET" image. Obviusly this is only valid when the relatives positions between AUX and TARGET are fixed and both of them exists always togheter in the screen. Anyway, the advantages of my system are the following: - You dont need any DLL file or library. - You dont need to deal with extrange problems or bugs mentioned here around the imageSearch posted in this thread. - Your dont need to put a copy of the image file you are trying to detect, neather distribute this file with the script .au3 file. - It doesnt matter the size/resolution of the image, because my algorithm is O(1) efficient in this aspect, i mean, the image size not affect to the speed detection. Even with this advantages... as i said, its not at all a perfect system, because it has the limitation mentioned above, in a] point. I should say that i have make my efforts in every part of the algorithm, i mean, even if you dont take a] point seriously, the system should be as fast as is possible. All i use from AutoIt library is PixelGetColor and PixelSearch (as you can imagine, specially this one). If someone of you are interested in this idea, i can attach here the files, so you can freely dowload, and i will put here also some examples of using this idea, all you wiil need to use the system are these 3 things: -1 Your script file with the image file you want to detect (you will be able to delete the image when all is set up) -2 My image_search.au3 to import in your script (so you can use my func image_search(), that returns the center point of the image). -3 A little Java app that i provide also and i have made specially to make it easy the use of the system. The idea behind this Java app is simple: it takes any image file and generates an .au3 script with only one function, named "func get_<image_name>_<widthxheight>_sign()". This new function, makes a simple signature from the image, a kind of "footprint". This signature has always the same size, thats why the image size doesnt matter. And that signature is what my search in the screen. Then, the scan itself is "optimized" by using PixelSearch in a certain way (not the best way, but i have tried). Anyway, i will put the codes and samples here if there are people with the desire. Cheers. PD: Or maybe i could make a youtube video and share here as a little tutorial or something, but i cant garantee this. GuyFromNJo and WiValdiBB 2
Lasker Posted May 18, 2016 Posted May 18, 2016 (edited) Hello again, Please see this new post: If you are interested in a new image detection solution. I have used a little bit better english, (better than these posts). Thank you and enjoy! Edited May 18, 2016 by Lasker
w1r3dh4ck3r Posted May 20, 2016 Posted May 20, 2016 Hey OP can you take a look at why this thing won't work? I try the code in your example (everything is in place, the files (either 32 or 64 none of them works same error)) #include <ImageSearch.au3> HotKeySet("p", "checkForImage") global $y = 0, $x = 0 Func checkForImage() Local $search = _ImageSearch('checkImage.bmp', 0, $x, $y, 0) If $search = 1 Then MouseMove($x, $y, 10) EndIf EndFunc while 1 sleep(200) WEnd Then I get this error: >"C:\Program Files (x86)\AutoIt3\SciTE\..\autoit3.exe" /ErrorStdOut "C:\Users\w1r3dh4ck3r\Desktop\ImageSearch\Search.au3" "C:\Program Files (x86)\AutoIt3\Include\ImageSearch.au3" (44) : ==> Subscript used on non-accessible variable.: if $result[0]="0" then return 0 if $result^ ERROR >Exit code: 1 Time: 4.889 Please help me out?
trademaid Posted September 8, 2016 Posted September 8, 2016 I have the same error, spend hours on this and cant fix it "C:\Program Files (x86)\AutoIt3\Include\ImageSearch.au3" (44) : ==> Subscript used on non-accessible variable.: If $result[0] = "0" Then Return 0 If $result^ ERROR ->14:47:19 AutoIt3.exe ended.rc:1 +>14:47:19 AutoIt3Wrapper Finished. >Exit code: 1 Time: 4.602
careca Posted September 9, 2016 Posted September 9, 2016 Works fine here, where are you using "$result" var? Spoiler Renamer - Rename files and folders, remove portions of text from the filename etc. GPO Tool - Export/Import Group policy settings. MirrorDir - Synchronize/Backup/Mirror Folders BeatsPlayer - Music player. Params Tool - Right click an exe to see it's parameters or execute them. String Trigger - Triggers pasting text or applications or internet links on specific strings. Inconspicuous - Hide files in plain sight, not fully encrypted. Regedit Control - Registry browsing history, quickly jump into any saved key. Time4Shutdown - Write the time for shutdown in minutes. Power Profiles Tool - Set a profile as active, delete, duplicate, export and import. Finished Task Shutdown - Shuts down pc when specified window/Wndl/process closes. NetworkSpeedShutdown - Shuts down pc if download speed goes under "X" Kb/s. IUIAutomation - Topic with framework and examples Au3Record.exe
Miliardsto Posted September 9, 2016 Posted September 9, 2016 How to find multiple same pictures? I tried with loops but it always give me the same one picture _ImageSearch returns 0 or 1 and i dont know exactly how to achieve this. Maybe there is possibility to $marker will be an array Thx for help Func find_img() Local $yy = 0, $xx = 0 Local $i = 1 Local $marker Do $marker = _ImageSearch('img/map_marker.bmp', 0, $xx, $yy, 0) MsgBox("","","Found "&$i&" Position -"&$xx&" "&$yy) $i = $i + 1 Until $marker <> 0 EndFunc
careca Posted September 9, 2016 Posted September 9, 2016 Maybe _ImageSearchArea in 4 "quadrants" or more, know what i mean? Spoiler Renamer - Rename files and folders, remove portions of text from the filename etc. GPO Tool - Export/Import Group policy settings. MirrorDir - Synchronize/Backup/Mirror Folders BeatsPlayer - Music player. Params Tool - Right click an exe to see it's parameters or execute them. String Trigger - Triggers pasting text or applications or internet links on specific strings. Inconspicuous - Hide files in plain sight, not fully encrypted. Regedit Control - Registry browsing history, quickly jump into any saved key. Time4Shutdown - Write the time for shutdown in minutes. Power Profiles Tool - Set a profile as active, delete, duplicate, export and import. Finished Task Shutdown - Shuts down pc when specified window/Wndl/process closes. NetworkSpeedShutdown - Shuts down pc if download speed goes under "X" Kb/s. IUIAutomation - Topic with framework and examples Au3Record.exe
Miliardsto Posted September 10, 2016 Posted September 10, 2016 Dont know what u mean. It returns me all time same picture.
guestscripter Posted September 10, 2016 Posted September 10, 2016 22 hours ago, Miliardsto said: How to find multiple same pictures? I tried with loops but it always give me the same one picture _ImageSearch returns 0 or 1 and i dont know exactly how to achieve this. Maybe there is possibility to $marker will be an array Thx for help Func find_img() Local $yy = 0, $xx = 0 Local $i = 1 Local $marker Do $marker = _ImageSearch('img/map_marker.bmp', 0, $xx, $yy, 0) MsgBox("","","Found "&$i&" Position -"&$xx&" "&$yy) $i = $i + 1 Until $marker <> 0 EndFunc You're going in the right direction I think by how you are considering usage of your $marker variabl. The main thing you need to do is use the Returned Data in $marker from the _ImageSearch function to change the starting points for the next search on every loop after every previous result. Only on the first search do you want the search to begin at 0,0 which are your $yy and $$xx variables. You want to update those variables after every previous result. You're gonna get in twouble here if that's game automation related, tss tss tss Don't have the time right now to write or test any actual script for you but I hope the idea is clearer now WiValdiBB 1 ImageSearch15.au3 featuring _ImageSearchStartup() and _ImageSearchShutdown()
Miliardsto Posted September 10, 2016 Posted September 10, 2016 1 hour ago, guestscripter said: You're going in the right direction I think by how you are considering usage of your $marker variabl. The main thing you need to do is use the Returned Data in $marker from the _ImageSearch function to change the starting points for the next search on every loop after every previous result. Only on the first search do you want the search to begin at 0,0 which are your $yy and $$xx variables. You want to update those variables after every previous result. You're gonna get in twouble here if that's game automation related, tss tss tss Don't have the time right now to write or test any actual script for you but I hope the idea is clearer now I have done something like above. I have in screen 3 same pics - map_marker.bmp but function gives me always 1 to 10 elements because indicates to this same one picture. :/ Is it possible to define $xx parameter must be different from for example 1212? then I will make another array and put there values of $xx. How to solve this xd Func walker() Local $marker[10] Do $yy = 0 $xx = 0 For $i = 0 to 10 $val = _ImageSearch('img/map_marker.bmp', 0, $xx, $yy, 0) _ArrayInsert($marker, $i, $val) MsgBox("","",$val&" Position -"&$xx&" "&$yy) Next Until $marker <> 0 _ArrayDisplay($marker, "display") EndFunc
careca Posted September 11, 2016 Posted September 11, 2016 On 10/09/2016 at 9:23 AM, Miliardsto said: Dont know what u mean. It returns me all time same picture. What i mean is, divide the screen in 4 parts, for example, and loop through them, may be 4 or 8 or whatever. Obviously you'd have to change the starting coordinates, one way to do that is @DesktopWidth/2 @DesktopHeight/2 or whatever you need for the areas. WiValdiBB 1 Spoiler Renamer - Rename files and folders, remove portions of text from the filename etc. GPO Tool - Export/Import Group policy settings. MirrorDir - Synchronize/Backup/Mirror Folders BeatsPlayer - Music player. Params Tool - Right click an exe to see it's parameters or execute them. String Trigger - Triggers pasting text or applications or internet links on specific strings. Inconspicuous - Hide files in plain sight, not fully encrypted. Regedit Control - Registry browsing history, quickly jump into any saved key. Time4Shutdown - Write the time for shutdown in minutes. Power Profiles Tool - Set a profile as active, delete, duplicate, export and import. Finished Task Shutdown - Shuts down pc when specified window/Wndl/process closes. NetworkSpeedShutdown - Shuts down pc if download speed goes under "X" Kb/s. IUIAutomation - Topic with framework and examples Au3Record.exe
careca Posted September 11, 2016 Posted September 11, 2016 #include 'ImageSearch.au3' #include <Array.au3> Local $x, $y $val = _ImageSearchArea(@ScriptDir & '\map_marker.PNG', 1, 0, 0, @DesktopWidth / 2, @DesktopHeight / 2, $x, $y, 0, 0) If $val = 1 Then MsgBox("", "1", " Position: " & $x & " x " & $y) $val = _ImageSearchArea(@ScriptDir & '\map_marker.PNG', 1, @DesktopWidth / 2, 0, @DesktopWidth, @DesktopHeight / 2, $x, $y, 0) If $val = 1 Then MsgBox("", "2", " Position: " & $x & " x " & $y) $val = _ImageSearchArea(@ScriptDir & '\map_marker.PNG', 1, 0, @DesktopHeight / 2, @DesktopWidth / 2, @DesktopHeight, $x, $y, 0) If $val = 1 Then MsgBox("", "3", " Position: " & $x & " x " & $y) $val = _ImageSearchArea(@ScriptDir & '\map_marker.PNG', 1, @DesktopWidth / 2, @DesktopHeight / 2, @DesktopWidth, @DesktopHeight, $x, $y, 0) If $val = 1 Then MsgBox("", "4", " Position: " & $x & " x " & $y) Spoiler Renamer - Rename files and folders, remove portions of text from the filename etc. GPO Tool - Export/Import Group policy settings. MirrorDir - Synchronize/Backup/Mirror Folders BeatsPlayer - Music player. Params Tool - Right click an exe to see it's parameters or execute them. String Trigger - Triggers pasting text or applications or internet links on specific strings. Inconspicuous - Hide files in plain sight, not fully encrypted. Regedit Control - Registry browsing history, quickly jump into any saved key. Time4Shutdown - Write the time for shutdown in minutes. Power Profiles Tool - Set a profile as active, delete, duplicate, export and import. Finished Task Shutdown - Shuts down pc when specified window/Wndl/process closes. NetworkSpeedShutdown - Shuts down pc if download speed goes under "X" Kb/s. IUIAutomation - Topic with framework and examples Au3Record.exe
WiValdiBB Posted September 13, 2016 Posted September 13, 2016 (edited) _ImageSearchArea will work with changing size of area search using cords of objects found as start point for next searching loop, I'm using bmp's, png should be fine too, I tested that and it search fine You have to test with y coordinates if it work fine but that's a way which You can follow with Your imagesearch Of course You can simplify that, I just want to show what guestscripter explained BTW. I noticed problems with 64 bits imagesearch libraries, Someone tested working 64 bit imagesearch? Local $val0, $val1, $val2, $val3, $val4 Local $x0, $y0, $x1, $y1, $x2, $y2, $x3, $y3, $x4, $y4 $val0 = _ImageSearchArea(@ScriptDir & '\map_marker.bmp', 1, 0, 0, @DesktopWidth, @DesktopHeight, $x0, $y0, 50) If $val0 = 1 Then MsgBox("", "1", " Position: " & $x0 & " x " & $y0) $val1 = _ImageSearchArea(@ScriptDir & '\map_marker.bmp', 1, $x0, 0, @DesktopWidth, @DesktopHeight, $x1, $y1, 50) If $val1 = 1 Then MsgBox("", "2", " Position: " & $x1 & " x " & $y1) $val2 = _ImageSearchArea(@ScriptDir & '\map_marker.bmp', 1, $x1, 0, @DesktopWidth, @DesktopHeight, $x2, $y2, 50) If $val2 = 1 Then MsgBox("", "3", " Position: " & $x2 & " x " & $y2) $val3 = _ImageSearchArea(@ScriptDir & '\map_marker.bmp', 1, $x2, 0, @DesktopWidth, @DesktopHeight, $x3, $y3, 50) If $val3 = 1 Then MsgBox("", "4", " Position: " & $x3 & " x " & $y3) $val4 = _ImageSearchArea(@ScriptDir & '\map_marker.bmp', 1, $x3, 0, @DesktopWidth, @DesktopHeight, $x4, $y4, 50) If $val4 = 1 Then MsgBox("", "5", " Position: " & $x4 & " x " & $y4) Edited September 13, 2016 by WiValdiBB
careca Posted September 13, 2016 Posted September 13, 2016 Yep, 64bit works here. I think there's one thing that would be a great improvement, which is the ability to have the equivalent to a wildcard. For example: an image with transparency areas that would serve as wildcard, so that the surroundings of the image could change, but it would find it anyway, because parts of it would remain the same, know what i mean? Something similar could be done with pixel search, by checking if X pixels to the right of Y, there is a determinate pixel. etc WiValdiBB 1 Spoiler Renamer - Rename files and folders, remove portions of text from the filename etc. GPO Tool - Export/Import Group policy settings. MirrorDir - Synchronize/Backup/Mirror Folders BeatsPlayer - Music player. Params Tool - Right click an exe to see it's parameters or execute them. String Trigger - Triggers pasting text or applications or internet links on specific strings. Inconspicuous - Hide files in plain sight, not fully encrypted. Regedit Control - Registry browsing history, quickly jump into any saved key. Time4Shutdown - Write the time for shutdown in minutes. Power Profiles Tool - Set a profile as active, delete, duplicate, export and import. Finished Task Shutdown - Shuts down pc when specified window/Wndl/process closes. NetworkSpeedShutdown - Shuts down pc if download speed goes under "X" Kb/s. IUIAutomation - Topic with framework and examples Au3Record.exe
WiValdiBB Posted September 13, 2016 Posted September 13, 2016 (edited) careca May You send my Your 64 bits library with Your working example? I tested few of them without success What I don't like in image search is screen resolution relation, Have You tried transblack, transwhite options (ImageSearch_hacked) ? Is not exactly what You want but there is a way to Do You Use FastFind library? Like them much more then Pixelsearch Edited September 13, 2016 by WiValdiBB
careca Posted September 14, 2016 Posted September 14, 2016 (edited) https://drive.google.com/open?id=0B23_uXFHGQQ1M2c2UHdpTC1fd1U Nop, didn't try that and never used fastfind. Edited September 14, 2016 by careca WiValdiBB 1 Spoiler Renamer - Rename files and folders, remove portions of text from the filename etc. GPO Tool - Export/Import Group policy settings. MirrorDir - Synchronize/Backup/Mirror Folders BeatsPlayer - Music player. Params Tool - Right click an exe to see it's parameters or execute them. String Trigger - Triggers pasting text or applications or internet links on specific strings. Inconspicuous - Hide files in plain sight, not fully encrypted. Regedit Control - Registry browsing history, quickly jump into any saved key. Time4Shutdown - Write the time for shutdown in minutes. Power Profiles Tool - Set a profile as active, delete, duplicate, export and import. Finished Task Shutdown - Shuts down pc when specified window/Wndl/process closes. NetworkSpeedShutdown - Shuts down pc if download speed goes under "X" Kb/s. IUIAutomation - Topic with framework and examples Au3Record.exe
nckibonbon Posted September 15, 2016 Posted September 15, 2016 (edited) @JLogan3o13 thanks, and sorry for spam. post edited Edited September 18, 2016 by nckibonbon
Moderators JLogan3o13 Posted September 16, 2016 Moderators Posted September 16, 2016 (edited) I was curious how long this thread would go after being resurrected before someone ruined it for everyone... @nckibonbon please read the forum rules as it is obvious you didn't do so on your way into the forum. You'll notice the section where we don't support game automation, which will tell you why this thread is now locked. Always open to reviewing these things, after a discussion among the Mod team the thread is reopened so as not to be heavy-handed. Edited September 18, 2016 by JLogan3o13 "Profanity is the last vestige of the feeble mind. For the man who cannot express himself forcibly through intellect must do so through shock and awe" - Spencer W. Kimball How to get your question answered on this forum!
Kanne Posted November 17, 2016 Posted November 17, 2016 Hi, I don't know about AutoIT but could manage the DLL working with Delphi: for retrieving all occurences you'll have to Loop (the DLL allways returns the first occurce from left to right THEN from up to down !): so after first match you have to Loop from left to right until no match anymore and then from top to bottom ! example in Delphi: procedure FindAllGraphics(pStartX,pStarty,pEndeX,pEndeY:integer); var pPosX,pPosY,pSizeX,pSizeY,pRetC : integer; sRet : AnsiString; pFileName : AnsiString; sText : AnsiString; sStringList : TStringList; Begin sStringList := TStringList.Create; sStringList.Delimiter := '|'; sStringList.StrictDelimiter := true; pFileName := '*50 z:\ImageSearch.bmp'; sText := ''; sRet := ImageSearch(pStartX, pStarty, pEndeX, pEndeY, PAnsiChar(pFileName)); while (LeftStr(sRet,1) = '1') do begin sText := sText + sRet + #13#10; sStringList.DelimitedText := sRet; pRetC := StrToInt(sStringList.Strings[0]); pPosX := StrToInt(sStringList.Strings[1]); pPosY := StrToInt(sStringList.Strings[2]); pSizeX := StrToInt(sStringList.Strings[3]); pSizeY := StrToInt(sStringList.Strings[4]); sRet := ImageSearch(pPosX+1, pPosY, pEndeX, pEndeY, PAnsiChar(pFileName)); {left to right} if LeftStr(sRet,1) = '0' then begin {no match => lstart left next line} sRet := ImageSearch(pStartX, pPosY+1, pEndeX, pEndeY, PAnsiChar(pFileName)); {top to bottom} end; end; sStringList.Free; memo1.Clear; memo1.lines.Add(TimeToStr(now()) + ' Capture ' + Format(' %d x %d y ... %d x %d y',[xPosStart, yPosStart, xPosEnd, yPosEnd])); memo1.lines.Add(sText); End;
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now