まどかの戯言集

美しく、生きたい。

AWSのLambdaとs3を利用して「#C92コスプレ」タグに投稿される写真の全ての保存を試みる

今年もこの時期がやってきた。

そう、全国のオタク達が国際展示場に集まる「コミケ」の時期。

 

そして、こんな炎天下にも関わらず広場では大量のコスプレイヤー達が、凄くクオリティの高い素晴らしいコスプレを披露してくださっている。

 

今回、僕は彼女と旅行に行ったり、一緒に実家に帰省していたりしたので参加することはできなかったが、推しのレイヤーさん達の写真を見る度にすぐにTwitter上でfavしてRTしていた。

 
一方で、コミケは最近別の観点でオタククラスタ以外のところでも話題になることが多い。

 

露出多めな衣装を身に纏い、そしてカメコ達がそれを囲んでいる様子をヤリチン東大生の稲井大輝くんも呟いていた。

 

 

ローアングル、もはやま◎こ見えているのではないかというギリギリライン、乳首なんて見えているコスプレイヤーはたくさんいるんじゃないかと思いながら、そこにはもはや秩序も何もないのではないかと思ってしまうのだが、彼らなりの何か独自のルールは存在するらしい。

 

まあ、そんなことはどうでも良い。

 

コミケの時期になると、そのコミケのタグでTwitterにたくさんのコスプレイヤーの画像が投稿される。今回は、現在絶賛勉強中のDeepLearningの学習用のデータ収集という目的も兼ねて「#c92コスプレ」というタグを追いかけてみることにした。

 

この記事ではTwitter上の#c92コスプレ」タグに投稿される画像をひたすら収集するために僕がやったことをまとめていく。

 

環境構成(技術セット)

  1. AWS Lambda
  2. AWS S3(simple storage service)
  3. Node.js

実行していたスクリプト

github.com

概要

やっていることはとっても単純で、Lambdaを使い定期的(3分に一度)に上記のタグをTwitterAPIで検索し、ヒットしたものをひたすらs3に保存するというもの。

 

別にLambdaじゃなくてもherokuやjenkinsで実現可能なことだが、Lambdaの勉強も兼ねて今回はこちらの技術セットで実現した。

 

AWS Lambda はサーバーをプロビジョニングしたり管理しなくてもコードを実行できるサービス。必要に応じてコードを実行し、1 日あたり数個のリクエストから 1 秒あたり数千のリクエストまで自動的にスケーリングしてくれるスグレモノ。

 

使用したコンピューティング時間に対してのみに課金されるので、コードが実行中でなければ料金はかからないのも良い点だ。

 

もちろん様々なthird partyのライブラリも使うことが出来るので普通に開発して出来上がったものをzipでまとめてアップするだけで、簡単にローカルで動かしているように動いてくれる。

 

例えば、Jenkinsでこれを実現しようと思うと、まずJenkinsを建てるサーバーを用意する必要がある。このスクリプトを定期実行させるためだけにJenkinsを用意するなんてとっても面倒だ。もし既に何らかの目的でJenkinsがたっているサーバーがあったとしたらそっちを使う方が効率的だろう。

 

別の選択肢としてHerokuも考えられたが定期実行の時間の選択肢が少なく今回の要件を満たしてくれそうになかったので断念した。

 

GitHub - 7madoka/lambda_twitter_image_collector

 

開発したこちらのスクリプトは、見ればわかるようにNodejsで開発されていて、上で説明した流れをそのまま書いている(もっとリファクタ出来ると思うけれど、コミケ開始前日の2時間で作ったというところで妥協点です...)。

 

結果

 

AWS CloudWatchの機能を利用してs3に保存されているオブジェクト数(写真枚数)、そして総容量を確認してみたところ、、

 

画像枚数

f:id:s-a-o-t-o-m-e:20170813232604p:plain

容量(画像のタイトル名間違っているのは気にしないで)

f:id:s-a-o-t-o-m-e:20170813232702p:plain

 

