美文网首页
如何用Python和深度神经网络寻找相似图像?

如何用Python和深度神经网络寻找相似图像?

作者: Liao_zhiqiang | 来源:发表于2018-01-22 16:48 被阅读502次

此篇文章适用于用过turicreate框架的开发者,详细篇请看此链接适于初学者
代码
首先,我们读入TuriCreate软件包

import turicreate as tc

我们指定图像所在的文件夹image,让TuriCreate读取所有的图像文件,并且存储到data数据框

data  = tc.image_analysis.load_images('./image/')

我们来看看,data数据框的内容:

data 

data包含两列信息,第一列是图片的地址,第二列是图片的长宽描述。

下面我们要求TuriCreate给数据框中每一行添加一个行号。这将作为图片的标记,方便后面查找图片时使用,并输出查看data。

data = data.add_row_number()
data

下面,是重头戏。我们让TuriCreate根据输入的图片集合,建立图像相似度判别模型。

model = tc.image_similarity.create(data)

这个语句执行起来,可能需要一些时间。如果你是第一次使用TuriCreate,它可能还需要从网上下载一些数据。请耐心等待。
经过或长或短的等待,模型已经成功建立。

下面,我们来尝试给模型一张图片,让TuriCreate帮我们从目前的图片集合里,挑出最为相似的10张来。

为了方便,我们就选择第一张图片作为查询输入。
我们利用show()函数展示一下这张图片。

tc.Image(data[0]['path']).show()

下面我们来查询,我们让模型寻找出与这张图片最相似的10张。

similar_images = model.query(data[0:1], k=10)

我们把结果存储在了similar_images变量里面,下面我们来看看其中都有哪些图片。

similar_images

返回的结果一共有10行。跟我们的要求一致。

每一行数据,包含4列。分别是:

查询图片的标记
获得结果的标记
结果图片与查询图片的距离
结果图片与查询图片近似程度排序值
有了这些信息,我们就可以查看到底哪些图片与输入查询图片最为相似了。

注意其中的第一张结果图片,其实就是我们的输入图片本身。考虑它没有意义。

我们提取全部结果图片的标记(索引)值,忽略掉第一张(自身)。

similar_image_index = similar_images['reference_label'][1:]

把上面9张图片的标记在所有图片的索引列表中过滤出来:

filtered_index = data['id'].apply(lambda x : x in similar_image_index)
filtered_index

验证完毕以后,请执行以下语句。我们再次调用TuriCreate的explore()函数,展现相似度查询结果图片。

data[filtered_index].explore()

我们可以看到,全部查询结果图片中,只出现了哆啦a梦。瓦力的图片,一张都没有出现。

近似图片查找成功!

相关文章

网友评论

      本文标题:如何用Python和深度神经网络寻找相似图像?

      本文链接:https://www.haomeiwen.com/subject/mgtraxtx.html