#Thumbnail Zipper
GoogleやBingの画像検索, Instagram, Tumblr, Pinterest, その他多くのサイトから画像をDownloadできます。
この拡張機能は、画像認識の教師データを効率的に集める為に作りました。
#使い方
- Chromeウェブストアから「Chromeに追加」
- 画像をダウンロードしたいサイトを表示
- 下にスクロールして、「Download zip file」をクリック
※何故か英語ですがシンプルなので気にしないでください
#作ることになったきっかけ
TensorFlowの勉強を始めたところ、教師データを用意することが凄く面倒である事が分かってきた。
私は面倒なことは出来ないので楽できる方法を探した結果、Chrome拡張作成に繋がった話が以下に続きます。
はじめはGoogleの画像検索などからゲットしてこれば良いと単純に思っていたのですが、検索結果の画像を
一括で得る良い方法が無く、手作業で集める方法しか思いつかなかった。
他の人の例を調べてみると、クローラー的な方法で集めている記事をいくつか見た。
みんな泥臭いことしてるなと尊敬の念を感じつつ、私も例に習ってクローラーを組むことに。
クローラーで最初に使ったのはTumblrのAPI。
使い始めは特に問題が無かったのだが、Tumblrでは特定のタグだと結果が返ってこない問題に出会った。
具体的には、「美少女」タグでは結果が返って来るが、「女子高生」タグでは結果が返ってこない。
謎である。
タグを色々と変えて調べてみると、結果的にはエロ系のタグが駄目な様子。
女子高生はエロワードなのかよ・・・というツッコミを入れたいが、Tumblrではそうなのかと自己完結。
Tumlbr側の設定で、何かしらの制限を解除するような項目も無さそう。
何かしら制限やってる可能性あるなぁと思える記事も見つけた
APIではなくHTMLを解析する方法も考えたが、クローラーはいったん諦め、仕切り直しすることに。
#状況整理
改めて、その時の状況を整理すると
- TensorFlowでどれだけのことが出来るかを知りたい
- キーワードごとに数百枚程度の画像をダウンロードしたい(解像度は低くても良い)
- サイト、キーワードごとに出てくる画像のキーワードとの関連度も異なるので複数のサイトから取りたい
- とりあえずはGoogleやBing画像検索, Tumblr, Instagram, Pinterest, Flickrあたりを想定
- 可愛い女の子の画像でテストしたい(重要)=つまり女子高生という分類も重要になる(諦めれない)
という状況だった
#調査
上記を実現していく為に、複数サービスのクローラーを作っていくのは大変だなぁと思った
そこで考えたのがブラウザの拡張機能で、ブラウザ上に表示されている画像を全て取得する方法である
その方法だとTumblrの制限も回避できると考えた
最初は自分で作るつもりなどなくて、そういう拡張機能はあるだろうと思い、Chromeで探していたのだが、中々要望を満たせるものを見つけることが出来なかった。惜しい物は沢山あったが、Ajaxなどを使った画面更新や、無限スクロールの先の画像まで追ってくれるものは中々無さそう。
※ちなみに、諦めが早いタイプなので調べると他にあるかも(ついでにChromeしか調べていない)
#作った
要望を満たすものが、見つけれなかったので試行錯誤しながら作ることに
どのようにして作ったか、技術的な話はまた別の機会にしようと思う
拡張機能はほぼ初挑戦だったので色々勉強になった。JavaScriptの時代だなと改めて感じた。
#特徴
- 無限スクロールなどで画面更新した場合の画像も追う(スクロール毎にDOMをチェック)
-
imgタグのsrcの中身しか見ていない(divのbackground-imageなどは見ていない。その為Flickrは未対応)divとulのbackground-imageも見るように修正しました (2017-07-28追記) - 画像全てを見るのでゴミ画像も含まれる
- まとめてzipファイルでダウンロード
- GoogleやBing画像検索, Tumblr, Instagram, Pinterest, Flickrで動作を確認
#最後に
最後まで目を通してくれて感謝です、ちなみにこの記事がQiitaで初投稿だったりします。
良かったら拡張機能も利用していただけると幸いです。