みなさんこんにちは、エンジニアのツヅキです。
突然ですが問題です。
みんなのマーケットのオフィスにはC
とDjango
という名前の猫が二匹います。
下記に2枚の画像がありますが、どちらかがC
でどちらかがDjango
の写真です。
さて、どちらがC
でどちらがDjango
でしょうか?
正解は、最初の画像がC
で後の画像がDjango
です。
どちらがC
で、どちらがDjango
かわかりましたか?(私はわかりませんでした)
そんな、どちらがどちらかわからない私のような人間はふと思います。
顔の特徴などがわかったら、2匹を判別できるのではないだろうか。。。。
さあ、ここからが本題、2匹の猫の特徴をOpneCV(インテルが開発・公開したオープンソースのコンピュータビジョン向けライブラリ)[1]を用いてC
とDjango
の顔画像の特徴を調べていきます。
利用する画像について
今回は、4枚の画像を利用しました。
利用するプログラミング言語およびパッケージについて
利用する言語
- Python3
利用するライブラリ
- OpenCV3
特徴を調べる
今回は、4枚の画像の特徴を調べるために、特徴点というものを探していきます。
特徴点とは、際立って検出できる画像上の点のことをいう。[1]
らしいです。
ということで、特徴を見ていきましょう!
特徴を検出するプログラムを以下に示します。
akaze = cv2.AKAZE_create() face_feature = akaze.detect(img) photo_face = cv2.drawKeypoints(img, face_feature, None, flags=2) cv2.imwrite(“test.jpg", photo_face)
上記のプログラム[2]によって検出された2匹の特徴を以下に示します。
上の2枚はC
の特徴を検出したものです。2枚目の画像に関しては背景の画像の特徴も捉えてしまっていますが、おでこのあたりに赤の値が高め
の特徴を多く捉えていることがわかります。
また、下の2枚はDjango
の特徴を検出したものです。おでこのあたりに緑の値が高め
の特徴を多く捉えていることがわかります。
特徴を一致させる
先ほど特徴を調べましたが、今度は別の2匹の画像の特徴を一致させてみます。 特徴を一致させるプログラムの一部を以下にします。
akaze = cv2.AKAZE_create() bf = cv2.BFMatcher() kp1, des1 = akaze.detectAndCompute(img1, None) kp2, des2 = akaze.detectAndCompute(img2, None) matches = bf.knnMatch(des1, des2, k=2) cat = [] for m, n in matches: if m.distance < 0.75 * n.distance: cat.append([m]) img3 = cv2.drawMatchesKnn(img1, kp1, img2, kp2, cat, None, flags=2) cv2.imwrite(“test.jpg", img3)
上記のプログラム[3]によって検出された2匹の特徴を一致させた画像を以下に示します。
上の画像が、C
の特徴を一致させた画像です。おでこのあたりに赤の特徴が一致したことを示す線と鼻のあたりに緑の特徴が一致したことを示す線があります。
また、下の画像が、Django
の特徴を一致させた画像です。おでこから目にかけて緑の特徴が一致したことを示す線と、鼻のあたりに橙色の特徴が一致したことを示す線があります。
結果
2匹の顔画像から特徴を検出することができました。
C
は赤色が多めで、Django
は緑色が多めということがわかりました。
これにより、人間の目で2匹を区別しなくても、特徴点から2匹を判別することができるようになりました。
この技術を応用すれば画像を自動で判別し
「写真に写っているのは人の顔なのか」
「誰が写っている写真なのか」
などがわかるようになるかもしれません。
(これは簡単な特徴を検出しただけなので、この特徴が全てではありません。
また、顔画像ではなくて、背景の中に2匹がいたらどうなるの?とか、他の猫を認識させたらどうなるの?とかはまた別のお話です。)
最後に
私は今、上記の技術を応用して、くらしのマーケットのサイトで活用できるよう奮闘中です。
私たちテックチームでは「くらしのマーケット」を一緒に作る仲間を募集しています。ご興味のある方、ご応募お待ちしております!
www.minma.jp
参考文献
[1] https://ja.wikipedia.org/wiki/OpenCV
[2] https://ja.wikipedia.org/wiki/%E3%82%B3%E3%83%BC%E3%83%8A%E3%83%BC%E6%A4%9C%E5%87%BA%E6%B3%95
[3] https://qiita.com/hitomatagi/items/caac014b7ab246faf6b1