A Finder object implements an iterator of matches and allows to search for a visual object in an image file that you provide (e.g. a screenshot taken and saved in a file before). After setting up the finder object and doing a find operation, you can iterate through the found matches if any.
Important to know:
Compared with the region based find operation, no exception FindFailed is raised in case nothing is found at all (use hasNext() to check). The finder object can be compared to what you get with region.getLastMatches() when using findAll().
Note: With this version, there is no chance, to get the number of matches in advance. If you would iterate through to count, afterwards your finder would be empty. So in this case, you have to save your matches somehow (one possible solution see example below).
The workflow always is, that you first do a find operation and afterwards go through the matches found. After a complete iteration, the finder object is empty. So you could start a new find operation again.
Create a new finder object.
Parameters: | path-to-imagefile – filename to a source image to search within |
---|
Find a given image within a source image previously specified in the constructor of the finder object.
Parameters: |
|
---|
Check whether there are more matches available that satisfy the minimum similarity requirement.
Returns: | True if more matches exist. |
---|
Example 1: basic operations using a Finder
1# create a Finder with your saved screenshot 2f = Finder() 3img= # the image you are searching 4 5f.find(img) # find all matches 6 7while f.hasNext(): # loop as long there is a first and more matches 8 print "found: ", f.next() # access the next match in the row 9 10print f.hasNext() # is False, because f is empty now 11f.destroy() # release the memory used by finder
Example 2: we want to know how many matches (based on the previous example).
1# create a Finder with your saved screenshot 2f = Finder() 3img= # the image you are searching 4 5f.find(img) # find all matches 6mm = [] # an empty list 7 8while f.hasNext(): # loop as long there is a first and more matches 9 mm.append(f.next()) # access next match and add to mm 10 11print f.hasNext() # is False, because f is empty now 12f.destroy() # release the memory used by finder 13 14# now we have our matches saved in the list mm 15print len(mm) # the number of matches 16 17# we want to use our matches 18for m in mm: 19 print m