首先,讀入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()