プログラミング、フリーダイビング、ブロックチェーンのブログ

プログラミング道場

Rekognitionを使った画像検索サービスの作成方法【AWSは便利!】

更新日:

本記事の内容


今回は私が作成した画像で検索できるWebサイトの作成方法を紹介します。
設計方法や実際のコードを見られるので、かなり勉強になるはずです。
興味がある方は、読んでみて下さい。
GithubのURLはこの二つです。
コード1
コード2

私が作ったWebサイトの内容

今回、私が作成したサービスは、画像をアップロードすると、類似のAV女優を探し出してくれるというものです。
アップロードした写真は河北彩花です。
それに対して、同じ写真は類似度が99%と表示されているのは当然として、別の写真も92%と表示されています。
「永井みひな」や「河合あすな」も類似度が90%以上と表示されています。
確かに似ている気がします。
AWS Rekognitionは素晴らしいサービスです。

姉妹サイトで、乃木坂46を検索するサイトも作成しました。
こちらがアップロードした写真です。
結構、似ている気がします。

Webサイトを停止した理由

成果物に対してはかなり満足したのですが、このサイトは停止することにしました。
理由はRekognitionの値段が高いからです。
Image APIを通して画像を1,000枚処理すると、150円ほどかかります。
今回、女優のデータベースには100人ほど登録しました。
それは、一回の画像の検索で100回のAPIを投げることを意味します。
すると、一回の検索で15円ほどかかってしまいます。

個人でやる分には、リスクの高いサイトだなと判断して止めることにしました。

Webサイトの設計

ただし、折角なので記録は残しておこうかと思いたって、この記事を書くことにしました。
今回の大きな設計ポイントは、以下のようになります。

  1. AWSにCollectionを作成して、そこに画像を作成する。
  2. AWSのCollectionに対してAPIを投げて、結果を取得する。
  3. DMMのAV女優APIに問い合わせをして、趣味やアフィリエイトリンクを取得する。

では、順番に説明していきます。



AWSにCollectionを作成して、Collectionに画像を登録する

AWS Rekognitionで画像を検索するためには、Collectionを作成してやる必要があります。
Collectionには、対象物を入れます。
例えば、「堀北真希」を画像で検索したいとします。
そのさいには、まずは「horikita」というCollectionを作成してやり、そこに「堀北真希」の画像を登録する作業が必要になります。
「horikita」というColllectionに対して多くの画像を登録すればするほど、「堀北真希」を判断する精度は高くなるはずです。

実際の作業ですが、まずはS3上にバケットを作成します。
バケットとは、画像を保存する場所のようなものです。
通常は、ドメイン名を使います。
今回は、このように定義しました。

bucket_name="s3://imagine-sweetheart.com"
aws s3 mb $bucket_name

次に、バケットに堀北真希の画像をアップロードします。

aws s3 sync $source $bucket_name --acl public-read

そして、そのアップロードした画像をCollectionに登録してやります。

response = client.index_faces()

今、説明した作業を図にすると、このようになります。

AWSのCollectionに対してAPIを投げて、結果を取得する

次は、出来上がったCollectionに対して検索をします。
堀北真希に似た知人の写真をAWS Rekognitionになげてやれば、類似度が返ってきます。

response=rekognition.search_faces_by_image()

 

DMMのAV女優APIにAPIを投げて、趣味やアフィリエイトリンクを取得する

機能的には上の2つだけでもよかったのですが、最後に表示するAV女優の趣味とアフィリエイトリンクが欲しかったので、DMM APIも使用することにしました。

コードの解説

こちらのレポジトリにAWSにCollectionを作成する部分のソースコードをアップロードしました。

./s3.sh

このコードでバケットを作成して、ローカルにある画像をS3にアップロードしています。

create_collection_and_register_face.py

このコードで、ローカルにある複数の画像をCollectionに登録してやります。Collection名は、ローカルのディレクトリ名と同様にしました。

こちらのレポジトリでは、AWSに画像検索とDMMにAV女優検索のAPIを投げています。

def upload():

