
这是我第二次写关于如何用python做图片搜索。第一篇博文。我写的那篇博文引起了很多人的兴趣,甚至到今天我还经常收到人们对它的评论或到github repo来寻求帮助。所以我想是时候进行一次复习了。
Python imagesearch现在是一个pip-eable包
我做了一些工作,把这个库作为一个包。为了让你能直接使用管道库。这比我说 "把文件复制到你的项目中 "这样的废话要好得多。 现在,它就像做.NET一样容易。
pip3 install python-imagesearch
上述方法可能会失败,或者你将无法使用这个库,因为你需要额外的包,这取决于你的操作系统。
Linux
sudo pip3 install python3-xlib
sudo apt-get install -y scrot python3-tk python3-dev python3-opencv -y
MacO
brew install opencv
Windows
不需要额外的安装步骤
快速入门
用python做图像搜索的最简单的例子是这样的。
from python_imagesearch.imagesearch import imagesearch
只需在屏幕上搜索一个出现的图片 "github.png",并打印其X/Y位置
#mc_embed_signup{background:#fff; clear:left; font:14px Helvetica,Arial,sans-serif; width:100%;}/*在你的网站样式表或这个样式块中添加你自己的Mailchimp表单样式覆盖。 我们建议将这个块和前面的CSS链接移到你的HTML文件的头部。*/
订阅更多信息(我保证不会发送垃圾邮件)。
其他功能
图像搜索区
在屏幕的特定矩形上执行图像搜索,这对加快搜索速度非常有用,因为要搜索的屏幕空间会更少。
它还有助于将搜索集中在屏幕的某一特定部分,以减少出现假阳性的机会。
pos = imagesearcharea("./github.png", 0, 0, 800, 600)
if pos[0] != -1:
print("position : ", pos[0], pos[1])
else:
print("image not found")
输入。
image:图像文件的路径(支持的类型见opencv imread
) precision:越高,容忍度越低,发现的假阳性越少 默认为0.8im
:一个PIL图像,如果你打算搜索同一个不变的区域的几个元素,就很有用
。
输出。
如果找到的元素是一个数组[x,y],则为该元素的左上角坐标,如果没有,则为[-1,-1]。
区域抓取器
对优化imagesearcharea或imagesearch的调用很有用,通过获得一个已经处理过的图像,你可以在它上面进行多次搜索,速度也会略有提高。 下面是一个例子
# non -optimized way :
time1 = time.clock()
for i in range(10):
imagesearcharea("./github.png", 0, 0, 800, 600)
imagesearcharea("./panda.png", 0, 0, 800, 600)
print(str(time.clock() - time1) + " seconds (non optimized)")
# optimized way :
time1 = time.clock()
im = region_grabber((0, 0, 800, 600))
for i in range(10):
imagesearcharea("./github.png", 0, 0, 800, 600, 0.8, im)
imagesearcharea("./panda.png", 0, 0, 800, 600, 0.8, im)
print(str(time.clock() - time1) + " seconds (optimized)")
# sample output :
# 0.5233619831305721 seconds (non optimized)
# 0.4075934110084374 seconds (optimized)
输入:一个包含要捕捉的区域的4个坐标的元组 元组应包含坐标:topx, topy, bottomx, bottomy
**输出:**所选区域的PIL图像。
图像搜索_循环
连续搜索屏幕上的图像,直到找到为止,对于制作一个等待脚本直到X图像出现非常有用。例如,等待加载屏幕的结束。
from python_imagesearch.imagesearch import imagesearch_loop
pos = imagesearch_loop("./github.png", 1)
print("position : ", pos[0], pos[1])
输入。
image:图像文件的路径(支持的类型见opencv imread)
time:找不到图像后的等待时间(秒)
precision:越高,容忍度越低,发现的误报越少 默认为0.8
输出。
如果找到的元素的左上角坐标,作为一个数组[x,y]。
imagesearch_numLoop
连续搜索屏幕上的图像,直到找到它或达到最大样本数。
from python_imagesearch.imagesearch import imagesearch_numLoop
输入:
image:图像文件的路径(支持的类型见opencv imread)
time:找不到图像后的等待时间
maxSamples:函数超时前的最大样本数
precision:越高,容忍度越低,发现的误报越少 默认为0.8
输出:元素的左上角坐标,如果找到的元素是一个数组[x,y] 。
imagesearch_region_loop
与imagesearch_loop非常相似,只是它适用于区域。
from python_imagesearch.imagesearch import imagesearch_region_loop
输入。
image:图像文件的路径(支持的类型见opencv imread
)time:找不到图像后的等待时间
x1:左上角x值y1
:左上角y值x2
:右下角x值y2
:右下角y值eprecision
:越高,容忍度越低,发现的假阳性越少默认为0.8
输出。
元素的左上角坐标,作为一个数组[x,y]。
图像搜索_count
计算屏幕上有多少个图像出现的次数。
from python_imagesearch.imagesearch import imagesearch_count
输入。
image:目标图像文件的路径(支持的类型见opencv imread
) precision:越高,容忍度越低,发现的误报越少 默认为0.9
输出。
一个给定的图像在屏幕上出现的次数。
可以选择一个输出图像,所有出现的图像都用红色的轮廓框起来。
从文件夹搜索图像
对一个文件夹中的所有图片进行图像搜索。 这个函数是由kadusalles完成的。
from python_imagesearch.imagesearch import imagesearch_count
results = str(imagesearch_from_folder('./', 0.8))
print(results)
输入。
path: 包含图片的文件夹(支持的图片类型是jpg、gif、png和jpeg
) precision: 越高,容忍度越低,发现的误报越少 默认是0.9
输出。
一个包含所有图像的字典,其中键是图像路径,值是它的位置。
#mc_embed_signup{background:#fff; clear:left; font:14px Helvetica,Arial,sans-serif; width:100%;}/*在你的网站样式表或这个样式块中添加你自己的Mailchimp表单样式覆盖。 我们建议将这个块和前面的CSS链接移到你的HTML文件的头部。*/
订阅更多信息(我保证不会发送垃圾邮件)。
结语
就这样吧!现在你应该能够轻松地用python进行图片搜索了。如果你对实际的代码感兴趣,或者想贡献自己的力量,请到github仓库来:github.com/drov0/pytho…。如果你喜欢我的文章,请到brokencode.io 。
The postHow to easily image search with pythonappeared first onMartin Lees.