LoginSignup
0
2

More than 3 years have passed since last update.

FlickrAPIで画像ダウンロード

Last updated at Posted at 2020-04-27

はじめに

画像認識プログラムを作るために、まずは訓練させるための大量の画像データが必要。
そのために、画像データを自動で収集するプログラムを作成する。

参考教材:【画像判定AIアプリ開発・パート1】TensorFlow・Python・Flaskで作る画像判定AIアプリ開発入門

Flickr

画像収集サイト
https://www.flickr.com/

API
https://www.flickr.com/services/api/

下準備

https://qiita.com/Saayaman/items/a3066697a108a7e7fc39
の「1. api登録」参照。
キーと秘密鍵(?)の取得が必要。

インストール方法

pip install flickrapi

ソースコード

検索した画像を指定のフォルダに保存する。download.pyというプログラムを作成する。
例えば、

python download.py monkey

と入力すると、monkeyで検索した画像をmonkeyというフォルダに格納する。

インポート

from flickrapi import FlickrAPI
from urllib.request import urlretrieve
from pprint import pprint
import os, time, sys

APIキーの情報

# APIキーの情報
key = "<<文字列>>"
secret = "<<文字列>>"
wait_time = 1

取得したキーと秘密鍵を格納しておく。
wait_timeは名前の通りウェイト時間。頻繁にFlickrにアクセスすると、アクセス拒否されてしまうため、画像1枚取得する度に1秒待つようにする。

画像情報取得

# 保存フォルダの指定
animalname = sys.argv[1]
savedir = "./" + animalname

flickr = FlickrAPI(key, secret, format='parsed-json')
result = flickr.photos.search(
    text = animalname,
    per_page = 400,
    media = 'photos',
    sort = 'relative',
    safe_search = 1,
    extras = 'url_q, licence'
)

FlickrAPIに、「下準備」で取得したキー、秘密鍵、フォーマットを指定(今回はjson形式)してflickrインスタンスを作成し、flickr.photos.searchメソッドを呼び出す。
resultには以下のようなデータが入っている。

{'photos': {'page': 1,
            'pages': 541,
            'perpage': 400,
            'photo': [{'farm': 66,
                       'height_q': 150,
                       'id': '49823614651',
                       'isfamily': 0,
                       'isfriend': 0,
                       'ispublic': 1,
                       'owner': '14136614@N03',
                       'secret': '888c8a381a',
                       'server': '65535',
                       'title': 'LEGO Minifigures Series 19 Rainbow Bear',
                       'url_q': 'https://live.staticflickr.com/65535/49823614651_888c8a381a_q.jpg',
                       'width_q': 150},
...

画像ダウンロード

resultに入っている情報を使って画像をダウンロードする。
画像のURLをphoto['url_q']で取得。
ダウンロードの実行はurlretrieveで行う。

photos = result['photos']

for i, photo in enumerate(photos['photo']):
    print(i)
    url_q = photo['url_q']
    filepath = savedir + '/' + photo['id'] + '.jpg'
    if os.path.exists(filepath): continue
    urlretrieve(url_q, filepath)
    time.sleep(wait_time)

確認

python download.py monkey

と実行すると、monkeyフォルダに下記のように保存されている。
ただし、サルではない画像(サルの絵だったり、サルと全く関係が無いものなど)も含まれているため、手動で取り除くことが必要。
monkey.png

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2