Bingキーワード検索による画像データの収集を、Pythonライブラリのicrawlerを使って簡単に行う方法を紹介する。たった3行のコードで非常にシンプル。
機械学習などで画像データを使いたい場合に、既存のオープンデータセットを活用できれば手軽に済む。しかし既存のものが存在しない場合には自分でデータセットを作る必要があるだろう。画像を集める際に活用したいのがWeb検索エンジンではないだろうか。
実際にGoogleなどで画像検索を行って1つずつ手動で収集することも不可能ではないが、できればプログラムを使ってある程度は自動化したい。そのようなニーズにマッチするPythonライブラリ「icrawler」があるので、本稿ではその使い方を紹介する。
GitHub上でhellock氏によりオープンソース開発されているicrawlerはWebクローラーのミニフレームワークであり、BingやBaiduなどの検索エンジンに対応している(※元々はGoogleにも対応していたが、2020/10/26執筆時点ではエラーが出て使用できない)。またicrawlerは、PyPIパッケージとして配布されており、Python環境で手軽にインストールできる(リスト1)。
!pip install icrawler
図1はリスト1のコードを、Windows上のVisual Studio Code(以下、VS Code)における[ターミナル]で実行した結果である。
それではさっそく使ってみよう。
本稿では、icrawlerを使って「sunflower(ひまわり)」の画像をBing検索してみる。そのコードは、リスト2のように非常にシンプルだ。
# Bing用クローラーのモジュールをインポート
from icrawler.builtin import BingImageCrawler
# Bing用クローラーの生成
bing_crawler = BingImageCrawler(
downloader_threads=4, # ダウンローダーのスレッド数
storage={'root_dir': 'images'}) # ダウンロード先のディレクトリ名
# クロール(キーワード検索による画像収集)の実行
bing_crawler.crawl(
keyword="sunflower ひまわり", # 検索キーワード(日本語もOK)
max_num=100) # ダウンロードする画像の最大枚数
特に難しいところはないと思うので、細かな説明は割愛する。リスト2内のコメントを参考にしてほしい。使用しているクラスやメソッドのAPIドキュメントは下記のリンク先にある。
図2と図3はリスト2のコードを、同じくVS Codeの[ターミナル]で実行した結果である。
「sunflower(ひまわり)」の画像がとても簡単に収集できた。
上記のコード例だけで十分に活用できると思うが、icrawlerでは(例えば日付やライセンス、サイズなどで)フィルターを掛けたり、独自にクローラーを拡張したりすることもできる。こういったicrawlerの詳細については、
を参照してほしい。
Copyright© Digital Advantage Corp. All Rights Reserved.