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

iCrawlerで画像収集を自動化する|Pythonでクローリングする方法

アイキャッチ画像
Aru

この記事では、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枚の猫画像が保存されていることが確認できました。

色々なパラメータとか

ビルトインのクローラにはいくつかの種類がありますが、ここでは、GoogleImageCrawlerBingImageCrawlerのパラメータについて書いておきます。クローラでは、引数を使って色々指定することができます。

公式ぺーじのサンプルでは以下のようなコードが記載されており、画像の条件などを細かく指定できることが分かります。コードを見ると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検索してダウンロードする方法について解説しました。

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

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

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

ABOUT ME
ある/Aru
ある/Aru
IT&機械学習エンジニア/ファイナンシャルプランナー(CFP®)
専門分野は並列処理・画像処理・機械学習・ディープラーニング。プログラミング言語はC, C++, Go, Pythonを中心として色々利用。現在は、Kaggle, 競プロなどをしながら悠々自適に活動中
記事URLをコピーしました