FlickrAPIで画像を一括取得する
環境はGoogle Calboratoryです。
画像認識モデルの学習のなかで登場した技術ですが、この時点でかなりすごいんじゃないかと思い備忘の投稿です。
!pip install flickrapi
FlickerのAPIのライブラリをインストール
import os
import time
from urllib.request import urlretrieve
from flickrapi import FlickrAPI
使うライブラリをインポート
FLICKR_KEY="ユーザーごとのFLICKR_KEY値"
FLICKR_SECRET="ユーザーごとのFLICKR_SECRET値"
FlickrのサイトからAPIのユーザーコードを取得
参考:Axross Recipe
TRAIN=[ "train", "express"]
#TRAINをループしてデータを取得
for train in TRAIN:
#保存フォルダの指定
save_dir = os.path.join("datasets", train)
os.makedirs(save_dir, exist_ok=True)
#Flickr APIの初期化
flickr = FlickrAPI(FLICKR_KEY, FLICKR_SECRET, format="parsed-json")
#TRAINを指定して100件の画像情報を取得
result = flickr.photos.search(text=train,
per_page=100,
media="photos",
sort="relevance",
safe_search=1,
extras="url_q, licence")
#画像情報から実際の画像ファイルを取得
photos = result['photos']
for photo in photos['photo']:
url_q = photo["url_q"] # 画像のURL
filepath = os.path.join(save_dir, photo["id"] + ".jpg") #画像のダウンロード先
urlretrieve(url_q, filepath) # 画像を指定したパスにダウンロードして保存
time.sleep(1) # クローリング先のサーバーに負荷を与えないように1秒処理を止めてFlickrから電車(TrainとExpress)の画像を100枚ランダム取得。
電車の画像を100枚取得するコードです。投稿サイトFlickerに"Train"と登録されているものと"Express"と登録されているものがありそうなので、両方取得しました。
広告バナーの一括作成、記事アイキャッチ量産など、ここから色々組み合わせ余地がありそうです。
(既にGoogleやダイナミックアドテク媒体のレスポンシブディスプレイとかに使われていそう)