iCrawlerで画像収集を自動化する|Pythonでクローリングする方法
この記事では、Pythonで画像クローラーを作成する方法を解説します。具体的には、便利なライブラリ「iCrawler」を活用して、効率的に画像を自動収集する手順を紹介します。ディープラーニングのモデル学習やデータセットの作成時に、大量の画像データが必要な場合、クローリング技術を使った画像収集は非常に役立ちます。
はじめに
ディープラーニングのプロジェクトやモデル学習では、大量の画像データが必要になります。「iCrawler」を使用すれば、BingやGoogleなどの検索エンジンから一括して効率的に画像を取得することが可能です。例えば、モデルのテストや実験用の画像データが欲しい場合、iCrawlerを使えば簡単に収集できます。
迷惑をかけない範囲での利用を推奨します
iCrawlerとは
iCrawlerは、軽量なWebクローラーで、メディアデータやテキスト、その他のファイルをダウンロードするための便利なミニフレームワークです。公式ドキュメントも充実しており、操作はシンプルです(icrawlerの公式ドキュメントはこちらです)。
iCrawlerには、Flickr、Google、Bing、Baiduなどの主要検索エンジンから画像をダウンロードできる組み込みのクローラーが提供されています。これを活用することで、簡単に大量の画像を効率的に取得できます。
クローラ(crawler)とは、超簡単に説明すると、Webサイトや画像・動画、テキストファイルなどのデータを収集するプログラムのことです
インストール方法
python環境があれば、インストールは非常に簡単で、以下を実行するだけです。
pip install icrawler
使い方(とりあえず使う場合はここだけ見ればOK)
とりあえず、サクッと使ってみたい場合は以下のコードを実行してください。
from icrawler.builtin import GoogleImageCrawler
google_crawler = GoogleImageCrawler(
storage={'root_dir': 'images'})
google_crawler.crawl(keyword='cat', max_num=100)
これだけで、Googleの画像検索で’cat’を検索した結果画像が100枚、imagesフォルダに保存されます。超簡単です。実際にスクリプトを実行したフォルダの直下のimageフォルダに100枚の猫画像が保存されていることが確認できました。
色々なパラメータとか
ビルトインのクローラにはいくつかの種類がありますが、ここでは、GoogleImageCrawlerとBingImageCrawlerのパラメータについて書いておきます。クローラでは、引数を使って色々指定することができます。
公式ぺーじのサンプルでは以下のようなコードが記載されており、画像の条件などを細かく指定できることが分かります。コードを見るとfiltersは辞書形式で先に定義しているみたいで、このような使い方が想定されていると思われます。
google_crawler = GoogleImageCrawler(
feeder_threads=1,
parser_threads=1,
downloader_threads=4,
storage={'root_dir': 'your_image_dir'})
filters = dict(
size='large',
color='orange',
license='commercial,modify',
date=((2017, 1, 1), (2017, 11, 30)))
google_crawler.crawl(keyword='cat', filters=filters, offset=0, max_num=1000,
min_size=(200,200), max_size=None, file_idx_offset=0)
以下は、GoogleImageCrawler
、BingImageCrawler
の引数です。これらの関数を呼び出すとクローラのオブジェクトが生成されます。
GoogleImageCrawler
, BingImageCrawler
のパラメータ
パラメータ名 | 説明 |
feeder_threads | フィーダーのスレッド数 |
parser_threads | パーサーのスレッド数 |
downloader_threads | ダウンローダーのスレッド数 |
storage | ダウンロードした画像を保存する場所を指定。辞書型で{'root_dir': pathname } の形で指定する。pathnameは任意のフォルダ名 |
以下は、クローラオブジェクトのcrawl
関数の引数です。
crawl()
のパラメータ一覧
パラメータ名 | 説明 |
keyword | ダウンロードする画像のキーワード |
filters | ダウンロードする画像の条件(filterオプション参照)。辞書型で設定 |
offset | 開始インデックス |
max_num | クロールする画像の最大数 |
min_size | 最小サイズ。タプルで指定。ex. (640, 480) |
max_size | 最大サイズ。タプルで指定。ex. (640, 480) |
file_idx_offset | ファイル名の開始番号 |
filtersパラメータは、辞書型で取得する画像の条件を細かく設定が可能です。ダウンロードした画像を商用りようしたい場合などには、licenseパラメータが有用かもしれません。
commercial
を指定した場合に、実際に商用利用なものだけダウンロードできるのかは確認してません。
あと、date
パラメータで期間を指定できるのは便利です。
filterオプション一覧
パラメータ | 説明 | |
GoogleImageCrawler | type | “photo”, “face”, “clipart”, “linedrawing”, “animated”. |
color | “color”, “blackandwhite”, “transparent”, “red”, “orange”, “yellow”, “green”, “teal”, “blue”, “purple”, “pink”, “white”, “gray”, “black”, “brown”. | |
size | “large”, “medium”, “icon”, or larger than a given size (e.g. “>640×480”), or exactly is a given size (“=1024×768”) | |
lisence | “noncommercial”(labeled for noncommercial reuse), “commercial”(labeled for reuse), “noncommercial,modify”(labeled for noncommercial reuse with modification), “commercial,modify”(labeled for reuse with modification). | |
date | “pastday”, “pastweek” or a tuple of dates, e.g. ((2016, 1, 1), (2017, 1, 1)) or ((2016, 1, 1), None) . | |
BingImageCrawler | type | “photo”, “clipart”, “linedrawing”, “transparent”, “animated”. |
color | “color”, “blackandwhite”, “red”, “orange”, “yellow”, “green”, “teal”, “blue”, “purple”, “pink”, “white”, “gray”, “black”, “brown” | |
size | “large”, “medium”, “small” or larger than a given size (e.g. “>640×480”). | |
lisence | “creativecommons”, “publicdomain”, “noncommercial”, “commercial”, “noncommercial,modify”, “commercial,modify”. | |
layout | “square”, “wide”, “tall”. | |
people | “face”, “portrait”. | |
date | “pastday”, “pastweek”, “pastmonth”, “pastyear”. |
まとめ
以上、icrawlerを使って、画像をgoogle検索してダウンロードする方法について解説しました。
ディープラーニングなどを行う場合は、画像を集める(ダウンロードする)作業がかなり面倒です。このようなクローラを使って一括ダウンロードするのはアリだと思います。
まぁ、使いすぎは良くない気もするので、利用は計画的に。