1. 機械学習用の画像入手は難しい
ちょっとでもやろうとしたことがある人ならわかると思いますが、画像データは そりゃテキストと比較して大きいし、思うように画像を入手できません。
世の中には、CIFAR10のように、 データセットとして公開してくれているもののあります。 しかし、必ずしも自分のやりたいことに沿ったデータがあるとは限りません。
いや、ないです。
ってことで、おそらく多くの場合は、Scrapingすることになります。
2. Scraping?どこから?
GoogleやYahoo!、Bing!といった検索エンジンの画像検索からとってくることになります。
programableにやるためにはREST APIをたたくことになるのです。しかし、こちらにも書いてありますが、タダではありません。あるいは、無料枠の制限があり、その制限は機械学習のデータ収集には到底足りない量です。
ならば、どうするか、、、、Scrapingとなります。
で、実際に検索エンジンで、どんな結果が得られるか、各サービスの画像検索をしてみたわけです。
検索キーワードは、どれも
バレンタイン 本命 チョコ
としました。
Yahoo
Bing
おい、Bingの検索結果がひどいな
googleとyahooの結果はよく似ていますね。 よく見ると、少し順番が違っていたりしますが、その程度です。
が、Bingの検索結果がひどいな
(2回目)
義理の画像がトップにいくつも並ぶとか。。。。。これでは、バレンタインの本命チョコと義理チョコを判定させる教師データとして、とても使えそうないと判断せざるを得ません。
すると、無料で画像を収集するには、
- googleかYahooで
- Scrapingで(REST APIを使わずに)
でやることになります。
じゃぁ、どうやってScraping?
今の世の中は便利でして、、、、ちょっと調べると有用なライブラリがあります。
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が混在しているし、それぞれのフォーマットでも保存形式が異なっているので、前処理として、画像の形式をそろえておく必要があります。その話は、次回することにします。