irucompany’s blog

ただの海洋生物

大量の画像を取得!機械学習でも利用できる「 icrawler」でネット上の画像を取得しよう【Python】

 画像取得モジュール 「icrawler」

 

「icrawler」とはwebクローラのためのモジュールであり、画像などを簡単にスクレイピングすることができます。

「コンテンツの個数」「キーワード」等を指定するだけでいとも簡単に画像などをダウンロードできちゃいます!

そんなモジュールの使い方を初心者向けに、解説を混ぜて紹介していきます。

 
<< 用語集 >>

Webクローラ:自動的にwebにおいてデータを周期的に収集し、データベース化すること。
スクレイピング:webサイトから情報を抽出するコンピュータソフト技術のこと。

 

インストール方法

インストールは簡単で、Pythonがインストールされている機器で

 

pip install icrawler
 

と入力するだけです。

 

 

windows での例
 

 

 

anaconda環境では次のように入力してインストールします。 

 

conda install -c hellock icrawler  

 

 

使用方法

最初に、icrawlerをインポートします。
検索エンジンは数種類ありますが、今回は Google検索エンジンを使用します。

 
from icrawler.builtin import GoogleImageCrawler

from ~ import ○○ では、~というモジュールから○○というクラス(または関数)を取り入れることができます。

randomモジュールを用いて説明したいと思います。初めての方はこちらから学んでみてください。

note.mkmk.me: Pythonでランダムな小数・整数を生成する...

使ったことがある人は多いと思いますが、このモジュール内の randint()という関数を使うときには二種類のインポート方法があります。

簡単な例として、

import random
random.randint(1,100)
#1から100のランダムな数字を出力

というのが一般的です。

 

ですが 「from ~ import ○○」を用いるとこんな風に書けるんです。↓↓

from random import randint
randint(1,100)
#1から100のランダムな数字を出力

 

2行では何のメリットも感じないと思いますが、今回使用する icrawler などのクラスをインポートする際には短く書くことができます!

 


というわけでインポートが完了したら、さっそく使ってみます!!

 

google_crawler = GoogleImageCrawler(storage={'root_dir': 'your_image_dir'}) google_crawler.crawl(keyword='○○',max_num=100)
 

 

↑ こんな感じ

 

 

google_crawler という変数にGoogleImageCrawler()というクラスを入れます。

 

storage={'root_dir': 'your_image_dir'}という行では、

'your_image_dir' ではまとめて保存する画像をまとめるフォルダ(ディレクトリ)の名前を指定できます。ひとまずこのままでいきます。

google_crawler.crawl(keyword='○○',max_num=100)という行では、

keyword = '○○' :実際にあつめる画像のキーワードを指定できます。

max_num=100:あつめる画像の枚数を指定できます。

 

上の画像での例でいうと、

「"your_image_dir"というフォルダに "dolphin" という検索キーワードで得る画像を最大100枚取得する」

というプログラムになります。

もちろん検索キーワードは日本語でも可能です。

 

実際にやってみます ↓↓

私の環境では、上記のプログラムを ' ictest.py 'というファイルにまとめました。

 

実行

実行中の画面

"Crawling task done!" と表示されたら完了!

収集する画像は、実行したプログラムと同じフォルダにダウンロードされます

'dolphin'で出てくる画像
(様々な権利によりモザイク加工しています)

最大100枚で設定しましたが、取得できたのは55枚でした。

詳細は不明ですがおそらく一度のページに表示される画像を取得していると考えられます。

 

「いらすとや」でクローリングすると...



しっかり50枚取得できました!

forなどを利用するともっと効率よく取得することができます。

 

応用:いろいろな使い方

  1. Google以外のエンジンでの検索方法

このモジュールではGoogle以外でも

 

  • Baidu
  • Bing
  • Flickr
  • とにかくいろんなサイト
  • URLのリストから
から収集することができます。

 

このとき形式はGoogleと同じですが、

 

from icrawler.builtin import ○○ImageCrawler

○○_crawler = ○○ImageCrawler(storage={'root_dir': 'なんとかフォルダ'})

○○_crawler.crawl(keyword='△△',max_num=100)

 

プログラムの○○の部分に"Baidu"などを入れるだけです。

 

「とにかくいろんなサイトから」の場合は 〇〇の部分に" Greedy " とインポート

 

「URLリストから」の場合は少し変わります。

これはあらかじめ画像URLをテキストファイルとしてリスト化したものから画像を取得するものになります。

from icrawler.builtin import UrlListCrawler
urllist_crawler = UrlListCrawler(storage={'root_dir': 'your_image_dir'})
urllist_crawler.crawl('URL_Lists.txt')

 

URL_Lists.txtには、保存したい画像のURLを書き込むだけで完了します。

(あまり使わないかな?)

 

 

  2. 条件フィルター

Google等で画像を収集するときに、色やタイプ・日付やライセンス(著作権など)に絞って検索できます。

Googleでの検索を例にとると、下のようなプログラムでできます。

from icrawler.builtin import GoogleImageCrawler
google_crawler = GoogleImageCrawler(storage={'root_dir': 'tests'})
filters = dict(
size='large',
color='orange',
date=((2017, 1, 1), (2022, 11, 30)))
google_crawler.crawl(keyword='ネコ', filters=filters, 
offset=0, max_num=50,min_size=(200,200))

 

このプログラムは、大きい画像サイズ(640x640以上)・オレンジ色風で、2017年最初から2022年11月30日までの、ネコちゃんの画像を50枚取得します。

 

filtersという辞書型配列にサイズや色などを指定します。

どの期間にアップロードされたかも絞ることができます。

 

オレンジ味のネコちゃんが約50匹!

モザイクかけていますが、すべて640x640px以上の画像です。

 

応用:tkinterを用いてGUIで利用する!

Pythonにすでに入っているGUI表示モジュール tkinter を組み合わせるともっと簡単に取得できます。

 

私のGithubリポジトリに上げてあるのでぜひ使ってみてください!

 

iruka_crow : icrawler_PictGet

(全然あやしい誘導とかじゃないです笑)


分からない点や質問等はコメントへ~

 

 

 
 
 
この記事の出典:icrawler