Flaskを使っており、このコードが起点になっています。
最初の方の処理は画像の加工をしています。

  • 検索したい画像をアップロード
  • 画像の圧縮
  • 画像のバリデーション
  • 画像をS3に保存

次にAWS Rekognitionに検索のAPIをなげるところですが、ここは少し工夫をしました。
通常のloop処理でAPIをなげると時間がかかってしまうからです。
Collectionの回数分だけAPIをなげる必要があり、今回であれば100人のAV女優をCollectionに登録したので、100回のAPIをなげる必要があります。
ただ、それを順番に待っているのは時間の無駄なので、並列処理を行うことにしました。
その処理がここです。

cmd = ['/usr/bin/python3','/var/www/html/bin/async_find_girl_and_dmm.py', file_name, threshold]

それが終わった後で、line 100行目辺りからDMMのAPIを呼び出して、スリーサイズ、趣味といった情報を取得しています。

str = 'https://api.dmm.com/affiliate/v3/ActressSearch?api_id='
str += DMM_APPID + '&affiliate_id=' + API_AFFILIATE_ID + '&hits=4&'
str += 'keyword=' + urllib.parse.quote_plus(girl_name_ja, encoding='utf-8')
str += '&output=json'
dmm_data = urllib.request.urlopen(str)

以上で、簡単ながらソースコードの説明を終わります。
コード量はそれなりにありますが、実際のところかは大したことはやっていません。

最後に一つ。
このサービスを作る上で、一番、大変だったことはCollectionに登録する顔写真を手動で集めることでした(笑)
本格的にやるなら、その作業を自動化しないと駄目ですね!

Good luck for your engineer life!

この記事が面白かった人は、こちらの記事も読んでみて下さい。

Pythonの学習でおすすめの本と動画【2020年最新】

機械学習で何ができますか?【医療からキュウリの選別まで】

AIについて詳しく知りたい人は、この記事を読んで下さい

AIを学びたい人におすすめの本【2020年最新】

人工知能は人間を超えるか AIの第一人者である、東大の教授である松尾さんが書いた本です。 Googleが開発したアルファ碁などで使われているディープラーニングについて解説があります。 これからの社会で起こること、起こらないことをわかりやすく ...

続きを見る


統計学をより詳しく勉強したい人は、この記事を読んで下さい

統計学の学習でおすすめの本と動画【2020年最新】

初心者向け マンガでわかる統計学 素朴な疑問からゆる~く解説 初心者にわかりやすいと評判の本です。 カラー刷りで、漫画イラストを絡めながら統計に関する情報が記載されています。 一度は統計学に挫折した人でも、この本ならばきっとやれると思います ...

続きを見る


数学をより詳しく勉強したい人は、この記事を読んで下さい

機械学習に備えて数学を学習するためのおすすめの本と動画【2020年最新】

中学生レベル 中学校3年分の数学が教えられるほどよくわかる 大人になって数学から離れている人にオススメの一冊です。 中学生が読んでも大人が読んでも役に立つ本です。 「なんとなく」の理解から「人に教えられる」ほどの理解になるはずです^^ 高校 ...

続きを見る


IT業界について詳しく知りたい人は、この記事を読んで下さい

IT業界にいる人におすすめの本【2020年最新】

IT技術を使った会社の生存戦略 ソフトウェア・ファースト Sierを使った開発には限界がきており、これからは事業会社がエンジニアを雇用することで、ITの手の内化が必要だと、筆者は述べています。 現在のSierを使った開発方法の問題点と、事業 ...

続きを見る


Rをより詳しく勉強したい人は、この記事を読んで下さい

Rの学習でおすすめの本と動画【2020年最新】

統計 Rによるやさしい統計学 Rによる統計手法が関数ごとに非常にわかりやすく書かれています。 全て読めば、R関係のソフトウェアの統計解析が理解できるように思います。 Rによる多変量解析入門 多変量解析について勉強したい人にオススメの一冊です ...

続きを見る

関連コンテンツ

-AI, IT業界

Copyright© プログラミング道場 , 2020 All Rights Reserved Powered by AFFINGER4.