サンタクロースってこの世に存在するんだっけ?おばけなんだっけ?
気になったので調べます。
はじめに
今回はサンタクロースが「おばけ」に似ているのか「おじさん」に似ているのかをAIを用いて調べます。
おばけとおじさんのデータベースを用意します。
類似度は画像同士の距離を表します。(サンタクロースとおばけの距離)
画像間の距離が短い(数字が小さい) = 似ている
ということで、
サンタクロースは、おばけでした。
実装
- imgsim(たった数行のコードで画像の類似度判定をしてくれるライブラリー)
import cv2
import imgsim
# {画像パス: 画像の距離}の辞書を作成(あとで類似度が高い順にSortするため)
im_dist_dic = {}
# input画像を読み込みます。
input_im = cv2.imread(santa.jpg)
# 類似度判定のためのベクトル化(サンタクロースの画像)
input_vec = vtr.vectorize(input_im)
# データベースの画像を読み込む
db = glob.glob("db/*.jpg", recursive=True)
# データベースは複数枚あるのでfor文で回します。
for db_img_path in data:
db_im = cv2.imread(db)
# 類似度判定のためのベクトル化(DB)
db_vec = vtr.vectorize(db_im)
# 画像間の類似度計算(値が低いほうが似ている画像ということになります。)
dist = imgsim.distance(db_vec, input_vec)
# 結果の格納
im_dist_dic[db_img_path] = dist
# 類似度が高い順にSortする
im_dist_sort = sorted(im_dist_dic.items(), key=lambda x:x[1])
# 結果の出力
from IPython.display import Image
print("入力画像")
display(Image(santa_im_path, width=128))
for im_dist in im_dist_sort:
print("")
display(Image(im_dist[0], width=128))
print("類似度", im_dist[1])
最後に
サンタクロースはおばけということがわかりました。と言いたいのですが、真面目に考察すると、背景の色なども関係していそうですね。