Google画像検索結果をスクレイピングする
20
- 1月
2019
Posted By : boomin
Google画像検索結果をスクレイピングする
Advertisements

1. 機械学習用の画像入手は難しい

ちょっとでもやろうとしたことがある人ならわかると思いますが、画像データは そりゃテキストと比較して大きいし、思うように画像を入手できません。

世の中には、CIFAR10のように、 データセットとして公開してくれているもののあります。 しかし、必ずしも自分のやりたいことに沿ったデータがあるとは限りません。

いや、ないです。

ってことで、おそらく多くの場合は、Scrapingすることになります。

2. Scraping?どこから?

GoogleやYahoo!、Bing!といった検索エンジンの画像検索からとってくることになります。

programableにやるためにはREST APIをたたくことになるのです。しかし、こちらにも書いてありますがタダではありません。あるいは、無料枠の制限があり、その制限は機械学習のデータ収集には到底足りない量です。

ならば、どうするか、、、、Scrapingとなります。

で、実際に検索エンジンで、どんな結果が得られるか、各サービスの画像検索をしてみたわけです。

検索キーワードは、どれも

バレンタイン 本命 チョコ

としました。

Google

Advertisements

Yahoo

Bing


おい、Bingの検索結果がひどいな

googleとyahooの結果はよく似ていますね。 よく見ると、少し順番が違っていたりしますが、その程度です。

が、Bingの検索結果がひどいな(2回目)

義理の画像がトップにいくつも並ぶとか。。。。。これでは、バレンタインの本命チョコと義理チョコを判定させる教師データとして、とても使えそうないと判断せざるを得ません。

すると、無料で画像を収集するには、

  • googleかYahooで
  • Scrapingで(REST APIを使わずに)

でやることになります。

じゃぁ、どうやってScraping?

今の世の中は便利でして、、、、ちょっと調べると有用なライブラリがあります。

google-images-download

100枚までの画像なら、このまま使っても画像収集ができます。が、100枚以上ほしければ、Seleniumライブラリを経由してchromedriverを使う必要があります。といっても、オプションにchromedriverのpathを指定するだけです。

Scrapingfrom Google Image Search by using Python Script

それでは、さっそく画像収集Scrapingのsource codeです。

以下のcodeでは、このようなことをしています。

  • 本命チョコ画像と義理チョコ画像を収集するように、2つの検索クエリを実行しています。
  • chromedriverは、適宜実行環境ごとにそのpathを書き換えてください。
  • その他オプションについては、公式を見てください。
  • gif画像はバナーなどだったりするので、教師データに向かないことが多い印象でした。そこで最後に、gif画像は削除しています。

まずはライブラリのインストールです。

pip install google_images_download

そしたら、以下のcodeを実行しましょう。

from google_images_download import google_images_download
import glob
import os

config = {
  "Records": [
    {
      "keywords": "バレンタインデー 本命 チョコ",
      "limit": 10000,
      "no_numbering": True,
      "output_directory": "images",
      "image_directory":"honmei",
      "chromedriver":"C:\\path\\to\\chromedriver.exe",
    },
    {
      "keywords": "バレンタインデー 義理 チョコ",
      "limit": 10000,
      "no_numbering": True,
      "output_directory": "images",
      "image_directory":"giri",
      "chromedriver":"C:\\path\\to\\chromedriver.exe",
    }
  ]
}

response = google_images_download.googleimagesdownload()
for rc in config["Records"]:
  response.download(rc)

# gifイメージはそもそも使わないことにする
gifImgs = glob.glob("images" + os.sep + "*" + os.sep + "*.gif")
print(f"removing gif files: {len(gifImgs)} files")
_ = [ os.remove(f) for f in gifImgs ]

集められた画像の一覧です。

本命チョコ画像

義理チョコ画像

義理チョコと本命チョコの違いの雰囲気、わかりますでしょうか?義理チョコには、かいこの王国 なる画像がありますね。。。。これ、本命としてもらったら、かなり微妙な気がするので、義理のほうに入っていてよかった です(!?)。

こうして集めた画像は、jpegやpngが混在しているし、それぞれのフォーマットでも保存形式が異なっているので、前処理として、画像の形式をそろえておく必要があります。その話は、次回することにします。


Advertisements

コメントを残す