1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

おもちゃで遊ぶAdvent Calendar 2022

Day 9

サンタクロースはおばけでした

Last updated at Posted at 2022-12-08

サンタクロースってこの世に存在するんだっけ?おばけなんだっけ?
気になったので調べます。

はじめに

今回はサンタクロースが「おばけ」に似ているのか「おじさん」に似ているのかをAIを用いて調べます。

おばけとおじさんのデータベースを用意します。

おばけのデータベース
image.png
おじさんのデータベース
image.png

結果
image.png

類似度は画像同士の距離を表します。(サンタクロースとおばけの距離)
画像間の距離が短い(数字が小さい) = 似ている

ということで、
サンタクロースは、おばけでした。

実装

  • 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])

最後に

サンタクロースはおばけということがわかりました。と言いたいのですが、真面目に考察すると、背景の色なども関係していそうですね。

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?