プログラミング
記事内に商品プロモーションを含む場合があります

Pythonで画像クローラーを作成する方法 | iCrawlerを活用して効率的な画像収集を実現する

アイキャッチ画像
tadanori

はじめに

ディープラーニングを行う場合は画像が必要となります。色々なところで紹介されていますが、icrawlerを使うと、Bing, Googleなどから一括して画像を取得することができます。ディープラーニングのモデルを動かしてみたいとかそういう場合に画像が欲しい場合がありますが、これを使うと簡単に画像を集めることができます(迷惑がかからない範囲で使うのが良いと思います)。

icrawlerとは

icrawlerは、軽量のWebクローラで、メディアデータ・テキスト・その他のファイルをダウンロードするためのミニフレームワークです。icrawlerの公式ドキュメントはこちらです。

icrawlerでは、Filckr, 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)

以下は、GoogleImageCrawlerBingImageCrawlerの引数です。これらの関数を呼び出すとクローラのオブジェクトが生成されます。

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オプション一覧

パラメータ説明
GoogleImageCrawlertype“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).
BingImageCrawlertype“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検索してダウンロードする方法について解説しました。

ディープラーニングなどを行う場合は、画像を集める(ダウンロードする)作業がかなり面倒です。このようなクローラを使って一括ダウンロードするのはアリだと思います。

まぁ、使いすぎは良くない気もするので、利用は計画的に。

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

記事URLをコピーしました