最終的には

  • 約8万枚
  • 約15GiB

という結果に。

 

これから一週間はこのタグにカメコ達が撮影した写真を仕上げて(フォトショレタッチ等)アップするに違いないので引き続き定期実行させて写真を保存していくつもりだ。

 

気になるお値段は..

そして誰もが気になるLambdaやs3のお値段なのだが、、

 

今のところ、1$未満!!!!

 

f:id:s-a-o-t-o-m-e:20170813234109p:plain

 

別のサービスで使っているec2のインスタンス代が一番コストが高い。s3だけだと0.2$/day でLambdaはまだ無料圏内なのでコストが発生していない。AWSやGCP等は従課金制なので使えば使う程上限がないのでどんどん料金が上がっていくので恐れる人は多いが、今回程度のものであればじゃんじゃん使っていけることがわかった。これは嬉しい知見!

 

反省

  • 何のコスプレかわかるように画像を保存すればよかった
  • 途中までツイートのかぶりが発生していた

 

反省を上記にまとめてみた。

 

何のコスプレかわかるように保存すればよかった

まず「何のコスプレかわかるように保存すればよかった」というのは、今後の画像の使用をより簡単にするためにやっておけばよかったと後悔している部分だ。何万枚もの写真を目視で「これは〜の〜というキャラのコスプレだ」とタグ付けしたりしないといけなくて、それはとてもツライ作業になる。もう少し画像収集スクリプトを工夫すれば(例えばツイート文章も画像と同時にいい感じに保存しておくとか)それが簡単になったかもしれない。

 

途中までツイートのかぶりが発生していた

スクリプトを見るとすでに修正されているものがPushされているのでわからないがツイートを取得する際には古い既に検索済みのツイートがヒットしないように「since_id」を利用して検索しているがRTで既に検索済みのものが上にまわってきてもう一度ヒットしてしまうことが発生していた。そのため、RTステイタスがあるものは無視しないといけなかったのだが途中までそれが出来ておらず、結果的に同じツイートから同じ画像を保存している場合が発生していた。こればかりは考慮漏れで反省している。

 

今後の展望

上でもちらっと触れた通り、現在僕はDeepLearningの勉強を個人的にしている。学生時代からかなりお世話になっているなんてこったい先輩に触発され勉強を初めて、実は夏コミ向けにリリースした面白いサービスの開発も少しお手伝いさせてもらっていた。

 

いどうとしょかん

 

『けものフレンズ』というアニメのコスプレをしている人を分類するサービスだ。

 

yokoeworld.hatenablog.com

 

そんなこんなで今回集めた画像を機械学習の学習用データとして活用していきたいと思っている。使い道は色々ありそうなので、これから地道に収集した画像のタグ付け等を行って「利用可能」なデータにしなければいけない(これが途方も無さそうなので外注した方が良いのかな。。)。

 

今回の画像収集プログラムや、機械学習サービスのお手伝いを通して実感したことは、今や、やりたいことは案外簡単に実現出来てしまう世の中になっているということだ。

 

機械学習の分類サービスにしろ、実は、めちゃくちゃ詳しい知識がなくても実装できてしまうし(僕はまだまだですが。。)、AWSの便利機能を使えば、これまでJenkinsを建てて〜みたいに手順が必要だったことが、簡単に手っ取り早く実現できる。

 

便利で、わりと簡単に何でも実現出来てしまう世の中だからこそ、今度はアイディアが重要になってくる。僕の場合は、まだそれを実現するための手段としてのスキルセットがままならないので地道に基礎力を付けていくしか無い。

 

しかし、それと併せて視野を広げて様々な視点から、面白いものを作る訓練をしなければいけない。エンジニアは一生勉強して行く生き物だ。少しでも歩くことをやめると、あっという間に動かない文鎮(壊れたiPhoneのようなもの)になってしまう。

 

そうならないように、日々、勉強するばかりである。

 

参考リンク