此篇文章适用于用过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梦。瓦力的图片,一张都没有出现。
近似图片查找成功!