Jump to content

Recommended Posts

Posted
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.

  • 2 weeks later...
Posted

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.

 

Posted (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 by Lasker
Posted

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?

  • 3 months later...
Posted

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

Posted

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

Posted

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

 

 

Posted

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

Posted
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 :)

Posted
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

 

Posted
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.

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

Posted
#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

Posted (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 by WiValdiBB
Posted

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

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

Posted (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 by WiValdiBB
Posted (edited)

https://drive.google.com/open?id=0B23_uXFHGQQ1M2c2UHdpTC1fd1U

Nop, didn't try that and never used fastfind.

Edited by careca
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

  • Moderators
Posted (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 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!

Posted

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;

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...