【画像認識】 Google画像検索結果を取得する方法 【google image download】
公開日:
:
最終更新日:2020/09/04
機械学習 error, google image download, Google画像検索, python, エラー, 画像取得, 画像認識
今回は、深層学習(DeepLearning)で画像認識をするための画像データの収集を、Google画像検索結果の画像を取得する方法を紹介します。
イメージとしては、収集したい画像のキーワードを指定すると、自動的にそのキーワードの Google画像検索結果の上位のものをダウンロードしてくれる、という感じです。
環境としては、Google Colaboratory を使います。
【Google Colaboratory】クラウド上でPythonを使って機械学習を行う。
Google Colaboratory を使う理由としては、深層学習の学習に PC に対して負荷がかかるため、無料で GPU を使えるからです。
Contents
Google画像検索結果の画像を取得する
以下のコマンドで「google image download」をインストールします。
1 |
!pip install google_images_download |
以下のコマンドで Google画像検索結果の画像をダウンロードします。
「–keywords」でキーワードを指定し、「-f」で取得する画像の拡張子を指定します。
1 |
!googleimagesdownload --keywords "トヨタ プリウス" -f "jpg" |
以下のようなエラーがでました。。。
Item no.: 1 –> Item name = \u30c8\u30e8\u30bf \u30d7\u30ea\u30a6\u30b9
Evaluating…
Starting Download…Unfortunately all 100 could not be downloaded because some images were not downloadable. 0 is all we got for this search filter!
Errors: 0
Everything downloaded!
Total errors: 0
Total time taken: 0.6210567951202393 Seconds
どうやら、以前と Google画像検索の仕様が変わったために、画像の取得ができなくなっているようです。
対処方法としては、GitHub に仕様変更に対応済みのプログラムがあるので、それを使うことです。
https://github.com/Joeclinton1/google-images-download/tree/patch-1
Google Colaboratory 上からは、「git clone」コマンドを使ってダウンロードします。
1 |
!git clone https://github.com/Joeclinton1/google-images-download.git gid-joeclinton |
古い方と競合しないように gid-joeclinton という名前のディレクトリを指定しています。
Cloning into ‘gid-joeclinton’…
remote: Enumerating objects: 4, done.
remote: Counting objects: 100% (4/4), done.
remote: Compressing objects: 100% (4/4), done.
remote: Total 625 (delta 0), reused 3 (delta 0), pack-reused 621
Receiving objects: 100% (625/625), 275.83 KiB | 506.00 KiB/s, done.
Resolving deltas: 100% (362/362), done.
Google Colaboratory の /content/ 直下に gid-joeclinton ディレクトリができます。その中の「google_images_download.py 」を直接実行します。
1 |
!/content/gid-joeclinton/google_images_download/google_images_download.py --keywords "toyota_prius" -f "jpg" |
すると、以下のようにダウンロードできました。
Item no.: 1 –> Item name = toyota_prius
Evaluating…
Starting Download…
Completed Image ====> 1.2016_Toyota_Prius_%28ZVW50R%29_Hybrid_liftback_%282016-04-02%29_01.jpg
Completed Image ====> 2.2020-toyota-prius-mmp-1-1565732347.jpg
Completed Image ====> 3.Toyota-Prius-Prime-PHEV-OEM-.jpg
Completed Image ====> 4.maxresdefault.jpg
Completed Image ====> 5.2019-toyota-prius-limited-1545163015.jpg
Completed Image ====> 6.2020-toyota-prius_100720199_h.jpg
Completed Image ====> 7.dsc_0939-2.jpg
Completed Image ====> 8.2020-toyota-prius_100716003_h.jpg
Wrong image format returned. Skipping…
Completed Image ====> 9.2019-toyota-prius_100682787_h.jpg
Completed Image ====> 10.1Hero_Image_2020_Prius_XLE_AWD-e_Blue_071-1500×1000.jpg
以下省略
デフォルトで 100件 取得されます。また、エラーが表示されている画像は取得できていません。
自動的に「–keywords」で指定したキーワード名のディレクトリが作成され、その中に画像が入っています。
今回の場合は、「/content/downloads/toyota_prius/」ディレクトリに画像が格納されます。
取得した画像を一覧表示させる
先ほど取得したプリウスの画像を一覧表示させ、確認します。
matplotlib と opencv を使います。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
from os import listdir import matplotlib.pyplot as plt import cv2 path = '/content/downloads/toyota_prius/' # os.listdir # path で指定したディレクトリに含まれる ファイル・ディレクトリ名の一覧をリスト形式で返す。 imagesList = listdir(path) print(imagesList) # OpenCV のバージョン確認用 print(cv2.__version__) # 画像(グラフ)1つのサイズを指定 # figsize=(横のサイズ、縦のサイズ) fig = plt.figure(figsize=(20, 100)) # 表示画像列数 columns = 5 # 表示画像行数 rows = 20 i = 1 for file in imagesList: img_bgr = cv2.imread(path + file) img_rgb = cv2.cvtColor(img_bgr, cv2.COLOR_BGR2RGB) # i で左上からの位置数を指定 # 1 2 3 4 5 # 6 7 8 9 10 fig.add_subplot(rows, columns, i) # 番号を表示 plt.title(i) plt.imshow(img_rgb) plt.axis('off') if i < 99: i = i + 1 plt.show() |
結果は、以下のように表示されます。
不要な画像を削除する
確認すると、中には 38番のような車内の画像を取得しているものもあるため、以下のスクリプトで番号を指定して削除します。
1 2 3 4 5 6 7 8 9 |
import os path = '/content/downloads/toyota_prius/' imagesList = listdir(path) i = 1 for file in imagesList: if i == 38: os.remove(path + file) |
参考書籍
関連記事
-
【探索】縦型・横型・反復深化法の探索手法の比較。
探索とは、チェスや将棋や囲碁などのゲームをコンピュータがプレイするときに、どの手を指すかを決定するの
-
【機械学習】パーセプトロン(Perceptron)について。
パーセプトロンは、教師あり学習の中でも、入出力モデルベース(eager learning:働き者の学
-
【PyTorch】ニューラルネットワークを構築する方法【NN】
今回は、PyTorch を使って、ニューラルネットワーク(NN)を構築したときのメモです。 フ
-
【転移学習】学習済みVGG16 による転移学習を行う方法【PyTorch】
今回は、PyTorch を使って、学習済みのモデル VGG16 を用いて転移学習をしてみました。
-
【探索】ダイクストラ法・最良優先探索・Aアルゴリズムの比較。
縦型探索や横型探索では、機械的に順序を付け、最小ステップでゴールを目指します。 つまり、
-
【Weka】CSVファイルを読み込んで決定木を実行。
フリーの機械学習ソフト Weka を使って、CSVファイルを読み込んで決定木(Decision Tr
-
【PyTorch】畳込みニューラルネットワークを構築する方法【CNN】
今回は、PyTorch を使って畳込みニューラルネットワーク(CNN)を構築する方法について紹介しま
-
【PyTorch】GPUのメモリ不足でエラーになったときの対処方法。
PyTorch で深層学習していて、 GPUのメモリ不足でエラーが出てしまったので、対処方法のメモで
-
【機械学習・手法比較】決定木とナイーブベイズを比較してみた。
同じデータを使って、教師有り機械学習手法の 決定木(Decision Tree)とナイーブベイズ(N
-
機械学習の手法のまとめ。
機械学習は、「与えられた入出力事例をモデル化する行為」のことで、ディープラーニングなどで注目を集めて